Android 插件化开发【路线方法】

2022-11-30  本文已影响0人  谁动了我的代码

前言

先简单介绍一下 Android 插件化。很早之前已经有公司在研究这项技术,淘宝做得比较早,但淘宝的这项技术一直是保密的。直到 2015 年才陆续出现很多框架,Android 插件化分成很多技术流派,实现的方式都不太一样。我今天的主题就是,Android 插件化的不同流派、不同思想,以及做插件化需要掌握哪些知识。

插件化历程

插件化入门

首先,做 Android 系统原代码的人应该非常熟悉 Binder,如果没有它真的寸步难行。Binder 涉及两层技术。你可以认为它是一个中介者模式,在客户端和服务器端之间,Binder 就起到中介的作用,这是我这段时间对 Binder 的思考。

技术流派学习

第一种是动态替换

也就是 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。

上一篇 下一篇

猜你喜欢

热点阅读