You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android发布构建启动崩溃:VerifyError问题排查求助

问题:Release构建启动崩溃,Debug模式运行正常

现象

  • Debug模式下(模拟器/真机)应用运行完全正常
  • 相同代码构建Release版本时,启动阶段必然崩溃,所有环境均复现该问题

报错信息

java.lang.RuntimeException: Unable to start activity ComponentInfo{org.distorted.magic/org.distorted.playui.PlayActivity}: android.view.InflateException: Binary XML file line #12 in org.distorted.magic:layout/play: Binary XML file line #12 in org.distorted.magic:layout/play: Error inflating class org.distorted.playui.PlayView
(...)
Caused by: java.lang.VerifyError: Verifier rejected class org.distorted.library.main.InternalChildrenList: void org.distorted.library.main.InternalChildrenList.addSortingByBuckets(org.distorted.library.main.DistortedNode) failed to verify: void org.distorted.library.main.InternalChildrenList.addSortingByBuckets(org.distorted.library.main.DistortedNode): [0x19] type Undefined unexpected as arg to if-eqz/if-nez (declaration of 'org.distorted.library.main.InternalChildrenList' appears in /data/app/~~3uwbjOmT6qVqIWfcJWDV3g==/org.distorted.magic-awjTiIFTfzpMWKypA3V6hQ==/base.apk!classes4.dex)

被验证器拒绝的方法代码

private void addSortingByBuckets(DistortedNode newChild)
{
    int i;
    long bucket = newChild.getBucket();
    boolean thisSame,lastSame = false;

    for(i=0; i<mNumChildren; i++)
    {
        thisSame= (mChildren.get(i).getBucket()==bucket);
        if( lastSame && !thisSame ) break;
        lastSame = thisSame;
    }

    mChildren.add(i,newChild);
    mNumChildren++;
}

当前构建配置(已关闭ProGuard)

buildTypes {
    release {
        minifyEnabled false
        signingConfig signingConfigs.release
    }
    debug {
    }
}

排查思路

  • 对齐AGP版本:对比能正常编译的机器的Android Gradle Plugin版本,将本地版本降级或升级至一致,不同版本的字节码生成逻辑可能存在差异
  • 清理构建缓存:执行./gradlew clean后重新构建,避免旧缓存的脏数据干扰Release编译流程
  • 统一JDK版本:确认本地使用的JDK版本与正常机器一致,推荐使用Android Studio自带的JetBrains Runtime,避免JDK版本差异导致字节码生成异常
  • 调整D8/R8配置:即使关闭了混淆,D8可能仍有默认优化,可在gradle.properties中添加android.enableD8=false(针对旧版AGP)或调整D8相关参数,验证是否解决验证错误
  • 重置依赖缓存:删除本地.gradle/caches目录后重新同步依赖,确保依赖库的字节码文件无损坏
  • 对比字节码差异:将Debug和Release编译生成的classes.dex反编译,对比addSortingByBuckets方法的字节码,定位验证错误的具体原因

内容的提问来源于stack exchange,提问作者Leszek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 23:53:29