前段时间试用了下Nuwa做热修复,后来发现这个项目作者久不维护了,于是决定放弃,改用rocoofix。
但是等我把相关代码,插件删除后发现我的项目编译不过了,一直报找不到Hack.class,就算删除工程重新checkout一份新的都没用,无奈先放在一边不处理,今天突然发现用了rocoofix后libs里的jar包有修改,猜想应该是rocoofix插件改的,于是diff一下:

可以看到jar包中的.class文件都有被修改,主要是加了一个System.out.println(Hack.class);这个是热修复的原理,这里不解释。
同时也看到相同的代码被插件植入三次(猜想生成一次patch就植入一次,不是很合理!)
看到这里,我就明白之前Nuwa为什么说找不到Hack.class了,因为项目中用到的远程jar包都被植入了Hack.class,当我移除Nuwa时,Hack类也就删了,然而jar包还在引用,所以报错。
那么解决的办法就出来了,到.gradle/cache/下把jar全删了,再重新下。
网友评论