MIUISupermarket移植
VerifyError
1 | java.lang.VerifyError: Verifier rejected class com.xiaomi.market.util.UIUtils: void com.xiaomi.market.util.UIUtils.setStatusBarDarkMode(android.app.Activity, boolean) failed to verify: void com.xiaomi.market.util.UIUtils.setStatusBarDarkMode(android.app.Activity, boolean): [0x15] type Undefined unexpected as arg to if-eqz/if-nez (declaration of 'com.xiaomi.market.util.UIUtils' appears in /data/app/~~pH0reBrzyfvMag1T-TAoDw==/com.xiaomi.market-EzZXS_MznmhQs5NCCbvqfA==/base.apk!classes2.dex) |
- 一般出现VerifyError都是因为对smali代码修改,导致无法通过验证。当前遇到过的情况有:
- 插入代码时无意覆盖了下面会用到的寄存器的值,导致寄存器类型不匹配等问题。
- 对方法参数类型修改但未修改调用时传入的参数
- 传递参数时传递了类型不匹配的参数
ClassNotFound
在xiaomi商店中使用了Lmiui/os/Build
类,该类继承Landroid/os/Build
,且存在于小米系统中,导致类找不到。导致运行时闪退。
对于这类小米系统中才能获取到的类,采用等价替换的方法进行修复。如在Lmiui/os/Build
中有: