• Android开发,关于aar你应该知道的


    https://yangbo.tech/2015/10/17/all-about-aar/

    背景

    在软件工程中,分治是最基本的设计原理,就如同现实中的砖、瓦、钢筋、水泥一样,模块化、组件化的分工,让我们整个软件世界变得井井有序,丰富多彩。

    Java jar

    在Java开发中,添加组件简单的以添加jar文件依赖为途径,jar有两个含义:

    • jar文件格式:Java Archive,就是zip文件格式,文件名后缀是jar,包含了java class,metadata,资源(文本、图片等)。
    • Java archive tool: JDK中的工具,用来生成jar包的工具。

    jar在Android开发中的不足

    在Android应用资源中,Java Source,Resouce以及所需的so文件和jar包,用jar格式可以很好的处理Java Source,但对于目录比较复杂的Android Res目录,二进制依赖so文件和jar包则显得的乏力。当你收到一个第三方SDK zip包,要添加到自己的项目中,解压后是一个jar包和一堆文件夹,不停的复制粘贴甚至解决冲突的时候,心里肯定开始不满意这血吸虫组件分发方式了。

    aar

    什么是aar

    为了解决Android开发中组件引用的问题,引入aar格式。也是简单的zip格式。
    定义:The ‘aar’ bundle is the binary distribution of an Android Library Project.
    Zip包中的内容有:

    • /AndroidManifest.xml (mandatory)
    • /classes.jar (mandatory)
    • /res/ (mandatory)
    • /R.txt (mandatory)
    • /assets/ (optional)
    • /libs/*.jar (optional)
    • /jni//*.so (optional)
    • /proguard.txt (optional)
    • /lint.jar (optional)
      其中,R.txt是aapt –output-text-symbols命令的输出。

    生成aar

    在Android Studio1.4中,New project,先默认新建一个Applicaton module,接后File > New > New Module,选择Androd Library > Next,指定Library Name和Module Name。

    new

    新建的Library与正常的Application最大区别是module build.gradle中是apply plugin: ‘com.android.library’ 而不是 apply plugin: ‘com.android.application’.

    Build > Make project(⌘F9),自动生成aar文件。

    1
    2
    3
    4
    5
    | build
    | outputs
    | aar
    | mylibrary-debug.aar
    | mylibrary-release.aar

    使用aar

    aar可通过以下三种方式引入到项目中:

    • 公共Maven仓库
    • 私有Maven仓库
    • 复制粘贴aar文件
      前两种引入方式涉及到Gradle发布Library到Maven,另文介绍。
      重点介绍第三种方式:
    • 把aar粘贴到要引入库的Application Module/libs目录下,如没有libs目录,创建就好。注意要在Application Module根目录下,不是Project根目录下。
    • 在Application Module/build.gradle中添加
      1
      2
      3
      4
      5
      repositories {
      flatDir {
      dirs 'libs'
      }
      }

    flatDir repositories用来声明文件目录做为依赖库,’libs’路径是build.gradle的相对路径,目录名称可以任意,也可以同时声明多个dirs。

    • 在Application Module/build.gradle中添加依赖
      1
      2
      3
      dependencies {
      compile(name:'mylibrary-debug', ext:'aar')
      }

    关于AndroidManifest.xml合并

    在上文中看到aar文件中还包含了库中的AndroidManifest.xml文件,但是最终应用APK中只能有一个AndroidManifest.xml,就涉及到应用AndroidManifest.xml和所有库AndroidManifest.xml的合并。

    合并顺序:

    • 1.与Produt flavors和build types指定的清单文件
    • 2.application module的主清单文件
    • 3.library module的清单文件

    大多数情况下合并不会造成什么问题,如果发现合并后出现了问题:

    后记

    本文中所用的项目代码托管在github

    引用

    AAR File Format
    http://tools.android.com/tech-docs/new-build-system/aar-format

    Manifest merging user guide
    http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger

  • 相关阅读:
    Unity Shader _Time
    常见纹理压缩格式
    U3D Transform组件
    java计算文件32位md5值
    Andoid 利用ndk-stack定位崩溃代码
    glsl计算sprite的亮度饱和度对比度
    Android项目文件结构
    Android Studio文件目录介绍
    Struts2配置dtd约束
    java系列--JSP的属性和内置对象
  • 原文地址:https://www.cnblogs.com/nafio/p/9137095.html
Copyright © 2020-2023  润新知