GMTC2018 《当插件化遇上Android P》 张志强
2020-03-01 332浏览
- 1.当插件化遇到 Android P 张志强 京东商城
- 2.
- 3.
- 4.目 录 CONTENTS 01 Android P 禁令 02 A n d ro i d A p p B u n d l e s 03 路在何方 04 京东架构升级和重构 05 解密关键技术点
- 5.目 录 CONTENTS 01 Android P 禁令 02 A n d ro i d A p p B u n d l e s 03 路在何方 04 京东架构升级和重构 05 解密关键技术点
- 6.Android P 时间表 Google IO 开发 者大会 DP1 && DP2 DP3 DP4 DP5 正式版 三月 四月 五月 六月 七月 Q3 发布“禁止调用非SDK 接口”消息 发布官方动态框架 Android App bundles
- 7.禁止调用非SDK接口
- 8.三个名单逐步推进 名单 影响 浅灰名单 targeSDK >= 9.0 :警告 深灰名单 targeSDK >= 9.0 :不允许调用 targeSDK < 9.0 :警告 黑名单 所有三方应用不允许调用 说明 • Android P 中还可继续工作 • 在后续版本可能会被移到深灰名单或黑名单 • 在未来的 Developer Preview 版本中将不可访问 • 开发者需要整改这些接口,或者申请加入浅灰名单 • 深灰名单和浅灰名单之外的所有非SDK接口
- 9.目 录 CONTENTS 01 Android P 禁令 02 A n d ro i d A p p B u n d l e s 03 路在何方 04 京东架构升级和重构 05 解密关键技术点
- 10.Android App Bundles
- 11.Android App Bundles Base APK Configuration APKs Dynamic feature APKs • 是首次安装的APK • 提供应用的基本功能,并包含其它splite APKs可以访问的公共 代码和资源 • manfest文件会包含所有的四大组件,权限,SDK版本以及依 赖关系的完整声明 • 包含特定的屏幕密度、CPU架构和语言的资源 • 当用户下载Base APK或者Dynamic feature Apk的时候,只 需要下载其对应的特定资源 • 包含的是首次安装的时候不需要的代码和资源 • 可以使用 Play Core Library 动态下载和安装
- 12.AAB的整体流程 Base Config ura ti on Dynamic GooglePlay Ba se Configura Configura ti on ti on Dynamic Dynamic Base Config ura ti on Dynamic Base Config ura ti on Config ura ti on Config ura ti on Dynamic Dynamic Dynamic
- 13.AAB 总结 1. IDE 需要升级到 Android Studio 3.2 2. 需要集成 Play Core Library 3. 可以加入 SplitCompat 库以支持 6.0 以下的手机 热更新 Dynamic feature apk 4. 所有模块必须位于同一个工程 5. 如果之前的 Library 想改造成Dynamic Feature Module 必须手动改造 02 限制 01 优点 03 成本 1. 只能通过 Google Play 发布 2. 处于测试阶段:需要申请加入 Google 的 dynamic feature beta program 3. 最低支持的版本是 Android 5.0 (API level 21) 4. 只是单纯的减小了包体积,不能通过动态下发来修复Bug和增加之前 未预算的新功能,也不能增加base apk的manifest中没有的四大组件 1. 官方支持 2. 减小了APK体积:去除与用户机型不匹配的代码和资源; 动态下发首次不需安装的部分
- 14.目 录 CONTENTS 01 Android P 禁令 02 A n d ro i d A p p B u n d l e s 03 路在何方 04 京东架构升级和重构 05 解密关键技术点
- 15.实现插件化的黑科技 Hook App运行的关键点 • ActivityThread.mInstrumentation • ActivityThread.mH • LoadedApk.mApplication • LoadedApk.mClassLoader • ContextThemeWrapper.mBase •… 加载插件中的类 • 通过反射插入到 BaseDexClassLoader的pathList 中 • 或是通过delegateClassLoader找 到插件对应的classLoader进行加 载 加载插件中的资源 • 反射调用 AssetManager.addAssetPaths
- 16.为什么需要插件化 • 绕过65536问题,快速启 动 • 模块解耦 • 多个团队并行开发 • 加快编译速度 • 动态部署 我们的需求 • 去黑科技 • 平稳过渡 • 边界隔离 • 并行开发 • 独立调试 • 快速编译 • 动态部署 路在何方? • Follow官方 • 组件化 • 前端
- 17.边界隔离 并行开发 独立调试 兼容性 成熟度 动态部署 迁移成本 插件化 √ √ √ 差 黑科技 √ / AAB √ ⨉ ⨉ 好 差 打折 大 组件化 √ √ √ 好 需研发 无 中 前端 √ √ √ 好 好 √ 大
- 18.持续改进和优化 • 持续发展技术 • 保持自身的活力 组件化+插件化 • 具有两者的优点 • 随意互转 • 具备降级条件 目标 04 STEP 03 STEP 02 STEP 01 STEP AAB、前端 • 随着官方框架的成熟应逐步向官 方的动态化框架靠拢 • 部分简单的业务迁移到前端上去 增加组件化功能 • 自研一个比较好用的组件化方案 • 现有代码易切换 • 组件间通讯方便
- 19.目 录 CONTENTS 01 Android P 禁令 02 A n d ro i d A p p B u n d l e s 03 路在何方 04 京东架构升级和重构 05 解密关键技术点
- 20.去除插件 化黑科技 平稳过渡 JdLib去 中心化 插件组件 随时互转 重构目标
- 21.插件化 Aura 京东架构升级 插件化 组件化 京东的插 件化框架 Aura Plus • 灵活互转 • 无缝调用 • 优势互补 • 去中心化 • 平台支撑
- 22.重构后的架构图
- 23.目 录 CONTENTS 01 Android P 禁令 02 A n d ro i d A p p B u n d l e s 03 路在何方 04 京东架构升级和重构 05 解密关键技术点
- 24.解密关键技术点 高内聚 低耦合 以 Project 和 Module 为 边界进行组件间隔离 武林秘籍 使用暴露API的方法达到组 件间灵活通讯和调用的目的 处理组件的依赖关系
- 25.项目结构:一主工程多子工程开发模型 Host Application Library Application Library Application Library • 多个仓库:一主工程,多个子工程 • Library无需转换到Application • 一切皆组件 • 小团队独立开发
- 26.只暴露API,隐藏具体实现 组件 编译 Api.jar 需要对外暴露的类 Full.aar 全部的类
- 27.组件依赖 Bundle-A Bundle-B Bundle-C Bundle-D • 组件无依赖传递 • 规则:如需依赖,必须明确写出 Bundle-E
- 28.组件提效武林秘籍
- 29.其它秘籍 • 预防资源 id 冲突:resourcePrefix • 统一管理第三方库:ThirdBundle • 统一管理公共资源:BaseResBundle
- 30.
- 31.
- 32.
- 33.