一.原理
1.装载差分包,跟原来的dex文件合并,生成新的dex文件.
2.重新启动后,将新的dex文件插入到DexList的前面,这样就覆盖了旧的.
二.流程
1.启动一个IntentService(TinkerPatchService)将差分包和旧的dex文件合并.
2.应用重启后,在TinkerApplication中,通过反射拿到BaseDexClassLoader的pathList,
然后通过反射调用PathList的makeDexElements,生成新的Element,并插入到
dexElements数组的前面.
3.所以后面装载class的时候,都先从新的dex文件中找到,就不会往后找.
1.装载差分包,跟原来的dex文件合并,生成新的dex文件.
2.重新启动后,将新的dex文件插入到DexList的前面,这样就覆盖了旧的.
二.流程
1.启动一个IntentService(TinkerPatchService)将差分包和旧的dex文件合并.
2.应用重启后,在TinkerApplication中,通过反射拿到BaseDexClassLoader的pathList,
然后通过反射调用PathList的makeDexElements,生成新的Element,并插入到
dexElements数组的前面.
3.所以后面装载class的时候,都先从新的dex文件中找到,就不会往后找.
本文详细介绍了应用程序热更新的实现原理及流程。主要包括:1. 通过装载差分包与原有DEX文件合并生成新DEX文件;2. 在应用重启后利用反射机制更新DexList,使新DEX文件覆盖旧版本。
3213

被折叠的 条评论
为什么被折叠?



