aar
是一个类似于jar
的文件格式。但是他们之间是有区别的。
jar
:仅仅包含class和清单文件,没有资源文件。aar
:包含了class文件和资源文件。说白了就是Android的专属“jar” 将代码打包成aar文件,可以在一定程度上加快AndroidStudio
的速度。
Module
打包成aar
文件,提升的效果很显著。 二. 如何得到aar
1. Module的aar文件
将一个AndroidStudio项目中的Module
打包成aar
其实很简单。
Module
的目录下面都会有这样一个文件夹:build\outputs\aar
。这个文件夹下面就放着这个Module
对应的aar
文件。一般情况下会有两个aar
文件,一个debug
版本,一个release
版本。我们选择release
的就ok。 ![](http://upload-images.jianshu.io/upload_images/2225162-8c118dbfc02e4223.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
注意:
新建的Module是没有这个文件夹的。这时,你可以使用 两种方法 生成这个文件夹
- 将整个项目运行一遍,这个文件夹会自动生成
- 执行命令 ./gradlew assembleRelease 也可以生成这个文件夹
Module中的
libs
目录文件会随着项目的编译被打包进aar
文件中,但是build.gradle
中的引用库不会打包进aar
文件中,这个需要 特别留意。如果你忽略了这个Module的build.gradle
中的引用库,很可能引发ClassNotFoundException
异常。
2. 远程仓库的aar
在项目里面经常会引用一下远程仓库的依赖库。
这时,我们也可以将它以aar
的形式引入到项目中。这个依赖库的aar其实也很好找。当你配置好一个依赖库以后,点击 Sync Now
。AndroidStudio会自动下载这个库到C盘(windows)。你找到这个文件就可以了。这里我使用的是Everything
进行搜索,很方便就找到这个库的下载文件夹。其他操作系统就自行搜索吧,总之找见这个项目的下载文件夹就ok。这个下载文件夹中包含了这个项目所需要的所有东西:包括aar
、jar
等文件。 后面会以一个例子详细讲解这个过程
注:
Everything是一个搜索软件,可以瞬间搜索全盘。是一个非常实用的软件。但是很可惜只有windows版本。官网地址:
三. 如何使用aar
想要使用aar文件,需要经过以下几步:
1. 在app的build.gradle中加入以下配置
repositories { flatDir { dirs 'libs' // aar目录 }}2. 将aar文件拷贝到app/libs目录下
3. 在dependencies中加入aar引用
compile(name: 'zbar-release', ext: 'aar')
四. LeakCanary项目示例
因为Module的例子比较简单,所以选择远程代码库作为示例。
这里使用一个经常使用的内存检测项目LeakCanary
来做一个示例。我们通常使用依赖来使用这个库: debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'
当Sync Now
完成后,我们可以在C盘(windows)找见这个项目文件夹。
![](http://upload-images.jianshu.io/upload_images/2225162-a0841bbe5a4c9025.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这个文件夹下面就有我们需要的两个依赖库:leakcanary-android
和leakcanary-android-no-op
![](http://upload-images.jianshu.io/upload_images/2225162-fab5d19f219aa22b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
打开最里层的文件夹,你会发现文件的类型主要有三种:
-
jar文件
:有的项目是以jar文件形式提供 -
aar文件
:有的项目是以aar文件形式提供 pom文件
: (Project Object Model),实际上就是个xml,是对一些必要信息的说明。这里我们只关心一个节点信息:<dependencies>:声明依赖列表
我们用文本编辑器打开leakcanary-android文件夹
下面的pom文件:...
想更多了解pom文件,com.squareup.leakcanary leakcanary-analyzer 1.3 compile
当我们打开leakcanary-android
的pom文件,
leakcanary-android
依赖于leakcanary-analyzer
的1.3版本。 同样的的我们打开leakcanary-analyzer
的pom文件,
leakcanary-analyzer
依赖leakcanary-watcher
和haha
。 leakcanary-watcher
和haha
则没有依赖任何东西。
这样整个leakcanary-android导入本地的东西就是四个:
- leakcanary-android
- leakcanary-analyzer
- leakcanary-watcher
- haha
同样的方式去一层一层解析leakcanary-android-no-op
,将所有需要的文件都导入到AndroidStudio中。这样整个LeakCanary
就被我们真正实现本地化了。
两种结果对比如下:
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'
debugCompile(name: 'leakcanary-android-1.3', ext: 'aar') compile files('libs/leakcanary-analyzer-1.3.jar') compile files('libs/leakcanary-watcher-1.3.jar') compile files('libs/haha-1.1.jar') releaseCompile(name: 'leakcanary-android-no-op-1.3', ext: 'aar')
这样就将整个LeakCanary项目完全转换成了本地的依赖。