紧密地 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
- 动态加载插件中的资源
- 反射调用
AssetManager中的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 为边界进行组件间隔离