jasonross / Nuwa

Nuwa, pure java implementation, can hotfix your android application.
2.96k stars 574 forks source link

ART环境支持的不好 #44

Open peive opened 8 years ago

peive commented 8 years ago

说说我在实战中遇到的问题

首先是混淆,打修复包时利用正式包的mapping,修复bug,修改了原先的类,改变的类会改变,但有些类没有改变也会因为混淆的关系产生变化(混淆会剔除一些无用的方法,打修复包时那些无用的方法可能会加上),这就造成了有些类没有修改,但也会出现在修复包中。

再次是平台兼容问题,以前一直以为可以完全兼容ART环境。如果仅仅是修复一个小bug,比如改变了一行输出。那么在Android4.0和5.0上都可以修复,但如果修复一个稍微复杂的bug,可能牵连到的类就比较多了,在4.0环境上可以修复,在5.0环境上直接引起了其它的问题,导致崩溃。

xxxyanchenxxx commented 8 years ago

给你参考我遇到的问题, https://github.com/jasonross/Nuwa/issues/50

xxxyanchenxxx commented 8 years ago

http://m.blog.csdn.net/article/details?id=50887478 我集成后的一个总结,需要修改下才能支持ART

peive commented 8 years ago

对于art下符号引用的问题,我看你是全部的类都打进了修复的dex是吗,是整个app的类都打进了dex吗,这样是不是太中了

dodola commented 8 years ago

@xxxyanchenxxx 总结的很好,关于ART用这种方法确实会出现问题,其实按道理来说andfix的那种替换ArtMethod的方法应该也会出现问题的说,不知道有没有人遇到.关于你说的异常第二点有个hack的方法可以解决,你可以通过hook的方法获取到那个类的ClassObject 然后通过CLEAR_METHOD_FLAG CLASS_ISPREVERIFIED 的标记给清除掉,hook的过程可以看 ddi,我看Andfix也是用的这套

dodola commented 8 years ago

@peive 我觉得ART暂时不要打补丁比较好

szitguy commented 8 years ago

只支持4.x的话那nuwa方案是不是可以抛弃了,现在都5.0,6.0的机器了😂