Android - 在平坦的道路上曲折前行-插件式开发

为何要插件化?

谈到插件化,在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插件化会慢慢退出历史舞台。

Gavin Liu wechat
欢迎您扫一扫上面的二维码,订阅我的微信公众号!