构建与基线发布 | 学习笔记

简介: 简介:快速学习构建与基线发布

开发者学堂课程【开源 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 文件内容相同,      

image.png 

里面详细的标明了有哪些 bundle ,他们的依赖,还有主 dex 中依赖的库,以及他们的版本。packageId files 文件记录了每个 bundle 和他们对应的资源分段。

前面插件化的基础知识中说过资源分段,是为了避免 bundle 资源与 APK 资源冲突的问题。plug in dependencies 是指插件的依赖。Version 文件记录了所有依赖的版本号和它们的格式。


二、 Apk ap 讲解

下面介绍 atlas 框架下 apk ,普通 apk 的区别

通过-d 指定文件夹。

打开这个文件夹。

apk 目录结构与普通 ApK 看起来并没有什么区别,那么 bundle 放在哪里呢?bundle 是放在 lib arm 文件夹下的。

image.png

我们的三个业务 bundle 都有 so 的形式放在 lib 下,之所以把 bundle 包装成 so 文件放到这个文件夹下,就是为了利用系统安装apk时能将帮助文件顺利解压到固定位置。解压其中一个 bundle ,查看 so 里面的结构。这里以 first bundle 为例

image.png

可以看到,bundle 的文件结构类似于一个 APK 的结构。只是这个 apk 不能单独运行,需要在 atlas 的框架下运行。之前提到项目介入 atlas 框架时,只是增加了各种配置文件,并没有像其他框架初始化有一个初始化的代码,那么这些初始化操作是在哪里呢?

看一下 apk 解压后的 android manifest 文件,

image.png

找到 application 。可以发现 application 已经被替换成 atlas Bridge Application  ,下面可以看到我们有一个属性 real application,这里面记录的是我们应用真正的 application 。atlas bridge Application 首先执行了 atlas 初始化的代码。

然后再将应用的 application 替换回来,这样再打包阶段就完成了 atlas 的介入。接下来看 AP 的结构。解压 AP 的文件。

image.png

打开解压后的文件夹,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 这几个字段。标识着我们发布的路径、名称以及版本如果要修改,可以修改这几个属性。

相关文章
|
Kubernetes 安全 Linux
开源Chart包安全分析发布,阿里云视角容器安全基线的重要性
云原生环境下,容器成为了软件开发过程中打包与分发的标准。
311 0
开源Chart包安全分析发布,阿里云视角容器安全基线的重要性
|
2月前
|
数据采集 自然语言处理 算法
|
2月前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
62 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
人工智能 自然语言处理 数据可视化
版本动态 | SolidUI 0.2.0 版本发布
版本动态 | SolidUI 0.2.0 版本发布 一句话生成任何图形
104 0
版本动态 | SolidUI 0.2.0 版本发布
|
自然语言处理 Kubernetes 数据可视化
版本动态 | SolidUI 0.3.0 版本发布
版本动态 | SolidUI 0.3.0 版本发布
72 0
|
SQL 前端开发 测试技术
版本动态 | SolidUI 0.1.0 版本发布
项目地址:https://github.com/CloudOrc/SolidUI
120 0
|
机器学习/深度学习 jenkins Devops
DevOps与机器学习的集成:使用Jenkins自动调整模型的超参数(一)
DevOps与机器学习的集成:使用Jenkins自动调整模型的超参数(一)
224 1
DevOps与机器学习的集成:使用Jenkins自动调整模型的超参数(一)
|
机器学习/深度学习 Devops jenkins
DevOps与机器学习的集成:使用Jenkins自动调整模型的超参数(二)
DevOps与机器学习的集成:使用Jenkins自动调整模型的超参数(二)
197 1
DevOps与机器学习的集成:使用Jenkins自动调整模型的超参数(二)
|
机器学习/深度学习 存储 并行计算
BladeDISC 0.2.0更新发布
在BladeDISC正式开源三个月后,我们发布了0.2.0版本,该更新包含了大量的性能优化与功能增强。
BladeDISC 0.2.0更新发布
|
机器学习/深度学习 编解码 人工智能
无需额外数据,首次实现ImageNet 87.1% 精度,颜水成团队开源VOLO
VOLO 是第一个在 ImageNet 上无需额外数据达到 87.1% top-1 准确率的模型,进一步拉近了视觉 Transformer 与最顶级 CNN 模型的性能距离。
247 0
无需额外数据,首次实现ImageNet 87.1% 精度,颜水成团队开源VOLO