U8SDK——打包系统对gradle和aar的支持

作者: 分类: U8SDK 发布时间: 2019-04-26 20:31 6U8SDK——打包系统对gradle和aar的支持已关闭评论

随之AndroidStudio的广泛使用, 越来越多的SDK给过来的工程结构都是gradle格式了。 国内渠道SDK倒还好, 很多厂商知道国内环境现状, 一般都会同时提供eclipse adt和AndroidStudio两种接入方式。 但是海外渠道, 特别是facebook, google等, 基本只能使用AndroidStudio形式来接了。

AndroidStudio 引入了一种新的资源包格式——aar。同时, AndroidStudio中默认采用gradle进行构建和依赖管理。

之前版本的U8SDK打包系统, 是基于最原始的Android工程结构来进行代码、资源以及manifest等文件的合并。 既不支持aar也不支持gradle方式的依赖配置。 基本的合并过程如下:

所以, 目前对于aar格式的资源包, 我们之前的做法是手动将其解压, 将里面classes.jar拷贝到我们的libs下面;res目录拷贝到我们的res目录下(可能还会出现同名资源等难以手动解决的冲突);assets拷贝到我们的assets目录下;libs和jni等目录下文件拷贝到libs目录下。这种方式, 当SDK依赖的aar文件过多, 手动处理方式, 一来效率低下, 二来出现资源冲突等, 不太好手动解决。

而且对于gradle依赖的方式, 我们还需要通过as打开工程,让gradle自动将依赖的jar包或者aar下载到本地, 然后我们再手动找出这些依赖的资源包。 这个时候, 如果资源包本身又有递归依赖, 查找定位依赖资源包也是一件头疼的事。

为了解决上面的问题, 我们需要重构一下打包脚本, 让他能够自动处理aar格式的文件, 以及支持gradle方式的依赖配置。 这样, 我们就可以完全按照AS的方式来接入代码, 然后配置到打包工具中, 打包工具能够自动处理并完成相关内容的合并。

本次优化目标主要是如下两个:

    1、支持aar格式的文件
    2、支持gradle方式的依赖配置

aar文件, 其实就是一个压缩包。 解压之后, 里面就是正常的jar文件, res文件, assets文件, AndroidManiest文件等。所以, 要支持aar文件, 其本质,就是将aar里面的代码,资源,Manfiest文件,以及其他文件合并到最终的渠道包中。 所有合并逻辑当中,当属资源合并最难。关于资源合并的原理,可以参考我们之前的博客:U8SDK资源合并原理

我们之前就做了这些类型文件的合并脚本, 所以现在,我们只需要在处理各个SDK的合并逻辑之前,增加一个“预合并”步骤, 将SDK中所有aar文件解压,然后将里面各个类型的资源文件合并到SDK对应目录。 操作流程如下(重点看带颜色部分):

有了预合并, aar文件也可以自动被打包工具识别,并进行资源的合并和处理。 然后,我们再来解决第二个问题——gradle依赖配置。

gradle本身功能很强大, 但我们仅仅需要的是gradle的依赖管理。我们可以在每个SDK的配置目录下, 放一个gradle的配置文件,比如build.gradle。 但是这样有缺陷, 首先,build.gradle配置文件自由度过大,可能会有很多无关的配置项。 同时, 不同gradle版本的build.gradle配置项可能不同, 如果和打包工具中使用的gradle版本不一致,到时候可能识别不了。

所以,综合考虑,我们采用在我们每个SDK的config.xml中,增加一个dependencies配置项, 里面每一项,用我们自定义的结构来配置依赖。 比如:

然后我们在打包工具/config/local目录下, 放一个空的AndroidStudio格式的工程, 打包的时候, 我们将这个工程复制一份到临时目录,然后修改里面的build.gradle文件,将我们配置的依赖转为gradle的依赖配置。然后,执行gradlew copyDeps task, 让gradle下载依赖资源包到我们指定的目录。 这个临时AndroidStudio工程中的build.gradle文件,处理依赖部分的task如下:

这样最终我们的完整资源合并过程就如下图所示了(重点看带颜色部分):

目前在U8SDK新版界面化打包后台中已支持该特性, 老版本命令行打包工具暂时还不支持。 感兴趣的同学,可以加我们技术QQ群进行交流探讨:207609068

本文出自 U8SDK技术博客,转载时请注明出处及相应链接。

本文永久链接: http://www.uustory.com/?p=2256

评论功能已经关闭,请加入U8SDK技术群进行讨论和咨询:207609068
Ɣ回顶部
U8SDK技术群 x
技术同学请加入
点击加入