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

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

开发者学堂课程【开源 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 这几个字段。标识着我们发布的路径、名称以及版本如果要修改,可以修改这几个属性。

相关文章
|
Java 数据库 Android开发
【专栏】Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理
【4月更文挑战第27天】本文探讨了Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理。通过案例分析展示了网络请求、图像处理和数据库操作的优化实践。同时,文章指出并发编程的挑战,如性能评估、调试及兼容性问题,并强调了多线程优化对提升应用性能的重要性。开发者应持续学习和探索新的优化策略,以适应移动应用市场的竞争需求。
450 5
|
JavaScript
Vue使用element中table组件实现单选一行
如何在Vue中使用Element UI的table组件实现单选一行的功能。
828 5
Vue使用element中table组件实现单选一行
|
12月前
|
存储 安全 数据库
Flask-Login 扩展中,如何安全地存储用户密码?
【10月更文挑战第4天】Flask-Login 扩展中,如何安全地存储用户密码?
|
分布式计算 大数据 API
|
缓存 监控 负载均衡
http代理(proxy)配置都有哪些方法?
今天我将和大家探讨关于HTTP proxy配置的不同方法。在网络通信中,HTTP proxy配置(或称为IP代理)起着重要的作用,它允许我们在客户端和服务器之间建立中间代理,从而实现匿名性、访问控制和性能优化等目的。
|
C++
JNI Log 日志输出
JNI Log 日志输出
258 1
|
监控 数据可视化 应用服务中间件
Cacti设置流量阀值实现邮件报警
Cacti设置流量阀值实现邮件报警
【Three.js入门】灯光与阴影、平行光阴影属性、聚光灯的属性和应用
【Three.js入门】灯光与阴影、平行光阴影属性、聚光灯的属性和应用
625 1
|
SQL 存储 人工智能
Google BigQuery深度解析:云端大数据分析服务的威力
【4月更文挑战第8天】本文是关于Google Cloud Platform的BigQuery在大数据和云技术领域的应用分析。BigQuery的核心特性包括无服务器、全托管架构,实现高性能的超大规模并行处理,并严格遵循安全与合规标准。在实战应用中,它用于数据湖分析、机器学习与AI,以及实时数据分析与BI。BigQuery的极致性能、易用性和与GCP生态的整合,使其成为云端大数据分析的强大工具,适用于各种行业场景,帮助企业释放数据价值。作者将持续分享相关技巧和最佳实践。
1584 0
|
uml
通过简单例子 | 快速理清 UML 中类与类的六大关系
通过简单例子 | 快速理清 UML 中类与类的六大关系
264 0