nuwa总结

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值