nuwa总结

nuwa总结nuwa 是什么 nuwa 是一个开源的 android 应用热修复方案 通过替换存在 bug 的类 能够在不重新安装 app 的情况下 修复 app 存在的问题 nuwa 的基本原理 唯一的一个 Application 对象必然是由一个 ClassLoader 对象加载进来的 实际是一个 PathClassLoa 对象 在此 Application 对象初始化时 此时绝大部分 class 还没有加载进来

大家好,我是讯享网,很高兴认识大家。

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..com/s?__biz=MzI1MTA1MzM2Nw==&mid=&idx=1&sn=b4fddeef12ad0d17f39d4a&scene=0#wechat_redirect
  3. http://blog.csdn.net/sbsujjbcy/article/details/
小讯
上一篇 2025-01-17 13:20
下一篇 2025-04-08 14:06

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/42630.html