Gradle 使用技巧(五) - AAR

  aohanyao

1. 什么是AAR

关于aar文件,摘取官方的解释:AAR 文件的文件扩展名为 .aar,Maven 工件类型也应当是 aar。文件本身是一个包含以下强制性条目的 zip 文件:
- /AndroidManifest.xml
- /classes.jar
- /res/
- /R.txt

此外,AAR 文件可能包含以下可选条目中的一个或多个:
- /assets/
- /libs/名称.jar
- /jni/abi 名称/名称.so(其中 abi 名称 是 Android 支持的 ABI 之一)
- /proguard.txt
- /lint.jar

2. AAR文件位置

AAP的位置为 【项目名称/模块名称/build/outputs/aar/】 中,如果没有aar文件,可以通过点击 Build > Make Project 的方式重新生成此文件。
需要注意的是:只有library模块才会生成aar文件,application模块是不会生成的。

3. 如何使用AAR文件

  1. 创建一个library工程,写一段简单的代码。
    TestUtils

  2. Build -> Make Project

aar文件位置

  1. 将aar文件复制到需要引入的模块下的libs文件夹中。

放入aar
4. gradle中配置引用

在android同级节点做以下配置:

repositories{
	flatDir{
		dirs 'libs'
		}
}

dependencies中配置依赖:

//implementation(name:'xxx',ext:'aar')
implementation(name:'core-library',ext:'aar')

然后同步一下,等待编译完成。

  1. 验证是否引入成功

尝试调用

4. AAR开发注意事项

  • 资源合并冲突
    构建工具会将库模块中的资源与相关应用模块的资源合并。如果在两个模块中均定义了给定资源 ID,将使用应用中的资源。
    如果多个 AAR 库之间发生冲突,将使用依赖项列表首先列出(位于 dependencies 块顶部)的库中的资源。
    为了避免常用资源 ID 的资源冲突,请使用在模块(或在所有项目模块)中具有唯一性的前缀或其他一致的命名方案。

  • 库模块可以包含 JAR 库
    可以开发一个自身包含 JAR 库的库模块;不过,需要手动编辑相关应用模块的构建路径,并添加 JAR 文件的路径。

  • 库模块可以依赖外部 JAR 库
    在开发一个依赖于外部库(例如 Maps 外部库)的情况下,相关应用必须针对包含外部库(例如 Google API 插件)的目标构建。另外也要注意,库模块和相关应用都必须在其清单文件的 元素中声明外部库。

  • 库模块不得包含原始资源
    工具不支持在库模块中使用原始资源文件(保存在 assets/ 目录中)。应用使用的任何原始资源都必须存储在应用模块自身的 assets/ 目录中。

  • 应用模块的 minSdkVersion 必须大于或等于库定义的版本
    库作为相关应用模块的一部分编译,因此,库模块中使用的 API 必须与应用模块支持的平台版本兼容。
  • 每个库模块都会创建自己的 R 类
    在构建相关应用模块时,库模块将先编译到 AAR 文件中,然后再添加到应用模块中。因此,每个库都有其自己的 R 类,并根据库的软件包名称命名。从主模块和库模块生成的 R 类会在所需的所有软件包(包括主模块的软件包和库的软件包)中创建。

5. 参考资料