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项目完全转换成了本地的依赖。

aar的更多相关文章

  1. AndroidTips-052:.aar文件依赖

    aar aar 文件是android 类库项目的输出文件,其中可以包含普通的.class,清单,以及android项目特有的资源文件. 使用方式 将.aar文件放在在自己项目的libs目录下 在gra ...

  2. xwalk_core_library-15.44.384 .13.aar 百度云分享

    xwalk_core_library-15.44.384.13.aar 这玩意下载很慢 特意放到百度,需要的可以通过百度下载 http://pan.baidu.com/s/1nt0Cmbn 下完后放到 ...

  3. android studio 使用jar包,arr包和怎么使用githup开源项目中的aar包或module

    我这里的android studio的版本是2.2.3版本 一.现在大家都用android studio了,就有人问怎么使用jar包 其实使用jar包比较简单 直接吧jar放入工程的app目录下的li ...

  4. android 4.4/5.1上使用aar的问题

    在Android6.0上可以使用LOCAL_STATIC_JAVA_AAR_LIBRARIES.build脚本会把指定的aar解压缩到临时目录,并将class.jar和res添加到对应的变量. LOC ...

  5. Android Studio添加aar

    1.把aar复制到项目中的 libs 里面 2.在module 里面的build.gradle 的根目录添加 repositories{ flatDir { dirs 'libs' } } 3.在mo ...

  6. [Android Studio] *.jar 与 *.aar 的生成与*.aar导入项目方法

    主要讲解Android Studio中生成aar文件以及本地方式使用aar文件的方法. 在Android Studio中对一个自己库进行生成操作时将会同时生成*.jar与*.aar文件. 分别存储位置 ...

  7. aar引用 no executable code found问题

    主工程中 repositories { flatDir { dirs project(':trade_module').file('libs') }} dependencies { compile f ...

  8. android studio 生成aar包并在其他工程引用 (导入)aar包

    1.aar包是Android studio下打包android工程中src.res.lib后生成的aar文件,aar包导入其他android studio 工程后,其他工程可以方便引用源码和资源文件 ...

  9. AndroidStudio 多层级 Module 对 aar 引用问题

    最近碰到这么个恶心的问题 问题:有个arr文件被放到Module A中引用,现在Module B又依赖了Module A,则在编译过程中会发生错误,Module B找不到aar文件.(同时如果又有Mo ...

  10. Android引用本地aar

    先建立一个lib工程,然后build出aar. 接着把aar放入要引入它的工程module的libs中. 在project的build.gradle中: repositories { flatDir ...

随机推荐

  1. Linux命令-网络命令:write

    write只能给登录用户发送消息,所以先登录两个用户root和wangyunpeng root登录: wangyunpeng登录: who 查看登录用户 root发送信息给wangyunpeng: w ...

  2. EMQ ---问题集

    1)emqttd 使用 SSL遇到的问题:服务器直接布了一份emqttd ,然后什么都没管,端口默认的ws 8083,wss8084,mqtt 1883,mqtt(ssl) 8883. 结果跑起来之后 ...

  3. 查看nginx的版本

    查看nginx的版本 -v 显示 nginx 的版本-V 显示 nginx 的版本,编译器版本和配置参数 # /app/nginx/sbin/nginx -v nginx version: nginx ...

  4. Android中TextView内容过长加省略号

          textview中有个内容过长加省略号的属性,即ellipsize,用法如下: 在xml中 Android:ellipsize = "end"   省略号在结尾 and ...

  5. AngularJS实现鼠标右键事件

    常规javascript鼠标右键直接在标签上加contextmenu="alert('a')"即可,现在angular通过directive来定义一个右键指令. app.direc ...

  6. Linux下编译、使用静态库和动态库 自己测过的

    每个程序实质上都会链接到一个或者多个的库.比如使用C函数的程序会链接到C运行时库,GUI程序会链接到窗口库等等.无论哪种情况,你都会要决定是链接到静态库(static libary)还是动态库(dyn ...

  7. 每日英语:Why Chinese Companies Lack Homegrown Luxury Brand Power

    Chinese companies build iPads, high-speed trains and world-class telecom gear, but they can't seem t ...

  8. angular初体验

    所有需要ng管理的代码必须被包裹在一个有ng-app指令的元素中ng-app是ng的入口,表示当前元素的所有指令都会被angular管理(对每一个指令进行分析和操作) 利用angular实现双向绑定: ...

  9. jinja2问题集锦

    用jinja2写模板的时候遇到了一些问题,记录一下 抽出base.html作为模板 之前的小项目写得都很不规范,模板都是能用就行,基本上只用到if语句,for语句和变量.导航栏都是复制粘贴,没有把共同 ...

  10. 利用GitHub Pages和Hexo搭建个人博客

    本文首发地址: 非生异也 本项目源码托管在GitHub上 Why 阮一峰曾经说过:喜欢写Blog的人,会经历3个阶段. 第一阶段,刚接触Blog,觉得很新鲜,试着选择一个免费空间来写. 第二阶段,发现 ...