一、打包 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'))