当前位置:   article > 正文

Android dexclassLoader 热更新个人学习总结_androidstudio 生成dex文件热更新

androidstudio 生成dex文件热更新

要了解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缓存目录下

  1. public static void fix(Context context) {
  2. File filesDir = context.getDir("odex", Context.MODE_PRIVATE);
  3. String name = "out.dex";
  4. String filePath = new File(filesDir, name).getAbsolutePath();
  5. File file = new File(filePath);
  6. if (file.exists()) {
  7. file.delete();
  8. }
  9. InputStream is = null;
  10. FileOutputStream os = null;
  11. try {
  12. is = new FileInputStream(new File(Environment.getExternalStorageDirectory(), name));
  13. os = new FileOutputStream(filePath);
  14. int len = 0;
  15. byte[] buffer = new byt
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/865817?site
推荐阅读
相关标签
  

闽ICP备14008679号