一、打包 aar
1、单个模块打包
打开 Gradle 工具窗口,找到 Android Library 模块. 在 build 任务中双击 assemble. 执行成功后,在 mylibrary/build/outputs/aar 目录下找到 aar 包. 默认 Debug 和 Release 的 AAR 包都会打出来,当然你也可以选择只打 Debug 的包,双击 assembleDebug 任务就可以了. 只打 Release 的包同理.
2、多个模块打包
当要打包的模块又依赖了其它几个模块时,常常需要把它们打包成一个 aar。多模块打包使用 fat-aar(https://github.com/adwiv/android-fat-aar), 打包关键步骤如下: 将下载好的 fat-aar.gradle 文件添加到对应的模块目录中, 并在 build.gradle中引入 apply from: ‘fat-aar.gradle’。 或直接引用
1
|
apply from: 'https://raw.githubusercontent.com/adwiv/android-fat-aar/master/fat-aar.gradle' |
添加要打包的工程,使用 embedded 关键字。示例代码如下:
1 2 3 4 5 6 7 8 |
apply from: 'fat-aar.gradle' dependencies { ... embedded project(':DynamicPageLibrary') embedded project(':VideoPlayerLib') embedded project(':AudioPlayLibrary') embedded project(':BaseCloudMusicResource') } |
1
|
步骤同上《单个模块打包》一致。 |
3、使用fat-aar-plugin能解决fat-aar(https://github.com/Vigi0303/fat-aar-plugin)遇到的诸多问题
问题1:部分依赖没有打包进去
升级到 Android Studio 2.3 后,Gradle Plugin 也升级到 2.3.0,对应推荐使用的 Gradle 版本是 3.3。 这时候会发现项目目录下 {module name}/build/intermediates/exploded-aar/ 目录没了,经过一番查找,发现这并不是一个 Bug,是官方刻意为之,它会在 {user name}/.android/build-cache 下生成一部分缓存文件,来代替 exploded-aar ,如果需要生成它,可以配置项目目录下的 gradle.properties ,添加一行内容:
1
|
android.enableBuildCache=false |
然后重建项目即可在 {module name}/build/intermediates/ 看到 exploded-aar 目录了。 想重新开启 BuildCache 功能,可以修改为 android.enableBuildCache=true 或者直接删除本行内容即可。 https://blog.csdn.net/ys743276112/article/details/62235542
问题2: The prefix “tools” for attribute “tools:overrideLibrary” associated with an element type “uses-sdk” is not bound.
问题通常是由插件引起的。 从项目插件中findAndroidManifest.xml,打开它,然后在 <manifest xmlns:android=“http://schemas.android.com/apk/res/android" 下添加
1 2 |
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" |
保存并重新重build。 这应该解决问题。 你可以看到这个post应该是什么样的。 http://androidcookie.com/typesuses-sdktoolsoverridelibrarytools.html
问题3:编译运行之后就报异常NoClassDefFoundError: android.support.v7.recyclerview.R$styleable
- 重新引入依赖
- 提取RecyclerView的classes.jar,把这个jar包放到项目中的libs文件下即可。 这个jar包就是RecyclerView要使用的, 可以给它改个名字例如android-support-v7-recyclerview.jar https://blog.csdn.net/jtahz1_23/article/details/50569588
二、引入 aar
方法一、通过 libs 引入到 app 中
把 aar 文件放在 libs 目录下 在 app 的 build.gradle 中添加如下内容
1 2 3 4 5 |
repositories { flatDir { dirs 'libs' } } |
之后通过如下方式引入
1 2 3 |
dependencies { compile(name:'test', ext:'aar') } |
Rebuild project 如果发现引入后无法使用,重启 Android studio
方法二、把 aar 作为一个库工程的方式引入
当项目中库工程较多且依赖关系比较复杂时,最好采用这一种方式。 如:某一个库工程也要引入这个 aar 时。
1 2 3 4 5 |
菜单栏 -> File -> New -> New Module -> Import .Jar/.AAR Package -> Next -> 选择 File name 的文件 -> Subproject name 命名工程 -> Finish |
创建完成后是一个工程,工程中包括 aar 文件和 build.gradle 文件。build.gradle文件内容如下:
1 2 |
configurations.create("default") artifacts.add("default", file('musiclibrary_20170622.aar')) |