Gradle 使用技巧 (五) - AAR

本贴最后更新于 2259 天前,其中的信息可能已经时过境迁

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. 参考资料

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3453 回帖 • 201 关注
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    334 引用 • 323 回帖
  • Gradle
    41 引用 • 20 回帖 • 2 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...