Android-0.Android Studio中导入外部aar包和远程aar本地化
简介
jar:仅仅包含class和清单文件,没有资源文件。
aar:包含了class文件和资源文件。也可认为是Android的专属“jar”
将代码打包成aar文件,可以在一定程度上加快AndroidStudio的速度。尤其是将Module打包成aar文件,提升的效果很显著。
生成aar
在每一个Module的目录下面都会有这样一个文件夹:build\outputs\aar。这个文件夹下面就放着这个Module对应的aar文件。一般情况下会有两个aar文件,一个debug版本,一个release版本。我们选择release的即可。
1.记得Module选择的是Android Library
2.选中刚生成的myLibraray,Build–>Build Module"mylibrary"
Module中的libs目录文件会随着项目的编译被打包进aar文件中,但是build.gradle中的引用库不会打包进aar文件中,这个需要
特别留意。如果你忽略了这个Module的build.gradle中的引用库,很可能引发ClassNotFoundException异常。
远程仓库的aar
在项目里面经常会引用一下远程仓库的依赖库。这时,我们也可以将它以aar的形式引入到项目中。这个依赖库的aar其实也很好找。当你配置好一个依赖库以后,点击 Sync Now 。AndroidStudio会自动下载这个库到C盘
可能需要在.gradle中配置远程仓库:
allprojects {
repositories {
maven {
url "http://xxxxx/content/groups/public"
}
}
}
导入本地的aar
- 在app的build.gradle中加入以下配置,和dependencies同级
repositories {
flatDir {
dirs 'libs' // aar目录
}
}
2.将aar文件拷贝到app/libs目录下
3.在dependencies中加入aar引用
implementation(name:'xxx', ext:'aar')
// 如果有jar
implementation(name:'xxx', ext:'jar')
或者全部引用
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
远程aar本地化
使用Everything进行搜索,很方便就找到远程库的下载文件夹。总之找到项目的下载文件夹就ok。这个下载文件夹中包含了这个项目所需要的所有东西:包括aar、jar等文件。
这里使用一个经常使用的内存检测项目LeakCanary来做一个示例。我们通常使用依赖来使用这个库:
dependencies {
.....
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'
}
Sync Now完成后,搜索leakcanary-android,我们可以在C盘找到这个项目文件夹。
...
<dependencies>
<dependency>
<!--包组 id,通常是发布者拥有的域名的反向,以免跟别人的重复-->
<groupId>com.squareup.leakcanary</groupId>
<!--包 artifactId,其实就是组以下应该有一个更小的归类-->
<artifactId>leakcanary-analyzer</artifactId>
<!--版本号-->
<version>1.3</version>
<scope>compile</scope>
</dependency>
</dependencies>
...
我们发现leakcanary-android依赖于leakcanary-analyzer的1.3版本。
leakcanary-analyzer文件夹下的pom文件:
<dependencies>
<dependency>
<groupId>com.squareup.haha</groupId>
<artifactId>haha</artifactId>
<version>1.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.squareup.leakcanary</groupId>
<artifactId>leakcanary-watcher</artifactId>
<version>1.3</version>
<scope>compile</scope>
</dependency>
</dependencies>
它依赖于leakcanary-watcher和haha。同样分析下去,leakcanary-watcher和haha没有依赖任何东西。
- 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')