Loading...

文章背景图

RePlugin:360 安卓插件化框架接入与使用指南

2024-09-04
0
- 字
- 分钟
|

官方信息表

项目 说明
项目名称 RePlugin
一句话定位 历经三年多考验、数亿设备使用的占坑类 Android 插件化框架
所属组织 360(Qihoo360),由 360 手机卫士团队研发
代码仓库 Qihoo360/RePlugin
最新 Release 2.3.3
开源协议 Apache License v2.0
最低系统要求 Android API Level 9(Android 2.3 及以上)
官方 Wiki RePlugin Wiki
插件管理服务 360 移动开发者平台
示例工程 replugin-sample

官方架构图

下面是 README 中给出的 RePlugin 框架架构图,以 360 手机卫士为实际部署案例:

RePlugin 架构图

重要通知:仓库迁移

由于 jcenter 停服,RePlugin 已经将依赖仓库迁移到 360 自有的 Maven 私服上。README 的英文版在最醒目的位置贴出了这条通知:如果你还需要继续接入 RePlugin,必须在项目的 build.gradle 里增加新的仓库地址:

maven { url "http://maven.geelib.360.cn/nexus/repository/replugin/" }

也就是说,老项目如果只配置了 jcenter,升级或新集成时会因为仓库失效而拉不到依赖,这是迁移期最常见的坑。

项目背景

RePlugin 是一套完整的、稳定的、适合全面使用的占坑类插件化方案,由 360 手机卫士的 RePlugin Team 研发,也是业内首个提出“全面插件化”(全面特性、全面兼容、全面使用)的方案。英文 README 将其定位为“a flexible, stable, easy-to-use Android plug-in framework”,即一个灵活、稳定、易于使用的 Android 插件化框架。

所谓插件化,是指把一个 App 拆成主程序(宿主)加若干插件 APK,插件可以在主程序不升级、不重新发版的情况下被安装、下载、动态加载和运行,从而实现业务模块的热更新、按需下发与快速迭代。README 强调 RePlugin 是“占坑类”方案:主程序在 Manifest 里预先注册好占位的四大组件,插件运行时占用这些坑位来加载,而不是靠反射去 hook 系统服务。

从 README 英文版的表述看,这个方案的设计取向非常明确:能少 Hook 就少 Hook,能不反射系统服务就不反射。在插件化技术的早期探索中,很多方案选择 hook AMS、Handler 等系统服务来伪造组件启动过程,这类方案在 ROM 碎片化严重的安卓生态里很容易触发兼容性问题。RePlugin 反其道而行,把侵入面压缩到 ClassLoader 一处,换来的是万分之一的崩溃率和对几乎所有 ROM 的兼容能力——这也是 README 把“稳定性”放在仅次于“灵活性”之后的原因。

核心优势逐条翻译

README 中文版“其主要优势有”一节列出六大优势,完整翻译如下。

第一,极其灵活。 主程序无需升级(无需在 Manifest 中预埋组件),即可支持新增的四大组件,甚至支持全新的插件。换句话说,插件里新写的 Activity、Service 等组件,不需要宿主提前登记就能跑起来。

第二,非常稳定。 Hook 点仅有一处(ClassLoader),无任何 Binder Hook。正是因为对系统的侵入被压到最小,RePlugin 的崩溃率仅为万分之一(0.01%),并且能完美兼容市面上近乎所有的 Android ROM。英文 README 对此的表述是:只有一处 ClassLoader 钩子、没有 Binder 钩子,崩溃率低至 0.01%。

第三,特性丰富。 支持近乎所有在“单品”开发时的特性,包括静态 Receiver、Task-Affinity 坑位、自定义 Theme、进程坑位、AppCompat、DataBinding 等。

第四,易于集成。 无论插件还是主程序,只需数行配置就能完成接入。

第五,管理成熟。 拥有成熟稳定的插件管理方案,支持插件安装、升级、卸载、版本管理,甚至包括进程通讯、协议版本、安全校验等配套能力。

第六,数亿支撑。 有 360 手机卫士庞大的数亿用户做支撑,经过三年多的残酷验证,确保 App 用到的方案是最稳定、最适合使用的。

