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

API依赖用OpenJDK21编译后Android项目编译失败求助

解决OpenJDK21编译的API在AGP7.4.2/Gradle7.5下的D8空指针错误

问题根源

AGP 7.4.2配套的D8编译器版本较低,无法正确解析OpenJDK 21编译生成的字节码——即便API仅使用Java 8特性,JDK21默认编译输出的字节码会包含一些旧版D8不兼容的格式或属性,最终导致mergeExtDexDebug阶段触发空指针异常。

解决方案

1. 升级AGP与Gradle版本(优先推荐)

AGP 7.5.0及以上版本对JDK 21编译的依赖兼容性更好,同时需要匹配对应版本的Gradle:

  • 修改项目根目录build.gradle中的AGP版本:
    buildscript {
        dependencies {
            classpath 'com.android.tools.build:gradle:7.5.2' // 或更高稳定版
        }
    }
    
  • 修改gradle/wrapper/gradle-wrapper.properties中的Gradle版本:
    distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
    

升级后同步项目,重新构建即可。

2. 要求API发布方调整编译参数

让API发布方在编译时添加--release 8参数(无论使用JDK17还是21),强制生成Java 8兼容的字节码。例如:
Maven配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.11.0</version>
    <configuration>
        <release>8</release>
    </configuration>
</plugin>

Gradle配置:

tasks.withType(JavaCompile) {
    options.release = 8
}

这样生成的JAR包就能被旧版AGP的D8正常处理。

3. 临时回退API版本

暂时使用API发布方用OpenJDK17编译的旧版本,直到AGP升级或API编译参数修复完成。

4. 调整项目Dex编译配置(辅助方案)

如果升级AGP后仍有问题,可在app模块的build.gradle中添加以下配置:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    dexOptions {
        preDexLibraries = false // 禁用预Dex,强制D8重新处理所有依赖
    }
}

补充说明

更换Android Studio的编译JDK无法解决问题,因为AGP/D8使用的是独立的编译环境,与AS的默认JDK无关——核心矛盾是旧版D8不支持JDK21编译的字节码格式,而非项目本身的编译JDK版本。

内容的提问来源于stack exchange,提问作者Chris van Darg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:32:42