Skip to content

补丁加载与运行问题自查

何定旭 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,会大大的增加补丁的体积),这两个开关根据需求自行定制化,可以快速的帮你解决问题。