落地数据

截止 2017 年 6 月底,RePlugin 在 360 内部的落地成绩如下表所示:

指标 数据
插件数 103 个(核心 57 个)
插件占应用比 高达 83%
年发版次数 高达 596 次(工作日均 2 次)
崩溃率 万分之一(0.01%),极低
线上验证时长 2014 年应用,3 年验证

README 同时说明:目前 360 公司几乎所有的亿级用户量 App,以及多款主流第三方 App,都采用了 RePlugin 方案,这也是其“数亿用户支撑”这一优势的直接依据。

支持特性全表翻译

README 中“我们还支持以下特性”一节列出的能力清单如下,逐条翻译:

特性 描述
组件 四大组件(Activity、Service、Provider、Receiver,含静态 Receiver)
升级无需改主程序 Manifest 完美支持
Android 特性 支持近乎所有(包括 SO 库等)
TaskAffinity 与多进程 支持(坑位方案)
插件类型 支持自带插件(内置、自识别)、外置插件(下载)
插件间耦合 支持 Binder、Class Loader、资源等
进程间通讯 支持同步、异步、Binder、广播(含跨插件广播)
自定义 Theme 与 AppCompat 支持
DataBinding 支持
安装时安全校验 支持
资源方案 独立资源 + Context 传递(相对稳定,无需适配 ROM)
Android 版本要求 API Level 9+(Android 2.3 及以上)

愿景与最新特性

README 的愿景一节写道:让插件化能飞入寻常应用家,做到稳定、灵活、自由,大小项目兼用。

最新特性方面,README 明确说明:RePlugin 已经解决了 Android P(Android 9.0)相关的适配问题,全面支持 Android P 正式版。这意味着在 Android 9 这一系统权限与隐藏 API 收紧的大版本上,RePlugin 不需要业务侧做任何额外改造即可正常工作。

架构分层说明

README 以 360 手机卫士为例,把架构图分成三层:

系统层——Android: 即 Android Framework 层。RePlugin 对系统的 Hook 只有 ClassLoader 一处,AMS、Resources 等都没有做 Hook,这正是其稳定性的来源。

框架层——RePlugin 框架: RePlugin 框架层中,只有 RePlugin 本身是对上层完全公开的,其余都是 Internal,或者是“动态编译方案”生效后的调用,对开发者而言是无需关心的内部细节。

插件层——各插件: 标蓝部分是各业务插件,包括体检、清理、桌面插件等;标黄部分是支撑一个应用的各种基础插件,如 WebView、Download、Share,甚至 Protobuf 都能成为基础插件。

接入与使用步骤

README 的“使用方法”一节说明:RePlugin 的使用非常简单,大部分情况下和“单品”开发无异。官方给出了四条学习路径:

  1. 如果你是第一次接触 RePlugin,请先阅读官方 Wiki 的 快速上手 指南,跟随指引完成第一个集成;
  2. 如果你想了解更多 RePlugin 的玩法,请阅读 详细教程;
  3. 如果你想对照真实工程看框架的具体用法,可以直接查看仓库中的 replugin-sample 示例工程;
  4. 如果你在接入中遇到任何问题,可以先看 FAQ。

结合重要通知,一个完整的最小集成路径是:第一步,在项目 build.gradle 中加上 jcenter 迁移后的 Maven 私服地址;第二步,按照快速上手指南完成主程序(宿主)侧的集成;第三步,按同样方式把业务模块打成插件并接入宿主;第四步,对照 replugin-sample 工程校验自己的工程结构。README 反复强调“只需数行就能完成接入”,因此主程序与插件两侧的接入成本都很低。

关于插件形态,README 给出了两种类型:一种是内置插件,即随主程序一起打包、只需要两步即可完成接入的插件;另一种是外置插件,即发布后从网络下载、按需安装的插件。前者适合核心业务模块随版本一起发,后者适合活动、运营类模块随时热更新,两种模式可以在同一个宿主里混用。插件之间还支持 Binder、Class Loader、资源等层面的解耦与互通,进程间通讯覆盖同步、异步、Binder 以及跨插件广播,这些能力都由框架层统一提供。

