Gradle 使用技巧(五) - AAR

简介: 1. 什么是AAR关于aar文件,摘取官方的解释:AAR 文件的文件扩展名为 .aar,Maven 工件类型也应当是 aar。文件本身是一个包含以下强制性条目的 zip 文件:/AndroidManifest.

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工程,写一段简单的代码。


    img_83ad35f519a478c02e9e15bf4036806c.png
    TestUtils
  2. Build -> Make Project

img_323dfd8b98d924e28d3b5cf07ff0f241.png
aar文件位置
  1. 将aar文件复制到需要引入的模块下的libs文件夹中。
img_c255823c738fb3fece163d75199ce34c.png
放入aar
  1. gradle中配置引用

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

repositories{
    flatDir{
        dirs 'libs'
        }
}

dependencies中配置依赖:

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

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

  1. 验证是否引入成功
img_2ef6379d6ac0ffab5ef9d2b517f22c66.png
尝试调用

4. AAR开发注意事项

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

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

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

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

  • 应用模块的 minSdkVersion 必须大于或等于库定义的版本
    库作为相关应用模块的一部分编译,因此,库模块中使用的 API 必须与应用模块支持的平台版本兼容。

  • 每个库模块都会创建自己的 R 类
    在构建相关应用模块时,库模块将先编译到 AAR 文件中,然后再添加到应用模块中。因此,每个库都有其自己的 R 类,并根据库的软件包名称命名。从主模块和库模块生成的 R 类会在所需的所有软件包(包括主模块的软件包和库的软件包)中创建。

5. 参考资料

目录
相关文章
|
5月前
|
Java Maven Spring
gradle 配置指南
配置Gradle指南:在`build.gradle`中添加仓库,如阿里云公共库`maven { url &#39;https://maven.aliyun.com/repository/public/&#39; }`和Spring库`maven { url &#39;https://maven.aliyun.com/repository/spring/&#39; }`。然后声明依赖`dependencies { compile &#39;[GROUP_ID]:[ARTIFACT_ID]:[VERSION]&#39; }`,最后运行`gradle dependencies`或`./gradlew
|
5月前
|
缓存 Java API
build.gradle文件介绍,gradle版本对应
build.gradle文件介绍,gradle版本对应
120 0
|
11月前
|
Java API Maven
Gradle使用总结
Gradle使用总结
222 0
|
Java Maven Android开发
gradle
Gradle 是一个现代化的构建工具,它可以帮助开发人员管理项目依赖、构建项目、运行测试、打包和部署项目等。与 Maven 类似,Gradle 也是一种基于约定的构建系统,它不仅可以管理 Java 项目,还可以管理 Android 应用程序、Kotlin 项目、Groovy 项目等。
1387 1
|
前端开发 Java Maven
Gradle build.gradle 文件
Gradle build.gradle 文件
Gradle build.gradle 文件
Gradle Avoiding traps
Groovy script variables 4. Groovy 脚本变量 对于 Groovy DSL 的用户来说,了解 Groovy 如何处理脚本变量非常重要。 有两种类型的脚本变量。 一个具有本地作用域,另一个具有脚本范围。 Example: Variables scope: local and script wide 示例: 变量范围: 本地范围和脚本范围 scope.groovy String localScope1 = 'localScope1' def localScope2 = 'localScope2' scriptScope = 'scriptScope' println
116 0
|
Java Android开发
浅谈Gradle(二)与SourceSets
之前写过了一篇Gradle(一),那是根据别人写的文章总结写的,当时其实还是很多不懂,包括我现在对gradle的理解也其实还是似懂非懂,但是还是要写,每次写完之后包括再重新多看几次,都会有新的感悟。
2992 0
|
Java Apache Kotlin
Gradle系列01 Gradle介绍与安装
说明 Gradle官网 版本:gradle-5.6.4 系统:macOS Gradle简介 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。