- Dynamic Feature Apk:
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
动态特性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的时候,下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WD6Y1SQG-1636343436459)(https://user-gold-cdn.xitu.io/2018/6/3/163c3bfe05490c11?imageView2/0/w/1280/h/960/ignore-error/1)]
上面有两个选项,一个文本框
- 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不知道你何时安装好模块从而会引发问题
Activity不能有exported:true因为别的app不知道你何时安装好模块从而会引发问题