前言
先简单介绍一下 Android 插件化。很早之前已经有公司在研究这项技术,淘宝做得比较早,但淘宝的这项技术一直是保密的。直到 2015 年才陆续出现很多框架,Android 插件化分成很多技术流派,实现的方式都不太一样。我今天的主题就是,Android 插件化的不同流派、不同思想,以及做插件化需要掌握哪些知识。
插件化历程
![](https://img.haomeiwen.com/i28430736/33603743ee13b741.png)
插件化入门
首先,做 Android 系统原代码的人应该非常熟悉 Binder,如果没有它真的寸步难行。Binder 涉及两层技术。你可以认为它是一个中介者模式,在客户端和服务器端之间,Binder 就起到中介的作用,这是我这段时间对 Binder 的思考。
- Binder
- APP打包流程
- APP安装流程
- APP启动过程
- 资源加载机制
- Gradle
技术流派学习
- 动态替换
- 静态代理
- dex合并
第一种是动态替换
也就是 Hook。可以在不同层次进行 Hook,从而动态替换也细分为若干小流派。可以直接在 Activity 里做 Hook,重写 getAsset 的几个方法,从而使用自己的 ResourceManager 和 AssetPath;也可以在更抽象的层面,也就是在 startActivity 方法的位置做 Hook,涉及的类包括 ActivityThread、Instrumentation 等
第二种是静态代理
这是任玉刚的框架采取的思路。写一个 PluginActivity 继承自 Activity 基类,把 Activity 基类里面涉及生命周期的方法全都重写一遍,插件中的 Activity 是没有生命周期的,所以要让插件中的 Activity 都继承自 PluginActivity,这样就有生命周期了。
第三种是 Dex 合并
Dex 合并就是 Android 热修复的思想。刚才说到了两个项目——AndFix 和 Nuwa,它们的思想是相同的。原生 Apk 自带的 Dex 是通过 PathClassLoader 来加载的,而插件 Dex 则是通过 DexClassLoader 来加载的。
以上就是插件化的一些学习路线理解,当然还会有一些学习技术拓展譬喻:AAPT、增量更新、插件管理平台等等技术。更多有关Android的技术进阶,大家可以参考《Android核心技术手册》翻阅学习Android更高级的核心技术。
文末
Android 插件化未来的方向。阿里一位技术专家冯森林曾说,插件化最厉害的发展方向应该是每个 Activity 都是一个插件。这个观点在插件化技术交流群里一提出来之后,群里所有人都沉默良久。仔细想想,插件化的未来好像的确是这个发展方向,这样就可以将任何一个出问题的 Activity 迅速替换。但当 RN 一经提出,这个观点就慢慢消失了,RN 比插件化更轻量级,越来越多人选择了 RN。
网友评论