logo
0
0
WeChat Login

Raft Shadow

Tencent Shadow是一个腾讯自主研发的Android插件框架。2019年开源后不断有公司内外业务接入使用。Shadow发布平台为了改进Shadow的DevOps过程,将会提供如下服务:

  1. 插件发布服务。业务方无需自行管理插件下发、升级相关逻辑,在平台页面一键操作灰度、回滚。插件构建后可通过CI/CD插件直接上传平台。平台还可以提供增量更新能力。
  2. 数据监控服务。和Shadow密切相关的关键数据,如插件的启动成功率等,中台会将关键数据进行汇总分析,为业务提供“平均值”参考。
  3. 技术咨询服务。对于复杂的插件与宿主直接依赖,插件之间依赖,业务代码可能需要一定针对动态化设计的重构。中台可以复用各个业务的历史经验,配合对Shadow的了解,对业务技术方案设计提供有价值的建议。
  4. 持续的开发维护。免去业务自行维护Shadow代码的成本。

为什么Android项目需要插件化技术?

Android平台的插件化技术,本质上来说是一种“动态库”技术。类似于传统so、dll库的动态加载,将Android组件库动态加载到App中。因此传统动态库的适用理由也适用于Android插件化技术。插件化的代码有更好的独立性,可以独立编译,独立运行和测试。由编译带来的强解耦边界也使得代码不易日渐耦合,有利于项目健康。

动态发布新特性是插件化技术的主要用途。对于快速迭代的业务来说,该技术可以避免用户反复安装新版本App。也可以使新特性快速触达更多用户。

动态修复Bug一直是快速迭代开发的强需求。插件化技术可以快速发布修复版本。尽管其修复速度不如基于运行时的热补丁技术,但插件化技术具有更好的兼容性,不必像热补丁技术一样需要兼容各种各样的机型和被修复代码。考虑到Bug并不是真的总需要瞬间修复,采用插件化技术修复代码是一种高性价比的选择。

为什么选择Shadow作为插件化技术实现?

  1. 完全无非公开API依赖实现,可长期运行于最新版本的Android系统上。
  2. Shadow自身绝大部分代码都在插件包内随插件一起下发,插件框架本身Bug也可以动态修复。
  3. Shadow现在有了由PCG 端服务中台提供统一的Shadow DevOps服务,业务方无需自行维护Shadow插件的分发,也有了稳定的技术支持。

更多关于Shadow的文档请参考:https://github.com/Tencent/Shadow/wiki

接入指引

  1. 参考demo添加3个新模块:demo-plugin-runtime,demo-plugin-loader,demo-plugin-manager
  2. 插件app接入Shadow Gradle插件,构建出插件包。参考plugin-app模块的build.gradle文件中的配置。 然后执行:plugin-app:packageDebugPlugin任务构建出插件包build/plugin-debug.zip.
  3. 上传插件包到Shiply平台: https://shiply.tds.qq.com/ 。然后替换demo-plugin-manager中的 downloadPlugin方法中配置的资源标识,再将构建好的demo-plugin-manager-debug.apk也上传到Shiply平台。
  4. 在宿主app中接入raft-shadow-host依赖,并参考host-app中的代码,初始化SDK, 配置manager在Shiply平台的相关信息。 创建Shiply项目和产品参考 https://shiply.tds.qq.com/document/getting-started-guide/integration-process/ 。创建和发布Shiply资源任务参考 https://shiply.tds.qq.com/document/remote-resource/quick-start/
  5. 本地模式使用指引
    1. 执行:demo-plugin-manager:assemble任务,将demo-plugin-manager/build/outputs/apk/debug/demo-plugin-manager-debug.apk复制到host-app/src/main/assets/pm/;
    2. 执行:plugin-app:packageDebugPlugin任务,将build/plugin-debug.zip复制到host-app/src/main/assets/plg/;
    3. 编译运行host-app,点击「启动插件(本地模式)」按钮;

About

ShiplyRaftShadowDemo

Language
Java53%
Gradle19.7%
Shell11.5%
Batch6.1%
Others9.7%