Gradle 使用技巧(五) - AAR
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 类会在所需的所有软件包(包括主模块的软件包和库的软件包)中创建。
5. 参考资料
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android与Js交互之JSBridge的使用
什么是JsBridge JsBridge是js与Native之间进行通信的桥梁。 为什么要使用JsBridge Android4.2以下的addJavascriptInterface存在安全漏洞,虽然在Android4.2之后用@JavascriptInterface代替了addJavascriptInterface但是由于兼容性和安全性问题,基本上我们不会再利用Android系统为我们提供的addJavascriptInterface方法或者@JavascriptInterface注解来实现,所以我们只能另辟蹊径,去寻找既安全,又能实现兼容Android各个版本的方案。 如何使用JsBridge 在Android中我们使用JsBridge开源项目来实现,实现JSBridge分为以下几个步骤。 步骤一:导入依赖 在项目gradle文件中添加 repositories { ... maven { url "https://jitpack.io" } } 在module的gradle中添加 dependencies { ... implementation 'com.github.lzyz...
- 下一篇
2-AIV--使用ContentProvider查询联系人
零、前言 [1].顾名思义,内容提供者,目的:实现跨进程间数据共享 [2].基于数据库提供数据 [3].如电话簿,短信,歌曲信息都是以数据库存储存储,都可以通过ContentProvider获取 [4].不太熟悉安卓运行时权限的童鞋可以看一下我封装的权限申请类:TI--安卓运行时权限完美封装 [5].如果只是想使用的人,直接把静态方法拷贝即可,想知道原理的,图片和注释认真看一下,也可以自己分析一下联系人的表。 [6].本文只打印一下查询结果:ListView篇将会界面展示数据,Xml篇将会介绍备份到本地 一、代码实现 1.实现分析: raw_contacts表中查到contact_id, 每个contact_id下,根据contact_id查询data表字段, 然后判断mimetype的值,新建实体类,将数据设置到实体中, 将实体放入实体集合,查完返回集合。 联系人数据库 联系人.png 我们关注的时三张表: 1.raw_contacts 关注一个字段contact_id raw_contacts.png 2.data表和mimetype表:关注字段:mimetype_id 、raw_...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- Mario游戏-低调大师作品
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Red5直播服务器,属于Java语言的直播服务器
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池