为何要插件化?

谈到插件化,在 Android 环境下可能很多人会说”真邪恶”, “不要脸”,”TMD,自己主动更新,流氓软件!”。

但业务越来越大的时候,会遇到些问题:

  1. 模块越来越多,如何有效的组装各个模块,让不同部门更好的协作开发。
  2. 软件包越来越大,如何更好的降低更新成本。
  3. 如何支持高效的 A/B Test,而不是发布不同的包出去。

这个时候似乎插件化是解决问题的最好方案,对于程序员来说,我们也是一直在想方设法的写高类聚低耦合的代码,插件化几乎成了不二之选。

微信的插件化

第一次在 Android 了解到插件化是在 14 年的 InfoQ 全球架构师峰会上,赵原分享的微信 Android 客户端架构演进及其对开发流程的影响

Eclipse 的插件化

在学 Java 开发的时候,就觉得 Eclipse 很神奇,有各种插件,各种 Eclipse 的衍生版本,其实 Eclipse 本身就是完全插件化的软件。

Android 的插件化

脚本语言+Android API

这里的脚本语言可以是 Javascript,Lua 等,使用Scripting Layer for Android实现脚本语言的运行环境,在 Android 层实现 API 提供给脚本语言调用。

APK 动态加载

动态加载和热更新基本上可以等同起来,其主要技术点:

  • ClassLoader
  • Dex 分包
  • CLASS_ISPREVERIFIED

定制自己的插件化框架

市面上太不可能有一款框架,能绝对满足你的软件,插件化也是多种技术方案的并存的,所以往往都需要自己定制自己的框架。

一些比较靠谱的 APK 动态加载库

  • Small
  • DL

Final:React Native

Facebook 推出的 React Native,写的是 H5 但运行的是 Native 源码,基于 React 做的插件化,比去HookAndroid 源码,干扰 ClassLoader 加载流程更具有优势,随着 React Native 的横空出世,Android 插件化会慢慢退出历史舞台。