紧密的Follow官方,平滑过度才是插件化最稳妥的道路。
京东商城资深 Android 系统架构师 张志强 如是说。
《当插件化遇上Android P》的学习笔记。
Android P禁止调用非SDK接口,对插件化技术有很大的挑战,但更禁止了不良开发者利用非SDK接口做对用户不利的行为,总体来说,利大于弊,支持官方。
Android P 禁令
- 禁止应用程序调用非SDK接口
- 浅灰名单
- 深灰名单
- 黑名单
Android AppBundles
- Legacy APK - 所有资源一个包
- Dynamic Delivery - 动态下发
- 将APK拆分成多个,动态下发用户需要的
- AAB的整体流程
- 上传Base apk 和AAB到Google Play
- 用户下啊在Base apk,根据需求下载AAB资源
- 限制
- 必须通过Google Play发布
- 最低版本支持Android 5.0
- 不是很成熟,单纯的减少了包的体积,无法通过动态下发修复bug或者增加新功能
- 成本
- AS 3.2
- 集成Play Core Library
- 加入SplitCompat库以支持6.0以下的手机Dynamic feature apk
- 所有模块必须位于同一个工程
- 如果之前的Library想改造成Dynamic Feature Module必须手动改造
Android插件化路在何方
- 用到了哪些黑科技
- Hook app中关键技术点,达到动态劫持页面请求
- 动态加载插件中的Class,大量使用反射
- 单ClassLoader
- 多ClassLoader
- 动态加载插件中的资源
- 反射调用
AssetsManager中的addAssetPath()方法
- 反射调用
###京东架构升级和重构
-
为什么需要插件化
- 65536
- 模块解偶
- 多团队并行开发
- 加快编译速度
- 动态部署,修复bug和发布新功能
-
我们的需求
- 去除黑科技
- 平稳过度
- 边界隔离
- 并行开发
- 独立调试
- 快速编译
- 动态部署
-
路在何方
-
Follow官方
-
组件化
-
大前端技术
- RN
- 快应用
- Weex
-
步骤
- 增加组件化功能
- 组件化 + 插件化
- AAB、前端技术
- 持续改进和优化
-
-
重构
- 去除插件化黑科技
- 平稳过度
- JdLib去中心化
- 插件组件随时互转
-
京东架构升级
- Aura插件化架构升级 -> Aura Plus
- 插件和组件灵活互转
- 无缝调用
- 优势互补
- 去中心化
- 平台支撑
- 重构后架构图
- 一切皆组件
- Aura插件化架构升级 -> Aura Plus
解密关键技术点
- 高内聚低耦合
- 以Project和Module为边界进行组件间隔离
- 一主工程多字工程开发模型
- 多个仓库:一主多子
- Library无需转换到Application
- 一切皆组件
- 小团队独立开发
- 一主工程多字工程开发模型
- 使用暴露API的方法达到组件间灵活通讯和调用的目地
- 组件编译产物
- Api.jar
- Full.aar
- 组件编译产物
- 处理组件的依赖关系
- 组件无依赖传递,边界隔离
- 武林秘籍
- 通过Gradle插件实现方便的依赖引用
- 预防资源id冲突:resourcePrefix
- 统一管理第三方库:ThirdBundle
- 统一管理公共资源:BaseResBundle
- 以Project和Module为边界进行组件间隔离