Back to Atlas

results matching ""

atlas-docs/_book/guide-for-use/guide_for_build.html

6.8.04.7 KB
Original Source
# 主工程容器接入

Atlas开源的代码内容主要包括以下几个模块:

  1. 基于gradle的构建插件(包括修改过的aapt内容);
  2. android端测容器运行库atlas_core;
  3. 基于容器提供更新能力的库atlas_update;

我们比较倾向于用一个比较干净的壳子工程来作为容器架构下的打包工程,这个工程建议只存在AndroidManifest.xml和构建的文件及部分资源内容,manifest文件用于单独管理apk的icon,版本号,versioncode等;构建文件管理版本依赖;这里我们取名打包工程等名字为apk_builder; 通常情况下Apk_builder除了主Apk的AndroidManifest.xml之外,接入Atlas后,Main_builder将会包含以下内容:

  1. build.gradle : 用于配置主apk的依赖及控制构建参数
  2. packageIdFile.properties : 配置bundle的packageId,以保证资源段独立(也可以通过mtl.tBuildConfig.autoPackageId设置自动分配packageID)
  3. bundleBaseInfoFile.json : 配置bundle的依赖关系

下面会逐个说明每个文件的使用和注意要点

build.gradle(AtlasGradlePlugin)

支持 atlas 工程打包的gradle 插件, 基于 google 官方的 android builder (2.0.0~2.1.0)

  1. 引用插件及依赖仓库

  2. 应用plugin

  3. 添加运行库依赖

  4. 开启atlas容器功能

  5. 构建

配置

配置列表

功能配置名称类型
是否启用atlasmtl.atlasEnabledbooleantrue
自动生成bundle的packageIdmtl.tBuildConfig.autoPackageIdbooleantrue
预处理manifest, 如果开启atlas,必须为truemtl.tBuildConfig.preProcessManifestBooleantrue
使用自定义的aapt, 如果开启atlas,必须为truemtl.tBuildConfig.useCustomAaptBooleantrue
aapt输出的R为常量, 建议值设置为false, 可以减少动态部署的patch包大小mtl.tBuildConfig.aaptConstantIdBooleanfalse
合并jar中的资源文件mtl.tBuildConfig.mergeJavaResBooleanfalse
构建基线包,建议开启,否则后面的patch包无法进行mtl.tBuildConfig.createAPBooleantrue
合并bundle jar中的资源文件mtl.tBuildConfig.mergeAwbJavaResBooleanfalse
自启动的bundle列表, 值是 packageNamemtl.tBuildConfig.autoStartBundlesList[com.taobao.firstbundle]
提前执行的方法,格式是 className:methodNameclassName2:methodName2 , 注意class和methodname都不能混淆,且方法实现是 class.method(Context)mtl.tBuildConfig.preLaunchString
基线的依赖坐标, 如: com.taobao.android:taobao-android-release:6.3.0-SNAPSHOT@apmtl.buildTypes.debug.baseApDependencyStringnull
基线的依赖坐标, 如: com.taobao.android:taobao-android-release:6.3.0-SNAPSHOT@apmtl.buildTypes.release.baseApDependencyStringnull
使用atlas的application,包含 atlas基础初始化及multidex逻辑mtl.manifestOptions.replaceApplicationbooleantrue
打andfix patch 包mtl.patchConfigs.debug.createAPatchbooleanfalse
打动态部署 patch 包mtl.patchConfigs.debug.createTPatchbooleantrue
andfix 打包过滤 class 列表文件mtl.patchConfigs.debug.filterFileFilenull
andfix 打包过滤 class 列表文件mtl.patchConfigs.debug.filterClassesSet[]
打andfix patch 包mtl.patchConfigs.release.createAPatchbooleanfalse
打动态部署 patch 包mtl.patchConfigs.release.createTPatchbooleanfalse
andfix 打包过滤 class 列表文件mtl.patchConfigs.release.filterFileFilenull
andfix 打包过滤 class 列表文件mtl.patchConfigs.release.filterClassesSet[]

最简配置

atlas {
    atlasEnabled true
}

具体参考 atlas-demo/app/build.gradle

packageIdFile.properties

每个bundle在生成的时候,需要为其分配独立的packageId,用以使其保证每个bundle的资源ID全局唯一;资源ID的可分配区间为**[0x21,0x7f)**,0x1x为系统保留,0x7f为主apk使用,0x20之前的发现miui里面内部已使用,所以目前我没选择这个区间作为bundle的packageId分配区间 书写的格式为: groupId:artificatId=XX (如下图)

bundleBaseInfoFile.json

bundleBaseInfoFile 是一个JSON格式的文件,里面记录bundle的信息以及依赖关系, dependency 字段用于标识该bundle所依赖的bundle,如果A依赖B,B依赖C,则触发的Abundle安装时,实际的安装顺序为C->B->A, JSONArrary中每个item的key为该bundle的artificatID,dependency里面的item为被依赖的bundle的packageName >

results matching ""

No results matching ""