-
Notifications
You must be signed in to change notification settings - Fork 808
补丁加载与运行问题自查
何定旭 edited this page Nov 24, 2017
·
1 revision
#补丁加载问题自查:
一、补丁加载过程就崩溃了:
错误堆栈如下:
PatchsInfoImpl failed,cause ofjava.lang.ClassNotFoundException:
Didn't find class "com.meituan.robust.patch.PatchesInfoImpl" on path:
DexPathList[[],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]
这个问题分为两种情况,第一就是没有加载补丁,加载补丁的路径搞错了;第二就是补丁中的确存在着问题,补丁中不包含com.meituan.robust.patch.PatchesInfoImpl
这个类(如果对robust定制化之后这个类名可能发生改变,以你自己报错为准),补丁其实就是一个Jar,直接使用jadx-gui打开就好,你就可以看到补丁的具体内容
二、补丁加载成功,但是运行之后无效果:
补丁加载成功的log为(需要确保你们的应用没有移除log,如果你们在proguard规则中移除了全部log,则看不到如下log):
changeQuickRedirectField set sucess true
这个问题简单来说包括如下几个情况: 1、你的修改没有正确的修复问题,这个问题的验证可以直接编译你修改的代码,生成apk,再去验证效果 2、在补丁中加上log,我们在robust.xml文件设置了开关,做到了一键添加日志的功能,具体开关如下:
<!--是否捕获补丁中所有异常,建议上线的时候这个开关的值为true,测试的时候为false-->
<catchReflectException>true</catchReflectException>
<!--<catchReflectException>false</catchReflectException>-->
<!--是否在补丁加上log,建议上线的时候这个开关的值为false,测试的时候为true-->
<patchLog>true</patchLog>
<!--<patchLog>false</patchLog>-->
第一个开关控制着是否捕获补丁中所有的异常,第二个开关控制着是否在补丁中加上log(大约每三句代码就有一句log,会大大的增加补丁的体积),这两个开关根据需求自行定制化,可以快速的帮你解决问题。