1.新建module(类似模块化)
as3.2 canary14+上面
new Module 选择Dynamic Feature Module
选择baseMoudle(apply plugin application那个)
enable on-demoand(“动态加载”)
fusing(兼容5.0之前)
2.简单测试
baseModule跳转到Dynamic Feature Module
(由于本模块访问不到其他模块,采用的是简单的隐式跳转,当然也可以用router)
3. 反编译分析
看一下加了dynamic feature module后的apks多了dynamci-feature相关的apk
按照之前的方式生成aab apks 按照apk到手机上,然后点击跳转可以正常跳转,而且看现象像是baseModule的apk启动了dynamicModule的apk。
导出对应手机配置apk:
直接安装导出的apk只有base-master可以安装,而且跳转会闪退,这个可以理解因为已经没有dynamic-featuer-master.apk相关的代码了。
但是当反编译安装在手机上可以正常运行的apk时,得到的也只有base-master的代码
所以dynamic-feature-module的大概意思是把独立业务的apk也放在手机里面,但是和主apk是分开的,等到要用的时候再调起dynamic-feature的apk?
而且由于没有服务器,不太清楚google Play的onDemond(用到再下载)是怎么个流程。可能是要用dynamic-feature-module了,再从服务器里面把对应的apk或者dex下载下来,再在本地执行上面说的流程。
emmmm............
为了再确认下,我又写了个模块化的跳转,
就是apply plugin: 'com.android.library'那种
然后运行发现没有其他apk调起的感觉
反编译运行的apk,也直接就是两个module代码都在,估计这就是dynamic-feature-module不一样的地方?
其他:
总觉得要在google play上试试才放心,本地虽然可以通过bundleTool测试,但是onDemand的概念不好理解。
更新:
-
在原有模块依赖关系上抽出dynamciFeatureModule
demo上依赖关系比较简单,可以直接就把module替换成动态模块
-
bundle一个小缺陷
因为bundle是以local(language) 、density 、abi来区分的,安装的时候也是根据这三个来下载配置apk。
density和abi正常情况下,在手机上不可能变化的。
但是语言可以切换,所以会造成下载的时候,观察手机的语言是中文就下载中文的配置,当切换到英文时,还是只能用中文的配置。
因为是本地用bundleTool测试的,不知道gp上会不会在切换语言的时候,重新在服务器上把切换后的语言相关的apk下载下来,文档里面也没看到相关介绍
类似切换系统语言时app监听系统发出的类似广播的消息,然后获取本机配置,重新在商店下载增量部分的apk??
emmm........难道是只有国人才会闲得把系统语言切来切去的?google就没有考虑这个问题