jar包与aar包的区别
-
jar是java字节码文件(class文件)的归档文件,其不包含android中的资源文件等信息;
-
aar是android中特有的归档文件,既包含字节码文件也包含android的资源文件等;
apply plugin: 'com.android.library'
如果需要输出apk文件则是下面这个样子:
apply plugin: 'com.android.application'
将 Module 配置为 library 后,构建输出一个 aar 文件,根据渠道和 BuildType 的不同,在相应的目录下可以找到。比如对 BuildType 为 debug 的配置,输出为:[ModuleName]/build/outputs/aar/[ModuleName]-debug.aar。一份 aar 文件其实就是一份 zip 包,和 jar 不同的是,它将一些资源文件、第三方库文件、so 文件等等都打包在内,而代码文件编译后压缩在在 classes.jar 中。
2。 运行输出AAR包。
aar在想对应的module这个文件下面,如图。
3。导入aar项目。
这种方式比较简单,打开一个project struture ,添加一个新 Module,然后选择 Import *.JAR or *.AAR Package 的方式导入:
导入成功以后就可以在project目录中看到刚刚导入的项目了,里面有awaarssnst-debug.aar这个文件,和android studio ,以及gradle的配置文件。如图
然后,就可以在 gradle 中配置依赖了,其他 Module 可以引用这个 Module 了,依赖方式使用 compile project 的方式即可。
缺点:如果没有原项目,被依赖的 aar 无法 F3 跟进去,无法看到资源文件内容以及目录层级等等缺陷(其实我们可以反编译)。
4。使用配置依赖的方式引用。
这里官网查过,使用aar有两种方式。
1)app的gradle.buid配置文件中,如下代码(被注释掉的地方为个人aar应用的utils)
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile(name: 'AndroidUtils', ext: 'aar')
// compile project(":AndroidUtils")
compile 'com.android.support:appcompat-v7:23.2.1'
compile 'com.android.support:recyclerview-v7:23.2.1'
compile 'com.android.support:cardview-v7:23.1.1'
}
首先需要将 aar 文件放入引用 Module 的 libs 目录下,和一般的 jar 文件类似。然后在 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: 'AndroidUtils', 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'
compile 'com.android.support:cardview-v7:23.1.1'
}
在 gradle 的依赖配置中加入 compile(name: 'xxx', ext: 'aar') 这一句,依赖即可关联完毕。
构建一下工程,在 Module 的 build/intermediates/exploded-aar 目录下,可以看到有一些临时文件生成,如图:
如果android studio安装了反编译工具则可以按F3进入代码,查看源代码文件,如果有这部分文件则可以编译修改代码进行有话。
细心的朋友已近看到我这里有两个aar,是的,其中一个AndroidUtils就是个人封装的Utils的工具类,带有资源,方便自己对代码进行集中管理,一些常用的东西都封装在了里面。比如里面含有一个搜集用户错误的Log日志系统,还有一些常用的字符串的校验,以及MD5加密算法的,如果想要研究的话,可以自己动手封装自己的AAR库。
5。总结很重要。
以上就实战的分析了android如何创建AAR,以及引用的AAR的两种方式,细心的读者可能发现了,我并没有明说,第二种引用的方式,其实再仔细点你就会发现我已经指出来compile project(":AndroidUtils") .
一个是compile project 一个compile ;一个控制权在你的手中,一个在别人手中。你觉得哪个好。
说明:项目中出现的awNightDay项目是一个 实现了关于 如何实现知乎和简书的夜间模式以及它的切换效果,其中内用用到了AAR引用的日志系统。
https://github.com/qydq/awNightDay
参考链接:
http://jingyan.baidu.com/article/ca2d939d0faed1eb6c31ced9.html
http://blog.csdn.net/qq_23547831/article/details/51966166
这里感谢 ,一帆枫叶作者,个人一直在拜读他的文章,写的很好,大家可以去看看,以上是他的链接。