nuwa总结

来源:互联网 发布:手机淘宝昵称怎么修改 编辑:程序博客网 时间:2024/06/13 05:27

nuwa是什么?

nuwa是一个开源的android应用热修复方案,通过替换存在bug的类,能够在不重新安装app的情况下,修复app存在的问题.

nuwa的基本原理

唯一的一个Application对象必然是由一个ClassLoader对象加载进来的(实际是一个PathClassLoader对象),在此Application对象初始化时(此时绝大部分class还没有加载进来),寻找到该PathClassLoader对象,通过反射方式找到PathClassLoader对象的dexElements数组(里面元素的顺序决定着加载类时dex的顺序),将patch dex文件插入到数组最前面.

nuwa的执行流程

  1. 将修复了bug的若干类的class文件打包成patch dex文件(gradle实现).
  2. 为了防止此方案造成的崩溃问题,需要通过ASM使得每个dex文件都引用一个占位类(此机制在apk打包时采用gradle插件实现)

一些验证

  1. 如果先调用一次需要修复的类,再使用nuwa进行修复(如下代码所示),结果:修复失败.原因:原始类已经加载进来了

Class c=Hello.class;

Nuwa.loadPatch(this, Environment.getExternalStorageDirectory().getAbsolutePath().concat(“/patch.jar”));

  1. 如果将dexElements内容置为空呢?结果:直接崩溃.原因:加载类失败
  2. 如果在所有类都加载进来之后将dexElements内容置为空呢?结果:能够正常运行.

nuwa的特点

  1. 需要应用重启修复才能生效.
  2. 无法调用原始方法(热修复一般不需要调用原始方法).

参考资料

  1. https://github.com/jasonross/Nuwa
  2. http://mp.weixin.qq.com/s?__biz=MzI1MTA1MzM2Nw==&mid=400118620&idx=1&sn=b4fdd5055731290eef12ad0d17f39d4a&scene=0#wechat_redirect
  3. http://blog.csdn.net/sbsujjbcy/article/details/50812674
0 0