☰
第311篇 插件化原理概览:Hook 与动态加载
2026/11/5 1:57:19 网站建设 项目流程

承接上一篇《组件间通信:接口下沉与事件取舍》,那一篇讲的是「模块间如何在编译期保持独立」,这一篇讲一个更激进的思路:能不能让模块在运行时才加载,甚至不重新编译就更新功能?这就是插件化与热修复的底层技术。

结论先行:所有 Android 动态化方案都建立在两个能力之上——「ClassLoader 能被替换」和「关键对象的引用能被改写」。前者决定「代码能不能被换掉」,后者决定「换掉后系统还认不认」。理解了这两点,插件化的所有变体和它们的兼容性边界就都能推出来了。

一、两个基础能力

1.1 能力一:ClassLoader 加载顺序可干预

Android 的类加载是双亲委派的应用:启动时PathClassLoader按顺序在dexList里找类。可干预的点是「把哪个 PathClassLoader 设成当前线程的上下文 ClassLoader」:

// 系统视角:类加载发生在 zygote fork 出的应用进程里 // 应用启动时,ActivityThread 的 LoadedApk 会创建 PathClassLoader // 这个 ClassLoader 被存到 mBoundApplication.info.classLoader // 之后所有的类加载请求都走它 // 干预点 1:替换 LoadedApk 里的 classLoader val loadedApk = activityThread.mBound

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询