AndroidStudio之如何使用aar

sd1026203 8年前
   <h2><strong>一. 简介</strong></h2>    <p>aar 是一个类似于 jar 的文件格式。但是他们之间是有区别的。</p>    <p>jar :仅仅包含class和清单文件,没有资源文件。</p>    <p>aar :包含了class文件和资源文件。说白了就是Android的专属“jar”</p>    <p>将代码打包成aar文件,可以在一定程度上加快 AndroidStudio 的速度。</p>    <p>尤其是将 Module 打包成 aar 文件,提升的效果很显著。</p>    <h2><strong>二. 如何得到aar</strong></h2>    <p><strong>1. Module的aar文件</strong></p>    <p>将一个AndroidStudio项目中的 Module 打包成 aar 其实很简单。</p>    <p>在每一个 Module 的目录下面都会有这样一个文件夹: build\outputs\aar 。</p>    <p>这个文件夹下面就放着这个 Module 对应的 aar 文件。</p>    <p>一般情况下会有两个 aar 文件,一个 debug 版本,一个 release 版本。</p>    <p>我们选择 release 的就ok。</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/3696002d198d086d303c2a827abdda61.png"></p>    <p style="text-align:center">AAR文件图示</p>    <p><strong>注意:</strong></p>    <p>新建的Module是没有这个文件夹的。这时,你可以使用 <strong>两种方法</strong> 生成这个文件夹</p>    <ol>     <li>将整个项目运行一遍,这个文件夹会自动生成</li>     <li>执行命令 <strong>./gradlew assembleRelease</strong> 也可以生成这个文件夹</li>    </ol>    <p><strong>2. 远程仓库的aar</strong></p>    <p>在项目里面经常会引用一下远程仓库的依赖库。</p>    <p>这时,我们也可以将它以 aar 的形式引入到项目中。</p>    <p>这个依赖库的aar其实也很好找。</p>    <p>当你配置好一个依赖库以后,点击 Sync Now 。</p>    <p>AndroidStudio会自动下载这个库到C盘(windows)。你找到这个文件就可以了。</p>    <p>这里我使用的是 Everything 进行搜索,很方便就找到这个库的下载文件夹。其他操作系统就自行搜索吧,总之找见这个项目的下载文件夹就ok。</p>    <p>这个下载文件夹中包含了这个项目所需要的所有东西:包括 aar 、 jar 等文件。</p>    <p>后面会以一个例子详细讲解这个过程</p>    <p><strong>注:</strong></p>    <p>Everything是一个搜索软件,可以瞬间搜索全盘。</p>    <p>是一个非常实用的软件。但是很可惜只有windows版本。</p>    <p>官网地址: <a href="/misc/goto?guid=4959714698336752965" rel="nofollow,noindex">https://www.voidtools.com/</a></p>    <h2><strong>三. 如何使用aar</strong></h2>    <p>想要使用aar文件,需要经过以下几步:</p>    <p><strong>1. 在app的build.gradle中加入以下配置</strong></p>    <pre>  <code class="language-coffeescript">repositories {          flatDir {                  dirs 'libs'   // aar目录        }  }</code></pre>    <p><strong>2. 将aar文件拷贝到app/libs目录下</strong></p>    <p><strong>3. 在dependencies中加入aar引用</strong></p>    <pre>  <code class="language-coffeescript">compile(name: 'zbar-release', ext: 'aar')</code></pre>    <h2><strong>四. LeakCanary项目示例</strong></h2>    <p>因为Module的例子比较简单,所以选择远程代码库作为示例。</p>    <p>这里使用一个经常使用的内存检测项目 LeakCanary 来做一个示例。</p>    <p>我们通常使用依赖来使用这个库:</p>    <pre>  <code class="language-coffeescript">debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'  releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'</code></pre>    <p>当 Sync Now 完成后,我们可以在C盘(windows)找见这个项目文件夹。</p>    <p>该项目文件夹截图如下:</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/413d7360a1c1e27c83a0cfced423c7cd.png"></p>    <p style="text-align:center">LeakCanary项目示例图</p>    <p>这个文件夹下面就有我们需要的两个依赖库: leakcanary-android 和 leakcanary-android-no-op<br> 点开 <strong>leakcanary-android文件夹</strong> ,目录结构如下( <strong>1.3是对应的版本号</strong> ):</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/bc958fd7ee432e62a989f74fcf808605.png"></p>    <p style="text-align:center">leakcanary-android文件夹</p>    <p>打开最里层的文件夹,你会发现文件的类型主要有三种:</p>    <ol>     <li>jar文件 :有的项目是以jar文件形式提供</li>     <li>aar文件 :有的项目是以aar文件形式提供</li>     <li>pom文件 : (Project Object Model),实际上就是个xml,是对一些必要信息的说明。这里我们只关心一个节点信息: <dependencies>:声明依赖列表<br> 我们用文本编辑器打开 leakcanary-android文件夹 下面的pom文件: <pre>  <code class="language-coffeescript">...  <dependencies>   <dependency>     <!--包组 id,通常是发布者拥有的域名的反向,以免跟别人的重复-->     <groupId>com.squareup.leakcanary</groupId>     <!--包 artifactId,其实就是组以下应该有一个更小的归类-->     <artifactId>leakcanary-analyzer</artifactId>     <!--版本号-->     <version>1.3</version>     <scope>compile</scope>   </dependency>  </dependencies>  ...</code></pre> 想更多了解pom文件, <a href="/misc/goto?guid=4959714698429703922" rel="nofollow,noindex">点击这里</a></li>    </ol>    <p>当我们打开 leakcanary-android 的pom文件,</p>    <p>我们发现 leakcanary-android 依赖于 leakcanary-analyzer 的1.3版本。</p>    <p>同样的的我们打开 leakcanary-analyzer 的pom文件,</p>    <p>发现 leakcanary-analyzer 依赖 leakcanary-watcher 和 haha 。</p>    <p>leakcanary-watcher 和 haha 则没有依赖任何东西。</p>    <p>这样整个leakcanary-android导入本地的东西就是四个:</p>    <ol>     <li>leakcanary-android</li>     <li>leakcanary-analyzer</li>     <li>leakcanary-watcher</li>     <li>haha</li>    </ol>    <p>同样的方式去一层一层解析 leakcanary-android-no-op ,将所有需要的文件都导入到AndroidStudio中。这样整个 LeakCanary 就被我们真正实现本地化了。</p>    <p>两种结果对比如下:</p>    <pre>  <code class="language-coffeescript">debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'  releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'</code></pre>    <pre>  <code class="language-coffeescript">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')</code></pre>    <p>这样就将整个LeakCanary项目完全转换成了本地的依赖。</p>    <p> </p>    <p>来自:http://www.jianshu.com/p/59efa895589e</p>    <p> </p>