zoukankan      html  css  js  c++  java
  • Android SDK 组件化 AAR 打包集成

    在 Android 开发过程中,有些功能是通用的,或者是多个业务方都需要使用的。为了统一功能逻辑及避免重复开发,因此将该功能开发成一个 SDK 是相当有必要的。

    那么SDK呈现的方式,都有那些呢? 答:.so、.jar、*.aar、module。

    其中,.so是C或C++语言的内容打包成的库,由于本项目是java语言,所以本文不探究so。

    一、JAR

    JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。 只包含了class文件与清单文件 ,不包含资源文件,如图片等所有res中的文件。

    jar的优点:安全性、减少下载时间、传输平台扩展、包密封、包版本控制、可移植性。

    jar的缺点:打jar包时,项目里的res文件是用不了的,若想用图片文件,可以将图片文件放进assets文件里面打进jar包再进行调用,但必须注意jar里面assets文件夹里面的文件不能和调用项目里面assets文件夹里面的文件重名。

    使用jar方式:拷贝到:libs目录, 添加到build.gradle配置文件中,重新编译一次项目既可完成加载。使用时注意混淆问题。

    打包jar包的相关资料:《Android Studio 使用gradle导出jar包》

    二、AAR

    AAR是Android库项目的二进制归档文件,包含所有资源,class以及res资源文件。将aar解压(后缀改为.zip,再解压文件)打开后,可以看到每个aar解压后的内容可能不完全一样,但是都会包含AndroidManifest.xml,classes.jar,res,R.txt。

    提供aar的sdk的方式的优缺点:

    优点:只需引入一个文件,继承简单。

    缺点:如果aar的包需要其他依赖库的时候,如果没依赖进去,会提示 java.lang.NoClassDefFoundError 错误。这是因为在打arr包的时候,只是将module内部的代码及资源打包进去了,并没有将第三方依赖也打包进去。

    打包aar文件的相关资料:
    《Android Studio 打包 aar》:https://www.jianshu.com/p/baa7976cec09
    《AndroidStudio封装SDK的那些事》:https://www.cnblogs.com/endv/p/13823913.html

    打aar包时,需要注意混淆问题及第三方库依赖问题。

    aar在build.gradle 配置方式为:

    repositories {
         flatDir {
               dirs'libs'
         }
    }
    
    dependencies {
         implementation(name:'genius', ext:'aar')
    }
    

    因为aar不会传递第三方依赖,在依赖aark时,如果碰到第三方依赖库问题,一般只需要将arr依赖的第三方库再引入一遍,程序就不报错了。如果在更新aar的时候,发现本地External Library的aar文件中还是之前版本的内容,这时候可以通过下面的命令强制刷新:

    ./gradlew build --refresh-dependencies
    

    在本文的后面,我们会讲解一下,如何将多个aar文件合并到一起,这样能在一定程度上避免第三方依赖问题。

    三、Module

    module一般是模块功能代码,这种提供sdk的方式,一般是将核心的jar包、aar包进行更进一步的逻辑封装,然后将整个Demo级别的功能代码提供给别人。

    提供moudule的sdk的方式的优缺点为:

    优点:集成非常简单,只要测试没问题,一般别人都能够直接拿过来使用,并且能够在Demo的基础上,根据需求调整部分功能。

    缺点:后续更新,可能需要代码的全量替换。

    这种提供方式,应该是最简单的集成方案,这里就不过多对此进行说明了。

    四、Fat—AAR

    Fat—AAR出现的核心需求就是:在打包AAR时,将其需要的AAR打入同一个AAR包。

    解决这个需求,涉及到三点:

    如何确认需要合并的module?
    确定需要合并的module后,如何找到相应的文件路径?
    不同的文件在Gradle Tasks中的哪个位置插入?
    这里根据:https://github.com/kezong/fat-aar-android 开源项目来理解一下。

    通过 embed 来确认需要add 的 dependency,这样就能将需要合并的关联起来了。

    确认需要合并的module后,如何找到路径?

    答:build一个aar的适合会在各个module下生成一个build文件夹,和aar关联的文件夹是exploded-aar,里面的代码结构和我们直接打开aar的时候基本一致。

    这样,路径问题我们就解决了。

    不同的文件在Gradle Tasks中的哪个位置插入? fat-aar是这样做的,通过不同的task之间的dependsOn ,mustRunAfter 这种方式来插入自定义的task。

    参考Demo:https://github.com/renhui/Fat-AAR-Demo (使用Fat-AAR SDK版本:1.3.5)

  • 相关阅读:
    2021昆明站K-Riichi!!(麻将)
    数据结构 Week 3 --- dsu on tree 和 点分治
    数据结构 Week 2 --- 平衡树
    数据结构 Week 1 --- 从线段树到主席树
    一些思维题(三)
    一些思维题(二)
    2021ICPC昆明站总结及补题
    2021ICPC昆明M题 非主席树做法
    2020ICPC昆明参赛
    记5.28leetcode简单题
  • 原文地址:https://www.cnblogs.com/renhui/p/15039877.html
Copyright © 2011-2022 走看看