Android App Bundle 探索,android 系统软件开发
Dynamic Feature Apk:
动态特性 Apk,这是组件化的一个好的新方案,通过动态下发模块来做到功能的动态更新
bundletool 工具
当你选择将 App 打包成.aab(Android App Bundle)的后缀文件之后,如何测试你的 Apk 是否可用,bundletool 工具正是用来处理这个 aab 文件的。
Github:https://github.com/google/bundletool
使用方法:https://developer.android.com/guide/app-bundle/test
bundletool 是 google 推出的开源工具,使用方法十分简单,使用几行命令就可以获取出针对相应设备的 Apk,也可以一键进行安装,签名等操作。Google Play 也是使用 bundletool 来进行 aab 解包分发给不同的设备的。
兼容性问题
Api < 21 的手机无法进行模块化,Google Play 会对其进行Multiple Apks操作来进行下发操作。
当你创建一个 Dynamic Module 的时候,下图
上面有两个选项,一个文本框
Enable on-demand: 是否启用按需下载,如果不启用,会直接打进 Apk
Fusing:熔断操作,是否安装到不支持按需下载的设备中
Module title: 模块标题
对于动态组件的一些使用场景
语言包的动态下发
当 Split 针对语言进行划分时候,用户下载的 Apk 仅仅只能下载下来一个 Base Apk,包含他的当前系统语言,你可以将其他语言包作为 Dynamic feature 下发给用户,做到语言包的动态下发
功能的动态下发
对于某些独立的 feature,这其实跟之前的插件化方案有异曲同工之处,而且天然支持友好,动态下发业务需求能有效的减少包大小,增加启动速度,减少安装时间等等。
热修复场景
通过简单的逻辑判断,可以直接用下发下来的 feature 来进行对当前 feature 的替换使用,做到热修复的效果。而且无需考虑后期的版本升级问题。
关于动态模块的一些注意事项
当打开 on-demand(按需加载)时,必须开启 Fusing(熔断操作)才能正常的让 Api21 以下的手机使用 module
一般情况下,动态模块下发之后需要重启 App 才能加载成功,但是如果你使用 SplitCompat library,就可以立即生效,Access code and resources from downloaded modules
如果下载的模块太大,需要用户确认,GP 要求大于 10MB 需要用户确认
国际上可以使用 Google Play 的 Play Core Lib 直接从 gp 后台下载我们上传好的 dynamic module.
module 中的 AndroidManifest 中定义的 Activity 不能有 exported:true 因为别的 app 不知道你何时安装好模块从而会引发问题
评论