这张图是我所理解的 Android 插件化技术的三个技术点以及它们的应用场景。今天以 【Qzone 热修复方案为例】,跟大家讲一讲插件化中 热修复方案
的实现。
##原理
###ClassLoader
在 Java 中,要加载一个类需要用到ClassLoader
。
Android 中有三个 ClassLoader, 分别为URLClassLoader
、PathClassLoader
、DexClassLoader
。其中
- URLClassLoader 只能用于加载jar文件,但是由于 dalvik 不能直接识别jar,所以在 Android 中无法使用这个加载器。
- PathClassLoader 它只能加载已经安装的apk。因为 PathClassLoader 只会去读取 /data/dalvik-cache 目录下的 dex 文件。例如我们安装一个包名为
com.hujiang.xxx
的 apk,那么当 apk 安装过程中,就会在/data/dalvik-cache
目录下生产一个名为data@app@com.hujiang.xxx-1.apk@classes.dex
的 ODEX 文件。在使用 PathClassLoader 加载 apk 时,它就会去这个文件夹中找相应的 ODEX 文件,如果 apk 没有安装,自然会报ClassNotFoundException
。
Read full article from Android 热修复,没你想的那么难|开源实验室-张涛
No comments:
Post a Comment