插件管理服务

README 中文版专门用一节介绍与 RePlugin 配套的插件管理服务。至今为止有数不清的用户联系团队希望做配套的插件管理功能,因此 RePlugin 团队联合 360 Web 平台部,合力推出了这套服务,再次大幅降低了使用门槛。其功能介绍如下:

  • 插件版本管理: 对 APK 插件包名、别名和版本号做交集限制,防止下发出错。
  • 打点统计: 上报即显示下发量、下载量、安装量和错误量数据。
  • 升版管理: 严格要求新建下发任务先面向虚拟用户或部分真实用户,即“测试版”任务(适用于内测、AB 测试和灰度),测试没问题后才能切换到面对所有真实用户的“线上版”任务,防止出错。
  • 下发限速: 开发者可自定义自己想要的插件下发速度。
  • 运营商和厂商限制: 开发者可自定义下发的运营商和目标终端厂商。
  • 灵活的下发条件设置: 根据用户群体对下发条件的要求程度,提供 4 种条件设置功能:要求不高的用户可直接使用便捷条件下发(包括按人数和指定设备下发);要求高的用户可使用自定义条件下发(包括文字条件编辑器和代码条件编辑器)。

README 特别提到,团队原创的文字版条件编辑器能把复杂繁琐的条件代码还原成有语法有逻辑的中国话,让非技术人员第一次使用就看得懂、会操作,团队称这应该是业内第一个把下发条件体验做到如此细腻的产品。服务使用地址是 360 移动开发者平台。

已接入 RePlugin 的应用与插件分类

README 列出的接入方包括:360 手机卫士、360 手机助手(应用商店)、360 手机浏览器、花椒相机、360 清理大师、360 影视大全、J 借钱吧、海淘 1 号、华润通、借了吗、360OS 系统应用、360 借条等,覆盖 360 集团旗下几乎所有亿级应用,以及部分对稳定性要求极其严苛的金融类产品。

从插件形态看,README 把已接入的插件分为五类,供各 App 开发者参考:

  • 展示插件: 如卫士首页(是的,README 特别注明你没看错,连首页都被做成了插件)、体检、信息流等;
  • 业务插件: 如清理、骚扰拦截、悬浮窗等;
  • 合作插件: 如程序锁、免费 WiFi、安全桌面等;
  • 后台插件: 如 Push、服务管理、Protobuf 等;
  • 基础插件: 如安全 WebView、分享、定位等。

截止 2017 年 6 月底,这样的插件已经有 103 个。README 同时衷心感谢了 360 手机助手及其他各 App 团队——正是这些团队帮助发现了很多需要改进的地方,并给予了非常积极的反馈,让 RePlugin 能走得更远、更好。

常见问题(FAQ)

问:为什么我新集成时拉不到依赖? 因为 jcenter 已经停服,README 的英文版重要通知要求在 build.gradle 中新增 maven { url "http://maven.geelib.360.cn/nexus/repository/replugin/" } 仓库地址。

问:RePlugin 的稳定性是怎么保证的? README 说明其 Hook 点只有 ClassLoader 一处,没有任何 Binder Hook,因此崩溃率低至万分之一(0.01%),并且兼容市面上近乎所有的 Android ROM。

问:对 Android 系统版本有什么要求? README 标明最低支持 API Level 9(Android 2.3),并且已经全面适配 Android P(Android 9.0)正式版。

问:插件里能写新组件吗?需要宿主预埋吗? README 的灵活性优势说明:主程序无需升级、无需在 Manifest 中预埋组件,即可支持新增的四大组件,甚至全新的插件。

问:遇到接入问题去哪里找答案? README 给出官方 Wiki 的 FAQ 页面;此外还可以加入官方 QQ 群:653205923、589652294(微信群已超过人数上限)。

贡献与许可

README 的“贡献自己的力量”一节表示:欢迎任何形式的贡献,可以贡献代码、提出问题、编写文档等,详见 贡献力量 Wiki 页面。许可方面,RePlugin 采用 Apache License v2.0 开源协议。

跳转链接

评论交流

文章目录