Meituan-Dianping / Robust

Robust is an Android HotFix solution with high compatibility and high stability. Robust can fix bugs immediately without a reboot.
Apache License 2.0
4.4k stars 805 forks source link

生成的补丁包,被@Modify注解标识的方法名称未混淆 #401

Closed Easy-Ez closed 4 years ago

Easy-Ez commented 4 years ago

异常类型:app运行时异常

手机型号:Nexus 5 手机系统版本:如:Android 5.0

Robust版本:0.4.99

Gradle版本:3.6.2

系统:Mac

原始Apk中的名为print的方法,会被混淆为o @Modify修改print方法里逻辑后,生成的补丁包,该方法未被混淆

image

堆栈/日志:

04-20 13:20:32.197 16854-16854/cc.wecando.meizi.preonline W/System.err: java.lang.NoSuchMethodError: No virtual method o()V in class Lcc/wecando/meizi/MainActivityPatch; or its super classes (declaration of 'cc.wecando.meizi.MainActivityPatch' appears in /data/data/cc.wecando.meizi.preonline/cache/robust/patch_temp.jar)
04-20 13:20:32.197 16854-16854/cc.wecando.meizi.preonline W/System.err:     at cc.wecando.meizi.MainActivityPatchControl.accessDispatch(PatchTemplate.java)
04-20 13:20:32.197 16854-16854/cc.wecando.meizi.preonline W/System.err:     at com.meituan.robust.PatchProxy.accessDispatch()
04-20 13:20:32.197 16854-16854/cc.wecando.meizi.preonline W/System.err:     at com.meituan.robust.PatchProxy.proxy()
04-20 13:20:32.197 16854-16854/cc.wecando.meizi.preonline W/System.err:     at cc.wecando.meizi.MainActivity.o()
04-20 13:20:32.197 16854-16854/cc.wecando.meizi.preonline W/System.err:     at cc.wecando.meizi.MainActivity.onClick()
04-20 13:20:32.197 16854-16854/cc.wecando.meizi.preonline W/System.err:     at android.view.View.performClick(View.java:4780)
04-20 13:20:32.197 16854-16854/cc.wecando.meizi.preonline W/System.err:     at android.view.View$PerformClick.run(View.java:19866)
04-20 13:20:32.197 16854-16854/cc.wecando.meizi.preonline W/System.err:     at android.os.Handler.handleCallback(Handler.java:739)
04-20 13:20:32.197 16854-16854/cc.wecando.meizi.preonline W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
04-20 13:20:32.197 16854-16854/cc.wecando.meizi.preonline W/System.err:     at android.os.Looper.loop(Looper.java:135)
04-20 13:20:32.197 16854-16854/cc.wecando.meizi.preonline W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5254)
04-20 13:20:32.197 16854-16854/cc.wecando.meizi.preonline W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
04-20 13:20:32.197 16854-16854/cc.wecando.meizi.preonline W/System.err:     at java.lang.reflect.Method.invoke(Method.java:372)
04-20 13:20:32.197 16854-16854/cc.wecando.meizi.preonline W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteIn
Easy-Ez commented 4 years ago

已经解决了,原因还不太清楚 现象是补丁包patch.jar中生成的Control类,调用的是混淆方法。 而patch.jar中的Patch类生成的是未混淆的方法。 把proguard-rules.pro文件中的混淆规则copy到项目里就ok了。 希望能帮到遇到同样问题的同学。