Closed jackyxxu closed 8 years ago
@jackyxxu 在你生成要发布的APK的时候,所有的类除了Application都引用了Hack。
生成patch.jar属于打补丁的时候,此时不引用Hack也无所谓了
@jasonross 谢谢!这样就好理解多了。这样做实际意义和把虚拟机的这个检测开关关了差不太多了吧。
@jackyxxu you are right
@jasonross 我反编译的你sample中第一步生成的apk,在MainActivity.class并没有看到插入的Hack字节码,但patch却能打成功没有报CLASS_ISPREVERIFIED错误,肿么回事呢?
@jackyxxu 会不会dex反编译成jar的时候有问题?我这貌似测试也是没有。但dex的输入是混淆后的jar,里面能看到Hack引用。因为我插入的字节码就一条指令,实际没有意义,dex到jar还原的时候不知道会不会有问题?
貌似不混洗会出现这个异常:11-17 17:08:19.976 2786-2786/cn.jiajixin.nuwasample E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{cn.jiajixin.nuwasample/cn.jiajixin.nuwasample.MainActivity}: java.lang.RuntimeException: Could not inflate Behavior subclass android.support.design.widget.AppBarLayout$ScrollingViewBehavior
按照你的Run the Sample没成功,虽然生成了path.jar 反编译看了里面只有修改后的cn.jiajixin.nuwasample.a.a.a(),path.jar路径没问题
@Qiu800820 patch里面只有a正常,因为只是改了Hello里面的一个string,看看是否push到sd卡上了,应用运行是否报错
@jasonross 没有报错,path.jar存在。如果不再SD卡上 Nuwa.loadPath应该会有个LOG
Nuwa Gradle 有个优化的地方是$ANDROID_HOME 不存在情况读取sdk.dir更好(也有可能是我不喜欢设置这种变量)
@Qiu800820 有道理,sdk.dir可以加上,你可以去写个pull request,哈哈
@jasonross 嗯,估计是反编译过程有问题 : - )
根据Qzone那篇原始文章里面描述,需要对直接引用Hello的类(Sample中的MainActivity)进行消除CLASS_ISPREVERIFIED的操作,但在生成的patch.jar去只看到Hello本身的Hack字节码插入,这其中是什么原理?