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

Ionic Cordova构建Android时JDK版本兼容问题求助

问题描述

使用ionic cordova build android生成Android构建包时遇到以下问题:

当前环境配置

  • gradle 7.4.2
  • cordova-android 10.1.2
  • jdk 11.0.19
  • SDK 31及build-tools 31.0.0(已从30.0.3复制dx和dx.jar)

具体故障

  1. 执行ionic cordova requirements时触发错误:

Requirements check results for android:
Java JDK: installed 11.0.19
Android SDK: installed true
Android target: not installed
Command failed with exit code 1: avdmanager list target
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
at com.android.repository.api.SchemaModule$SchemaModuleVersion.(SchemaModule.java:156)
at com.android.repository.api.SchemaModule.(SchemaModule.java:75)
at com.android.sdklib.repository.AndroidSdkHandler.(AndroidSdkHandler.java:81)
at com.android.sdklib.tool.AvdManagerCli.run(AvdManagerCli.java:213)
at com.android.sdklib.tool.AvdManagerCli.main(AvdManagerCli.java:200)
Caused by: java.lang.ClassNotFoundException: javax/xml/bind/annotation/XmlSchema
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 5 more
Gradle: installed /opt/gradle/gradle-7.4.2/bin/gradle

  1. 切换至JDK8时,ionic cordova requirements检测正常,但构建SDK31版本会缺失依赖库;直接执行gradle bundleRelease可成功构建SDK31的签名APK并正常运行,然而ionic cordova build android仍无法正常工作。
解决方案

1. 修复JDK11下Avdmanager的依赖缺失问题

JDK11移除了javax.xml.bind相关包,旧版Avdmanager依赖该包,可通过以下两种方式解决:

  • 修改Avdmanager启动脚本
    找到SDK目录下的tools/bin/avdmanager脚本,修改DEFAULT_JVM_OPTS行,添加JAXB适配参数:

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" "-XX:+IgnoreUnrecognizedVMOptions" "--add-modules=java.se.ee" "--add-opens=java.base/java.lang=ALL-UNNAMED" "--add-opens=java.base/java.io=ALL-UNNAMED" "--add-opens=java.base/java.util=ALL-UNNAMED" "--add-opens=java.base/java.util.concurrent=ALL-UNNAMED" "--add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED"'
    

    Windows系统则修改avdmanager.bat中的set DEFAULT_JVM_OPTS部分,添加相同参数。

  • 升级SDK命令行工具
    弃用旧的tools目录工具,改用ANDROID_SDK_ROOT/cmdline-tools/latest/bin下的新版本工具,将该路径加入PATH替换原tools/bin。新版本cmdline-tools已适配JDK11,不会出现JAXB缺失问题。

2. 调整Cordova构建配置适配JDK11+SDK31

虽然直接用gradle bundleRelease可成功,但需调整Cordova的构建脚本:

  • 修改项目gradle配置
    打开项目platforms/android/build.gradle文件,添加以下配置:

    android {
        compileSdkVersion 31
        buildToolsVersion "31.0.0"
    
        defaultConfig {
            targetSdkVersion 31
        }
    
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_11
            targetCompatibility JavaVersion.VERSION_11
        }
    }
    
    dependencies {
        implementation 'javax.xml.bind:jaxb-api:2.3.1'
        implementation 'com.sun.xml.bind:jaxb-core:2.3.0.1'
        implementation 'com.sun.xml.bind:jaxb-impl:2.3.2'
    }
    
  • 校验环境变量
    确保JAVA_HOME指向JDK11,ANDROID_SDK_ROOT路径正确,PATH包含cmdline-tools/latest/bin、platform-tools、gradle/bin。

3. 老旧项目兼容替代方案

若上述修改仍有问题,可尝试:

  • 分环境切换JDK:用JDK8执行ionic cordova requirements检测,构建前临时切换至JDK11:
    export JAVA_HOME=/path/to/jdk11 && ionic cordova build android --release
    
  • 升级cordova-android至11.x版本,新版本对JDK11和SDK31兼容性更好,但需确认老旧插件是否适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:15:38