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

  1. 在app的build.gradle中加入以下配置,和dependencies同级
repositories {    
    flatDir {        
        dirs 'libs'   // aar目录
      }
}

2.将aar文件拷贝到app/libs目录下,这里要特别小心,如果是app/src/libs,前面就要写成dirs 'src/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本地化

这里使用一个经常使用的内存检测项目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盘找到这个项目文件夹。

这个文件夹下面就有我们需要的两个依赖库:leakcanary-android和leakcanary-android-no-op 目录结构如下(1.3是对应的版本号):
pom文件是对一些必要信息的说时,其中的节点声明了依赖列表: leakcanary-android文件夹下面的pom文件:
  ...
  <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导入本地的东西就是四个:
  1. leakcanary-android
  2. leakcanary-analyzer
  3. leakcanary-watcher
  4. 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')

本地化技巧

建立一个使用远程导入的工程B作参考。
如果<dependencies>下的节点如下:

<dependency>
      <groupId>com.xx.android.stmobile</groupId>
      <artifactId>stmobileAPI</artifactId>
      <version>2.1.0</version>
    </dependency>

那么它一般是位于
.gradle\caches\modules-2\files-2.1\com.xx.android.stmobile\stmobileAPI\2.1.0\文件夹下。
在工程B的External Libraries中会有对应的:Gradle:com.xx.android.stmobile.stmobileAPI-2.1.0
可以很明显看出它们之间的关键词联系

1.文件夹中的stmobileAPI-2.1.0.aar直接取出作为本地导入,它是我们需要的文件。
2.stmobileAPI-2.1.0-sources.jar是jar源码包,可以取出来解压看看源码。
3.stmobileAPI-2.1.0-javadoc.jar是在线的api帮助文档,不需要。
4.它的stmobileAPI-2.1.0.pom继续循环推理下去。

就算你按照pom循环推理,添加了所有的aar和jar,代码可能编译通过了,但还是运行失败,那么按照错误提示,跳转到缺失的jar或aar中,然后在工程B的External Libraries中找到对应的jar或aar,按上面的关键词联系搜索添加进去即可。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值