文章将会讲解android Studio如何打包和引用AAR的问题,这边文章来自个人网易博客,直接复制到CSDN,然后再到同步至知乎。遗憾的是,网易博客停止维护了,我当年写的文章已经不在了,导致一些图片在知乎不显示,所以本文是更正以后的,下面是曾经的记忆地址。
android Studio如何打包和引用AAR
**版权声明CopyRight:本内容作者:sunst,转载或引用请标明出处,违者追究法律责任!!!
一首先:aar包与aar包的区别jar是java字节码文件(class文件)的归档文件,其不包含android中的资源文件等信息;
aar是android中特有的归档文件,既包含字节码文件也包含android的资源文件等;
关于如何打包jar的请自行google。
二:android studio如何打包AAR
一个好的项目需要一个优秀的框架,以适应于什么流媒体播放,智能家居,智能医疗,甚至是Google的汽车。这是这篇文章的初衷,通过aar我们可以减少项目中层级的依赖关系
step 1:创建一个Module
创建一个Android Project ,然后再创建一个Module Libray Project ,如何创建请参考:android studio中如何打包和引用aar ,这里不再赘述。遗憾的是,网易博客停止维护了,我当年写的文章已经不在了,在知乎这里继续补充图1-sunst创建Module,选择Android Library
说明:创建Module,选择Android Library,我们打包Aar部分为了引用资源文件。
step 2:确定moudle下面的build.gradle文件
要输出aar的包,必须将项目配置成library ,将其中的com.android.application修改为com.android.library,并且将applicationId 这一行删掉提示:如果已经是这样就不必再修改了
在build.gradle文件中进行输出AAR。如下
apply plugin: 'com.android.library'
如果需要输出apk文件则是下面这个样子:
apply plugin: 'com.android.application'图2-sunst确定moudle下面的build.gradle文件
step 3:编译我们的module,生成aar
将Module配置为library后,构建输出一个aar文件,根据渠道和BuildType的不同,在相应的目录下可以找到。比如对BuildType为debug的配置,输出为:[ModuleName]/build/outputs/aar/[ModuleName]-debug.aar。aar文件其实就是一份zip 包,和jar不同的是,它将一些资源文件、第三方库文件、so 文件等等都打包在内,而代码文件编译后压缩在classes.jar 中,上面区别也讲了。
AAR在对应的module这个文件下面,如图。图3-sunst-编译我们的module,生成aar
提示:我们最好是生成Release版本的AAR
step4:验证结果AAR
查看module下的build/output文件夹,即可看到生成的aar文件,我们一般选用那个release版本的aar文件即可图4-生成suns-release.aar的截图
说明:这里为了重新补图,我重新编译了我个人的an系列sailf开源框架的项目。所以图4是an系列sailf的aar。表示的意思的sunst- ai-li-fang-fang,没有任何办法,我实在是太爱她了。
三:android studio如何引用AAR
step1:导入aar项目。
有两种方式,1种方式比较简单,打开一个project struture ,添加一个新 Module,然后选择 Import *.JAR or *.AAR Package 的方式导入:
导入成功以后就可以在project目录中看到刚刚导入的项目了,里面有awaarssnst-debug.aar这个文件,这样在android studio会自动导入aar依赖的build.gradle的配置。如图(网易里面的图没了,尴尬)图5-导入AAR,import.jar/aar方式导入aar包
第2种方式是直接复制aar,到我们需要的module的libs下面,如下图图6-导入mymoudle.aar,通过libs复制提示:这里不用纠结截图中是那个aar,我们的最终目的都是为了引用aar,可以把这里的aar都当成同一个aar。
step2:使用配置依赖的方式引用。
第一步完了就可以在gradle中配置依赖了,其他Module也可以引用这个Module了,依赖方式使用 compile project 的方式即可,或者是implement,或者api的方式缺点:如果没有原项目,被依赖的aar无法F3跟进去,无法看到资源文件内容以及目录层级等等缺陷(其实我们可以反编译)。
app的gradle.buid配置文件中,如下代码(被注释掉的地方为个人aar应用的utils)
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile(name: 'sunst-release', ext: 'aar')
// compile project(":AndroidUtils")
compile 'com.android.support:appcompat-v7:23.2.1'
compile 'com.android.support:recyclerview-v7:23.2.1'
}
值得注意的是第一步将aar文件放入引用Module的libs目录下后,和一般的jar文件引用类似,需要在moudle的build.gradle配置文件中把 libs 目录加入依赖
repositories {
flatDir {
dirs 'libs' //this way we can find the .aar file in libs folder
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile(name: 'sunst-release', ext: 'aar')
// compile project(":AndroidUtils")
compile project(":awaarssnst-debug")
compile 'com.android.support:appcompat-v7:23.2.1'
compile 'com.android.support:recyclerview-v7:23.2.1'
}
在 gradle 的依赖配置中加入 compile(name: 'xxx', ext: 'aar') 这一句,依赖即可关联完毕。
step3:构建工程。
会在Module的build/intermediates/exploded-aar 目录下,生成一些临时文件。如果android studio安装了反编译工具则可以按F3进入代码,查看源代码文件,如果有这部分文件,则可以编译修改代码。
四:AAR其他说明
细心的朋友已近看到我这里有两个aar,是的,其中一个AndroidUtils就是个人封装的Utils的工具类,带有资源,方便自己对代码进行集中管理,一些常用的东西都封装在了里面。比如里面含有一个搜集用户错误的Log日志系统,还有一些常用的字符串的校验,以及MD5加密算法的,如果想要研究的话,可以自己动手封装自己的AAR库。
需要说明的是
compile project(":AndroidUtils")
compile(name: 'sunst-release', ext: 'aar')
一个是compile project 一个compile ;一个控制权在你的手中,一个在别人手中。你觉得哪个好呢?说明:项目中出现的awNightDay项目是一个实现了关于如何实现知乎和简书的夜间模式以及它的切换效果,其中用到了AAR引用的日志系统。
以上就实战的分析了android如何创建AAR,以及如何引用的AAR