过去几年里,国内各大公司掀起了一股研究 Android 动态加载技术的浪潮。两年多过去了,这项技术俨然成了 Android 开发中必须掌握的核心技能之一。那么,动态加载技术到底是什么?这里谈谈我的个人看法。
什么是动态加载技术
对于动态加载的概念,业界并没有一个绝对权威的定义。参考网上的解释并结合实际经验,我们可以这样理解:动态加载代码就是通过在运行时加载外部代码(如磁盘、网络等)来改变程序行为的技术(某种程度上,它的设计思想有点像装饰者模式)。主要目的是为了达到让用户不用重新安装 APK 就能升级应用的功能。
为了加深大家对这种概念的理解,我们结合 PC 端来说说手机端的动态加载。
传统的 PC 端动态加载
熟悉 Java 的同学应该比较清楚,Java 的可执行文件是 Jar,运行在虚拟机上 JVM 上,虚拟机通过 ClassLoader 加载 Jar 文件并执行里面的代码。所以 Java 程序也可以通过动态调用 Jar 文件达到动态加载的目的。
动态加载技术在 PC 软件领域广泛使用,比如 QQ 上线的时候忘了某个功能的修复,这个时候就可以用动态加载来修复我们的 bug。
Android 应用的动态加载技术
Android 应用类似于 Java 程序,它同样基于虚拟机机制(Dalvik 或 ART),通过自定义 ClassLoader 实现类加载的动态化。这意味着开发者可以在不重新打包整个 APK 的前提下,动态引入新的类或资源,从而实现热修复或插件化功能。虽然底层实现细节有所不同,但其核心逻辑依然遵循'加载 - 执行'的范式,这也是为什么很多 Android 动态加载方案都深受 Java ClassLoader 启发。

