1. 何为aar?

大家都知道jar文件把,如果你有一个Android Library项目,可以很容易的导出jar文件,然后在其他项目中很方便的引用,aar和jar类似,区别就是一个Android Library项目导出的jar文件不能包含资源文件,比如一些drawable文件、xml资源文件之类的,所以这就有很大的限制,在gradle之前我们要引用带资源文件的Android Library必须要把整个library导入进来进行引用,但是有了gradle之后,Android Library项目可以直接导出成aar,然后其他项目像引用jar的方式直接方便的引用。

2.生成方法


要输出 aar 文件,必须将 Module 配置为 library,在 gradle 文件中如下:
Moduled中的build.gradle文件的第一行参数:

1. 输出aar,即想生成aar就在这里把Mudule配置为library

apply plugin: 'com.android.library'


2.生成apk

apply plugin: 'com.android.application'

比如对BuildType 为debug 的配置,输出为:[ModuleName]/build/outputs/aar/[ModuleName]-debug.aar。

注意:

如果是把普通的工程转化成依赖包的话,还需要删除:

applicationId "com.***"



3.单独编译一个aar


现在我的一个 project 下面有多个 Module ,一开始不知道如何单独编译某个 Module , 现在记录下
在 Terminal 标签下输入
./gradlew :your_module_name:task_name    如:./gradlew :app:assembleRelease



3. 添加依赖


在当前需要添加依赖的项目中找到build.gradle


repositories { 
 
 flatDir { 
 
 dirs 'libs' //this way we can find the .aar file in libs folder 
 
 } 
 
 }


告诉去libs下找aar


然后在依赖(dependencies)中添加你的aar,例如我写了一个自定义控件,生成之后为
myviewlayout-debug.aar,即可在其中加上:

compile(name: 'myviewlayout-debug', ext: 'aar')
到此,需要更改的配置就完成了,只需再点击下右上角出现的sync Now即可更新Gradle配置啦!。



4. 调用


调用方法与jar文件一样,只需导入包名即可调用里面的函数或者控件之类的。
例如,我之前测试的时候写了一个自定义标题栏myView.aar,
在module中的包名为:
com.example.myView

添加依赖后,在当前项目中的布局添加控件:
<com.example.kenjc.myview.MyBar



5.注意


aar不会将依赖的lib包打包进来, 哪里引用aar, 哪里要把aar需要的lib一块引入进来



6.使用aar中的activity

//方法一 可行 
 
         try{ 
 
             Intent intent = new Intent(android.content.Intent.ACTION_VIEW); 
 
             //这里的packetname 一定记住填写 调用方的packetname 因为 aar最终会被合并到调用方的manifest文件 
 
             intent.setComponent(new ComponentName("com.examole.test",//packagename 
 
                     "com.example.module.LYMainActivity"));//classname// 
 
             startActivity(intent); 
 
         } catch (Exception e) { 
 
             Toast.makeText(getApplicationContext(),e.getMessage() ,Toast.LENGTH_LONG).show(); 
 
   
 
         } 
 
         return; 
 
         //方法二 可行 
 
     //        //此种方式 需要androidmanifest.xml添加相应的activity 
 
     //        startActivity(new Intent(this,LYppMainActivity.class)); 
 
     //        return;