用户登录
用户注册

分享至

gradle 打包aar

  • 作者: 阿林森
  • 来源: 51数据库
  • 2020-10-05
要输出aar文件,必须将Module配置为library,在gradle文件中如下:输出aar:applyplugin:'com.android.library';输出apk:applyplugin:'com.android.application'。将Module配置为library后,构建输出一个aar文件,根据渠道和BuildType的不同,在相应的目录下可以找到。比如对BuildType为debug的配置,输出为:[ModuleName]/build/outputs/aar/[ModuleName]-debug.aar。一份aar文件其实就是一份zip包,和jar不同的是,它将一些资源文件、第三方库文件、so文件等等都打包在内,而代码文件编译后压缩在在classes.jar中。比如:3、导入aar的方式引用这种方式比较简单,打开ProjectStructure,添加一个新Module,然后选择Import*.JARor*.AARPackage的方式导入:导入后,在你的工程下面,会生成一个文件夹,里面是aar文件以及AndroidStudio的配置文件。接着可以在gradle中配置依赖了,其他Module可以引用这个Module了,依赖方式使用compileproject的方式即可。缺点:被依赖的aar无法F3跟进去,无法看到资源文件内容以及目录层级等等缺陷。4、使用配置依赖的方式引用gradle其实还有另一种依赖可以引用aar:compile(name:'xxx',ext:'aar')。首先需要将aar文件放入引用Module的libs目录下,和一般的jar文件类似。然后在gradle配置文件中把libs目录加入依赖:?12345repositories{flatDir{dirs'libs'}}接着在gradle的依赖配置中加入compile(name:'xxx',ext:'aar')这一句,依赖即可关联完毕。构建一下工程,在Module的build/intermediates/exploded-aar目录下,可以看到有一些临时文件生成:看起来完全是引用aar的解压版本。AndroidStudio安装反编译插件后,可以通过F3跟进到class文件里面,如果你有被依赖Module的源代码的话,还可以AttachSource关联源代码查看。另外,可以很方便的查看aar中的资源文件。另外,这种依赖方式更新aar后,生成的临时文件也会随之变动,不用担心改动不同步的问题。



  一. 简介 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。 注意: 新建的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版本。 官网地址:<a target="_blank">https://www.voidtools.com/</a>" target="_blank"><a target="_blank">https://www.voidtools.com/</a></a> 三. 如何使用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)找见这个项目文件夹。 这个文件夹下面就有我们需要的两个依赖库:leakcanary-android和leakcanary-android-no-op 点开leakcanary-android文件夹,目录结构如下(1.3是对应的版本号): leakcanary-android文件夹 打开最里层的文件夹,你会发现文件的类型主要有三种: jar文件:有的项目是以jar文件形式提供 aar文件:有的项目是以aar文件形式提供 pom文件: (project object model),实际上就是个xml,是对一些必要信息的说明。这里我们只关心一个节点信息:<dependencies>:声明依赖列表 我们用文本编辑器打开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的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项目完全转换成了本地的依赖。
软件
前端设计
程序设计
Java相关