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中有:

阅读更多