Android | 在平坦的道路上曲折前行-插件式开发
为何要插件化?
谈到插件化,在 Android 环境下可能很多人会说”真邪恶”, “不要脸”,”TMD,自己主动更新,流氓软件!”。
但业务越来越大的时候,会遇到些问题:
- 模块越来越多,如何有效的组装各个模块,让不同部门更好的协作开发。
- 软件包越来越大,如何更好的降低更新成本。
- 如何支持高效的 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 做的插件化,比去Hook
Android 源码,干扰 ClassLoader 加载流程更具有优势,随着 React Native 的横空出世,Android 插件化会慢慢退出历史舞台。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Gavin Liu - 代码人生与科技生活
评论