课程名称:移动端架构师
课程章节:新一代组件化动态化方案App Bundle
课程讲师:CrazyCodeBoy LovelyChubby
课程内容:
AppBundle拆分的注意事项
App Bundles 方案在减少APK大小方面,就有很大的优势。但是App Bundles方案依托与Google Play才能做到业务模块的按需加载。但是目前爱奇艺开源了Qigsaw框架,自己实现了一套类型Google Play的方案,同时保持API的使用与Google Play保持一致,这样就可以做到国内外场景的自由切换。
dynamic-feature-moudle
引用base moudle
资源时,不能直接使用R.drawdble 需要使用 [base moudle packagename].R.drawdble的方式dynamic-feature-module
项目名称不能以数字开头java.io.IOException: Cannot find PROCESSED_RES output for Main{type=MAIN, fullName=flavor1Debug, filters=[], versionCode=-1, versionName=null}异常 需要注释掉build.gradle的splite {abi{}}
base moudle
不可以访问dynamic-feature-module
中的iddynamic-feature-module
中arssc文件中资源索引id的值为0x7ebase moudle
中arssc文件中资源索引id的值为0x7f
因为feature与baseMoude都有各自的arsc文件,虽然属性名称一直但是id值是不一致的,所以basemoude中涉及访问feature moudle的id值都需要修改动态模块配置模块名title 必须通过如下方式
dist:title="@string/title_dynamic_feature"
不能直接编写字符串,并且该字符串必须写在base moudle
中dynamic-feature moudle
与base moudle
的manifest
文件最终会合并成一个manifest
文件,所以要保障manifest
的资源引用均在base moudle
中。当打开新建
dynamic-feature moudle
并启用了on-demand
(按需加载)能力时,必须开启Fusing(熔断操作)才能正常的让Api21以下的设备正常使用module一般情况下,动态模块下发之后需要重启App才能加载成功,但是如果你使用SplitCompat 加载唤起动态模块,就可以立即生效
如果下载的模块太大,需要用户确认,GP要求大于10MB需要用户确认
dynamic-feature moudle
中的AndroidManifest中定义的Activity不能有exported:true因为别的app不知道你何时安装好模块从而会引发问题
课程收获:
谢谢老师,老师讲解细致,通俗易懂,这一节学习的是AppBundle拆分注意事项,通过注意事项,可以避免使用AppBundle拆分时遇到的各种问题,能够更快速更好的掌握AppBundle,给以后的继续学习打下了良好的基础。
期待后边的继续学习。