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文件
-
创建一个library工程,写一段简单的代码。
Build -> Make Project
- 将aar文件复制到需要引入的模块下的libs文件夹中。
- gradle中配置引用
在android同级节点做以下配置:
repositories{
flatDir{
dirs 'libs'
}
}
dependencies中配置依赖:
//implementation(name:'xxx',ext:'aar')
implementation(name:'core-library',ext:'aar')
然后同步一下,等待编译完成。
- 验证是否引入成功
4. AAR开发注意事项
资源合并冲突
构建工具会将库模块中的资源与相关应用模块的资源合并。如果在两个模块中均定义了给定资源 ID,将使用应用中的资源。
如果多个 AAR 库之间发生冲突,将使用依赖项列表首先列出(位于 dependencies 块顶部)的库中的资源。
为了避免常用资源 ID 的资源冲突,请使用在模块(或在所有项目模块)中具有唯一性的前缀或其他一致的命名方案。库模块可以包含 JAR 库
可以开发一个自身包含 JAR 库的库模块;不过,需要手动编辑相关应用模块的构建路径,并添加 JAR 文件的路径。库模块可以依赖外部 JAR 库
在开发一个依赖于外部库(例如 Maps 外部库)的情况下,相关应用必须针对包含外部库(例如 Google API 插件)的目标构建。另外也要注意,库模块和相关应用都必须在其清单文件的 <uses- library> 元素中声明外部库。库模块不得包含原始资源
工具不支持在库模块中使用原始资源文件(保存在 assets/ 目录中)。应用使用的任何原始资源都必须存储在应用模块自身的 assets/ 目录中。应用模块的 minSdkVersion 必须大于或等于库定义的版本
库作为相关应用模块的一部分编译,因此,库模块中使用的 API 必须与应用模块支持的平台版本兼容。每个库模块都会创建自己的 R 类
在构建相关应用模块时,库模块将先编译到 AAR 文件中,然后再添加到应用模块中。因此,每个库都有其自己的 R 类,并根据库的软件包名称命名。从主模块和库模块生成的 R 类会在所需的所有软件包(包括主模块的软件包和库的软件包)中创建。