开发者学堂课程【开源 Android 容器化框架 Atlas 开发者指南: 构建与基线发布】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/392/detail/5020
构建与基线发布
内容介绍
一、 构建
二、 Apk.ap 结构讲解
三、 发布基线版本
一、 构建
进入 APP 目录下。
执行构建命令
ouiwatekiMacBook-Pro:AtlasDemo wangyan$cdapp
ouiwatekiMacBookPro:appwangyan$../gradlew assembleDebug
构建成功后看看 APP, build,outputs 下的产物。
首先,Apk 文件夹下有两个文件。分别是 app debug.ap 和 app debug.apk 。APK 文件就是我们要安装的应用。
AP 文件被称为基线版本 AP ,是将来在这个版本上进行动态部署时需要的。动态部署时会根据这个 AP 来生成差量的内容,Logs 文件是各模块 manifest 的文件默认合并的 log,remote bundles debug,这个文件夹下存放的所有远程 bundle ,远程bundle 是不会打入到 apk 文件中的。
在应用运行时可以触发远程 bundle 的下载。Apkfiles 文件。文件中记录了打包成 APP debug.Apk 中所有的文件路径,名称,还有他们 md 物质,这是为了后面动态部署差量生成时用来比较文件是否变化的依据。
atlasconfig 文件记录了 atlas 所有的配置项的值,里面包含了一些默认值。Atlas framework properties 文件主要记录了所有 bundle 信息。
bundles中的四大组件,bundles的名称、依赖版本等信息,同时还包含了哪些为自启动的bundle,哪些为atlas框架启动前要执行的类。此文件中的信息,最后会打包到 apk 中的 frameworkproperties 文件中。
之所以把这些信息写入类,而不是使用文件,是为了避免文件读取的失败,框架不能运行。build 文件记录了构建时所用的 gradle 版本、插件版本等信息。用于方便排查问题。
Dependencies 文件记录了项目中所有的依赖,dependencyTree-debug 同dependencies 文件内容相同,
里面详细的标明了有哪些 bundle ,他们的依赖,还有主 dex 中依赖的库,以及他们的版本。packageId files 文件记录了每个 bundle 和他们对应的资源分段。
前面插件化的基础知识中说过资源分段,是为了避免 bundle 资源与 APK 资源冲突的问题。plug in dependencies 是指插件的依赖。Version 文件记录了所有依赖的版本号和它们的格式。
二、 Apk ap 讲解
下面介绍 atlas 框架下 apk ,普通 apk 的区别。
通过-d 指定文件夹。
打开这个文件夹。
apk 目录结构与普通 ApK 看起来并没有什么区别,那么 bundle 放在哪里呢?bundle 是放在 lib arm 文件夹下的。
我们的三个业务 bundle 都有 so 的形式放在 lib 下,之所以把 bundle 包装成 so 文件放到这个文件夹下,就是为了利用系统安装apk时能将帮助文件顺利解压到固定位置。解压其中一个 bundle ,查看 so 里面的结构。这里以 first bundle 为例
可以看到,bundle 的文件结构类似于一个 APK 的结构。只是这个 apk 不能单独运行,需要在 atlas 的框架下运行。之前提到项目介入 atlas 框架时,只是增加了各种配置文件,并没有像其他框架初始化有一个初始化的代码,那么这些初始化操作是在哪里呢?
看一下 apk 解压后的 android manifest 文件,
找到 application 。可以发现 application 已经被替换成 atlas Bridge Application ,下面可以看到我们有一个属性 real application,这里面记录的是我们应用真正的 application 。atlas bridge Application 首先执行了 atlas 初始化的代码。
然后再将应用的 application 替换回来,这样再打包阶段就完成了 atlas 的介入。接下来看 AP 的结构。解压 AP 的文件。
打开解压后的文件夹,AP 文件中包含了我们的 apk 文件,还有刚才在 outputs 目录下生成的其他文件,awo 文件夹是为了单模块修改后部署,进行测试的文件。
里面包括每个 bundle 的 r 文件以及依赖关系的文件,单模块的部署会在后面给大家演示。remote bundles 文件夹是远程 bundle 的目录。这里面的 so 需要放在服务器上,在 apk 运行到远程 bundle 时,通过远程下载后,安装,加载的。远程 bundle 的存在是为了减小 apk 的大小。
三、 发布基线版本
执行 apk 的安装命令,安装到模拟器,模拟器已经启动。其版本是 APi23 ,也就是安卓6.0,模拟器的型号是X6p。
启动 atlas 的应用。第一个 tab 是 first bundle 中的内容。第二个 tab 是 second bundle 的内容。
Secondbundle 中这个按钮是打开 secondbundle 单独依赖的 AAR 的 activity。
下面我们发布基线版本,在 app 的目录下执行发布命令。
Success
ouiwatekiMacBook-Pro:apk wangyan$ cd ../../../
ouiwatekiMacBook-Pro:app wangyan$../gradlew publish Parallel execution is an incubating feature.
发布成功后打开本地的 wangyan 仓库地址。AP debug1.0.0AP 已经发布成功了。那版本号这个1.0.0是在哪里设置的呢?
可以看到 group,version,artifact ID 这几个字段。标识着我们发布的路径、名称以及版本如果要修改,可以修改这几个属性。