主工程容器接入
- 基于gradle的构建插件(包括修改过的aapt内容);
- 基于容器提供更新能力的库atlas_update;
我们比较倾向于用一个比较干净的壳子工程来作为容器架构下的打包工程,这个工程建议只存在AndroidManifest.xml和构建的文件及部分资源内容,manifest文件用于单独管理apk的icon,版本号,versioncode等;构建文件管理版本依赖;这里我们取名打包工程等名字为apk_builder; 通常情况下Apk_builder除了主Apk的AndroidManifest.xml之外,接入Atlas后,Main_builder将会包含以下内容:
- build.gradle : 用于配置主apk的依赖及控制构建参数
- packageIdFile.properties: 配置bundle的packageId,以保证资源段独立(也可以通过mtl.tBuildConfig.autoPackageId设置自动分配packageID)
- bundleBaseInfoFile.json: 配置bundle的依赖关系
下面会逐个说明每个文件的使用和注意要点
支持 atlas 工程打包的gradle 插件, 基于 google 官方的 android builder (2.0.0~2.1.0)
引用插件及依赖仓库
注意尽量不要指定 classpath “com.android.tools.build:gradle”的版本,默认使用的是 2.1
应用plugin
-
如果不需要用到atlas的动态部署功能,不需要依赖atlasupdate
构建
APK构建 ./gradlew assembleDebug 或者 assembleRelease
- build/outputs/apk/xx.apk , 构建的产物apk
- build/outputs/apk/xx.ap , 构建的基线包, 里面包含 apk 和其他的打包中间配置
- build/outputs/dependencyTree-debug.json , 整个工程的依赖树
- build/outputs/atlasConfig.json , 整个打包的 atlas 配置参数
TPatch构建 ./gradlew clean assembleDebug -DapVersion=1.0.0 -DversionName=1.0.1
apVersion表示被动态部署应用的基线版本,versionName表示动态部署后新的versionName
构建产物: 除了依赖树和配置参数之外,额外的产物有:
- build/outputs/tpatch-release , release 包 patch产物
配置列表
最简配置
具体参考
每个bundle在生成的时候,需要为其分配独立的packageId,用以使其保证每个bundle的资源ID全局唯一;资源ID的可分配区间为[0x21,0x7f),0x1x为系统保留,0x7f为主apk使用,0x20之前的发现miui里面内部已使用,所以目前我没选择这个区间作为bundle的packageId分配区间 书写的格式为:groupId:artificatId=XX(如下图)
bundleBaseInfoFile 是一个JSON格式的文件,里面记录bundle的信息以及依赖关系,dependency字段用于标识该bundle所依赖的bundle,如果A依赖B,B依赖C,则触发的Abundle安装时,实际的安装顺序为C->B->A,JSONArrary中每个item的key为该bundle的artificatID,dependency里面的item为被依赖的bundle的packageName >