nuwa是什么?
nuwa是一个开源的android应用热修复方案,通过替换存在bug的类,能够在不重新安装app的情况下,修复app存在的问题.
nuwa的基本原理
唯一的一个Application对象必然是由一个ClassLoader对象加载进来的(实际是一个PathClassLoader对象),在此Application对象初始化时(此时绝大部分class还没有加载进来),寻找到该PathClassLoader对象,通过反射方式找到PathClassLoader对象的dexElements数组(里面元素的顺序决定着加载类时dex的顺序),将patch dex文件插入到数组最前面.
nuwa的执行流程
- 将修复了bug的若干类的class文件打包成patch dex文件(gradle实现).
- 为了防止此方案造成的崩溃问题,需要通过ASM使得每个dex文件都引用一个占位类(此机制在apk打包时采用gradle插件实现)
一些验证
- 如果先调用一次需要修复的类,再使用nuwa进行修复(如下代码所示),结果:修复失败.原因:原始类已经加载进来了
Class c=Hello.class;
Nuwa.loadPatch(this, Environment.getExternalStorageDirectory().getAbsolutePath().concat(“/patch.jar”));
- 如果将dexElements内容置为空呢?结果:直接崩溃.原因:加载类失败
- 如果在所有类都加载进来之后将dexElements内容置为空呢?结果:能够正常运行.
nuwa的特点
- 需要应用重启修复才能生效.
- 无法调用原始方法(热修复一般不需要调用原始方法).
参考资料
- https://github.com/jasonross/Nuwa
- http://mp.weixin..com/s?__biz=MzI1MTA1MzM2Nw==&mid=&idx=1&sn=b4fddeef12ad0d17f39d4a&scene=0#wechat_redirect
- http://blog.csdn.net/sbsujjbcy/article/details/

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