赞
踩
要了解android热更新你的了解下安卓的启动过程机制
android每次启动过程中都是通过jvm来加载dex文件的
dex文件的又来java---class---dex
具体的我也不多说网上有很多资料
了解了安卓的启动过程就在来了解哈热更新的实现思路
热修复就是每次在app启动时,
加载我们自己的patch.dex文件,不是修复的dex文件
pk中class.dex文件是通过pathClassLoader来加载的
dexclassLoader用来加载sd开上的.jar包和apk文件
dexClassLoader和pathClassLoader是通过基类baseDexclassLoder查找class。通过其内部的DexPathList pathList 来查找的
DexPathList内部有一个Element[] dex数组,通过findClass方法遍历element数组,一旦找到就返
创建dexClassLoader将我们的dex文件穿进去
通过反射拿到我们dexClassloader中的dexPathList中的element
拿到apk的dexClassLoader使用反射的方式拿到dexPathList中的element
最后将patch中的element和apk中的element合并在一起通过反射修改apk中的element
网上有很多热更新的框架,原理都是这样来的
首先将手机储存路径下的dex文件移动到odex缓存目录下
- public static void fix(Context context) {
- File filesDir = context.getDir("odex", Context.MODE_PRIVATE);
- String name = "out.dex";
- String filePath = new File(filesDir, name).getAbsolutePath();
- File file = new File(filePath);
- if (file.exists()) {
- file.delete();
- }
- InputStream is = null;
- FileOutputStream os = null;
- try {
- is = new FileInputStream(new File(Environment.getExternalStorageDirectory(), name));
- os = new FileOutputStream(filePath);
- int len = 0;
- byte[] buffer = new byt
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。