当前位置: 首页 > news >正文

aar

aar是一个类似于jar的文件格式。但是他们之间是有区别的。
jar:仅仅包含class和清单文件,没有资源文件。
aar:包含了class文件和资源文件。说白了就是Android的专属“jar”

将代码打包成aar文件,可以在一定程度上加快AndroidStudio的速度。
尤其是将Module打包成aar文件,提升的效果很显著。

二. 如何得到aar

1. Module的aar文件

将一个AndroidStudio项目中的Module打包成aar其实很简单。
在每一个Module的目录下面都会有这样一个文件夹:build\outputs\aar
这个文件夹下面就放着这个Module对应的aar文件。
一般情况下会有两个aar文件,一个debug版本,一个release版本。
我们选择release的就ok。


AAR文件图示

注意
新建的Module是没有这个文件夹的。这时,你可以使用 两种方法 生成这个文件夹

  1. 将整个项目运行一遍,这个文件夹会自动生成
  2. 执行命令 ./gradlew assembleRelease 也可以生成这个文件夹

Module中的libs目录文件会随着项目的编译被打包进aar文件中,但是build.gradle中的引用库不会打包进aar文件中,这个需要 特别留意。如果你忽略了这个Module的build.gradle中的引用库,很可能引发ClassNotFoundException异常。

2. 远程仓库的aar

在项目里面经常会引用一下远程仓库的依赖库。
这时,我们也可以将它以aar的形式引入到项目中。
这个依赖库的aar其实也很好找。
当你配置好一个依赖库以后,点击 Sync Now
AndroidStudio会自动下载这个库到C盘(windows)。你找到这个文件就可以了。
这里我使用的是Everything进行搜索,很方便就找到这个库的下载文件夹。其他操作系统就自行搜索吧,总之找见这个项目的下载文件夹就ok。
这个下载文件夹中包含了这个项目所需要的所有东西:包括aarjar等文件。

后面会以一个例子详细讲解这个过程

注:
Everything是一个搜索软件,可以瞬间搜索全盘。
是一个非常实用的软件。但是很可惜只有windows版本。
官网地址:https://www.voidtools.com/

三. 如何使用aar

想要使用aar文件,需要经过以下几步:

1. 在app的build.gradle中加入以下配置
repositories {    
    flatDir {        
        dirs 'libs'   // aar目录
      }
}
2. 将aar文件拷贝到app/libs目录下
3. 在dependencies中加入aar引用
compile(name: 'zbar-release', ext: 'aar')

四. LeakCanary项目示例

因为Module的例子比较简单,所以选择远程代码库作为示例。
这里使用一个经常使用的内存检测项目LeakCanary来做一个示例。
我们通常使用依赖来使用这个库:

debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'

Sync Now完成后,我们可以在C盘(windows)找见这个项目文件夹。
该项目文件夹截图如下:


LeakCanary项目示例图

这个文件夹下面就有我们需要的两个依赖库:leakcanary-androidleakcanary-android-no-op
点开leakcanary-android文件夹,目录结构如下(1.3是对应的版本号):


leakcanary-android文件夹

打开最里层的文件夹,你会发现文件的类型主要有三种:

  1. jar文件:有的项目是以jar文件形式提供
  2. aar文件:有的项目是以aar文件形式提供
  3. pom文件: (Project Object Model),实际上就是个xml,是对一些必要信息的说明。这里我们只关心一个节点信息:<dependencies>:声明依赖列表
    我们用文本编辑器打开leakcanary-android文件夹下面的pom文件:
    ...
    <dependencies>
     <dependency>
       <!--包组 id,通常是发布者拥有的域名的反向,以免跟别人的重复--> <groupId>com.squareup.leakcanary</groupId> <!--包 artifactId,其实就是组以下应该有一个更小的归类--> <artifactId>leakcanary-analyzer</artifactId> <!--版本号--> <version>1.3</version> <scope>compile</scope> </dependency> </dependencies> ...
    想更多了解pom文件,点击这里

当我们打开leakcanary-android的pom文件,
我们发现leakcanary-android依赖于leakcanary-analyzer的1.3版本。

同样的的我们打开leakcanary-analyzer 的pom文件,
发现leakcanary-analyzer依赖leakcanary-watcherhaha

leakcanary-watcherhaha则没有依赖任何东西。

这样整个leakcanary-android导入本地的东西就是四个:

  1. leakcanary-android
  2. leakcanary-analyzer
  3. leakcanary-watcher
  4. haha

同样的方式去一层一层解析leakcanary-android-no-op,将所有需要的文件都导入到AndroidStudio中。这样整个LeakCanary就被我们真正实现本地化了。

两种结果对比如下:

debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'
debugCompile(name: 'leakcanary-android-1.3', ext: 'aar') compile files('libs/leakcanary-analyzer-1.3.jar') compile files('libs/leakcanary-watcher-1.3.jar') compile files('libs/haha-1.1.jar') releaseCompile(name: 'leakcanary-android-no-op-1.3', ext: 'aar')

这样就将整个LeakCanary项目完全转换成了本地的依赖。

相关文章:

  • 这样记单词最有效
  • hdu 5348 MZL#39;s endless loop
  • 对不起,我不再愛你了
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • HP SiteScope 11
  • 【版本更新】Excel控件Spire.XLS for .NET V7.12发布 | 修复多个重大bug
  • matlab集合操作
  • C++学习笔记4
  • Android开发者应该深入学习的10个开源应用项目[转]
  • /proc/vmstat 详解
  • Solr In Action 中文版 第一章(四、五)
  • 零基础学通Silverlight4(2):Expression Blend入门
  • [备忘]谷歌员工证实PR值不再更新 呼吁用户关注内容
  • 采用一个自创的验证框架实现对数据实体的验证[扩展篇]
  • sql查询优化的几个要点
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 【node学习】协程
  • 0基础学习移动端适配
  • angular组件开发
  • Codepen 每日精选(2018-3-25)
  • CSS盒模型深入
  • Debian下无root权限使用Python访问Oracle
  • gf框架之分页模块(五) - 自定义分页
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Java应用性能调优
  • Logstash 参考指南(目录)
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • REST架构的思考
  • Vim 折腾记
  • Vue--数据传输
  • 基于web的全景—— Pannellum小试
  • 简单基于spring的redis配置(单机和集群模式)
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 消息队列系列二(IOT中消息队列的应用)
  • 协程
  • 移动端唤起键盘时取消position:fixed定位
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​学习一下,什么是预包装食品?​
  • #WEB前端(HTML属性)
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (1)虚拟机的安装与使用,linux系统安装
  • (11)MSP430F5529 定时器B
  • (3)STL算法之搜索
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (ZT)一个美国文科博士的YardLife
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (分布式缓存)Redis持久化
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (十)c52学习之旅-定时器实验
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转)母版页和相对路径
  • *setTimeout实现text输入在用户停顿时才调用事件!*