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