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

升级AGP至7+后出现NoClassDefFoundError的解决方案咨询

AGP升级后NoClassDefFoundError问题解决方案

一、D8内存配置优化

针对推测的D8内存问题,可通过以下参数调整内存分配:

  • 在项目根目录的gradle.properties中添加:
    org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m
    android.d8.jvmargs=-Xmx2048m
    
    android.d8.jvmargs是专门给D8分配内存的参数,可根据本地机器配置调高数值,CI环境资源充足所以报错频率低,本地可参考这个逻辑调整。

二、其他排查与解决思路

  1. 检查多DEX配置
    AGP7.x默认对minSdkVersion<21的应用自动开启多DEX,但需确保配置正确:

    • 在Module级build.gradle中:
      android {
          defaultConfig {
              multiDexEnabled true
          }
      }
      dependencies {
          implementation 'androidx.multidex:multidex:2.0.1'
      }
      
    • 自定义Application需继承MultiDexApplication,或在attachBaseContext方法中调用MultiDex.install(this)。
  2. 排查R8混淆规则
    可能存在混淆误删类的情况:

    • 在proguard-rules.pro中保留报错类:
      -keep class com.yourpackage.Logger { *; }
      -keep class androidx.core.app.CoreComponentFactory { *; }
      
    • 临时关闭R8 fullMode测试:在gradle.properties添加android.enableR8.fullMode=false,同时添加android.r8.logLevel=info查看混淆日志。
  3. 清理缓存重建

    • 执行命令./gradlew clean清理构建缓存
    • 删除项目根目录.gradle文件夹、Module下build文件夹后重新构建

三、强制使用dx的方法

AGP7.x中dx已被弃用,但可通过以下配置强制回退:
在Module级build.gradle中添加:

android {
    dexOptions {
        useDexArchive = false
        preDexLibraries = false
    }
    tasks.withType(com.android.build.gradle.tasks.DexArchiveBuilderTask) {
        useDexBuilder = false
    }
}

注意:该方式属于非官方兼容方案,后续AGP版本可能彻底移除dx支持,不建议长期使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:52:43