• aar


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

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

    二. 如何得到aar

    1. Module的aar文件

    将一个AndroidStudio项目中的Module打包成aar其实很简单。
    在每一个Module的目录下面都会有这样一个文件夹:buildoutputsaar
    这个文件夹下面就放着这个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项目完全转换成了本地的依赖。

  • 相关阅读:
    POJ 3468 A Simple Problem with Integers
    BZOJ 4430 Guessing Camels
    POJ 2309 BST
    POJ 1990 MooFest
    cf 822B Crossword solving
    cf B. Black Square
    cf 828 A. Restaurant Tables
    Codefroces 822C Hacker, pack your bags!
    [HDU 2255] 奔小康赚大钱
    [BZOJ 1735] Muddy Fields
  • 原文地址:https://www.cnblogs.com/dubo-/p/6744118.html
Copyright © 2020-2023  润新知