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

Quasar通过Cordova构建Android时Gradle及apkanalyzer报错求助

问题:Quasar+Cordova打包Android时的Gradle与apkanalyzer报错
  • 环境:M1芯片MacOS
  • 现状:已解决Java/Android版本不匹配问题,当前执行apkanalyzer时触发javax.xml.bind.annotation.XmlSchema类找不到的错误,同时需要了解--warning-mode all选项的用法

报错日志

检查Java JDK和Android SDK版本
ANDROID_SDK_ROOT=/Users/jannofleischer/Library/Android/sdk (推荐设置)
ANDROID_HOME=/Users/jannofleischer/Library/Android/sdk (已废弃)
使用Android SDK: /Users/jannofleischer/Library/Android/sdk
子项目路径: CordovaLib
子项目路径: app
警告: 将新命名空间 http://schemas.android.com/repository/android/common/02 映射到旧命名空间 http://schemas.android.com/repository/android/common/01
警告: 将新命名空间 http://schemas.android.com/repository/android/generic/02 映射到旧命名空间 http://schemas.android.com/repository/android/generic/01
警告: 将新命名空间 http://schemas.android.com/sdk/android/repo/addon2/02 映射到旧命名空间 http://schemas.android.com/sdk/android/repo/addon2/01
警告: 将新命名空间 http://schemas.android.com/sdk/android/repo/addon2/03 映射到旧命名空间 http://schemas.android.com/sdk/android/repo/addon2/01
警告: 将新命名空间 http://schemas.android.com/sdk/android/repo/repository2/02 映射到旧命名空间 http://schemas.android.com/sdk/android/repo/repository2/01
警告: 将新命名空间 http://schemas.android.com/sdk/android/repo/repository2/03 映射到旧命名空间 http://schemas.android.com/sdk/android/repo/repository2/01
警告: 将新命名空间 http://schemas.android.com/sdk/android/repo/sys-img2/03 映射到旧命名空间 http://schemas.android.com/sdk/android/repo/sys-img2/01
警告: 将新命名空间 http://schemas.android.com/sdk/android/repo/sys-img2/02 映射到旧命名空间 http://schemas.android.com/sdk/android/repo/sys-img2/01
警告: 将新命名空间 http://schemas.android.com/repository/android/common/02 映射到旧命名空间 http://schemas.android.com/repository/android/common/01
警告: 将新命名空间 http://schemas.android.com/repository/android/generic/02 映射到旧命名空间 http://schemas.android.com/repository/android/generic/01
警告: 将新命名空间 http://schemas.android.com/sdk/android/repo/addon2/02 映射到旧命名空间 http://schemas.android.com/sdk/android/repo/addon2/01
警告: 将新命名空间 http://schemas.android.com/sdk/android/repo/addon2/03 映射到旧命名空间 http://schemas.android.com/sdk/android/repo/addon2/01
警告: 将新命名空间 http://schemas.android.com/sdk/android/repo/repository2/02 映射到旧命名空间 http://schemas.android.com/sdk/android/repo/repository2/01
警告: 将新命名空间 http://schemas.android.com/sdk/android/repo/repository2/03 映射到旧命名空间 http://schemas.android.com/sdk/android/repo/repository2/01
警告: 将新命名空间 http://schemas.android.com/sdk/android/repo/sys-img2/03 映射到旧命名空间 http://schemas.android.com/sdk/android/repo/sys-img2/01
警告: 将新命名空间 http://schemas.android.com/sdk/android/repo/sys-img2/02 映射到旧命名空间 http://schemas.android.com/sdk/android/repo/sys-img2/01
警告: 意外元素 (URI:"", 本地:"base-extension")。预期元素为 <{}codename>,<{}layoutlib>,<{}api-level>

构建中使用了已废弃的Gradle特性,无法兼容Gradle 8.0。

你可以使用 '--warning-mode all' 查看具体的废弃警告,判断这些警告来自你的脚本还是插件。

BUILD SUCCESSFUL in 572ms
48个可执行任务: 48个已最新
已构建以下apk文件: 
    /Users/jannofleischer/rubbellose/src-cordova/platforms/android/app/build/outputs/apk/debug/app-debug.apk
检查Java JDK和Android SDK版本
ANDROID_SDK_ROOT=/Users/jannofleischer/Library/Android/sdk (推荐设置)
ANDROID_HOME=/Users/jannofleischer/Library/Android/sdk (已废弃)
使用Android SDK: /Users/jannofleischer/Library/Android/sdk
命令执行失败,退出码1: apkanalyzer manifest target-sdk /Users/jannofleischer/rubbellose/src-cordova/platforms/android/app/build/outputs/apk/debug/app-debug.apk
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
    at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
    at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
    at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
    at com.android.tools.apk.analyzer.ApkAnalyzerCli.getAaptInvokerFromSdk(ApkAnalyzerCli.java:277)
    at com.android.tools.apk.analyzer.ApkAnalyzerCli.main(ApkAnalyzerCli.java:129)
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

 App • 命令 "cordova" 执行失败,退出码: 1
 App • 已更新Cordova config.xml

 App • ⚠️   失败  Cordova CLI执行失败

问题原因与解决方法

1. javax.xml.bind.annotation.XmlSchema 找不到的问题

  • 原因:你使用的是Java 9或更高版本,JAXB(XML绑定架构)从Java 9开始不再默认包含在JDK中,而apkanalyzer依赖该组件,因此触发类找不到的错误。
  • 解决:
    • 方案一:切换到Java 8环境。Android构建工具对Java 8兼容性最佳,用java -version确认当前版本,再通过jenv或MacOS自带的jdk-select工具切换到Java 8即可。
    • 方案二:若必须使用Java 9+,需给apkanalyzer添加JAXB模块参数。可以直接在终端执行apkanalyzer时追加参数:
      java --add-modules java.xml.bind -jar $ANDROID_SDK_ROOT/cmdline-tools/latest/lib/apkanalyzer.jar manifest target-sdk /path/to/your/apk
      
      也可以修改Cordova的构建逻辑,比如编辑platforms/android/cordova/lib/builders/GradleBuilder.js中的apkanalyzer调用代码,注入该参数。

2. --warning-mode all 的用法

该参数是Gradle的命令行选项,用于显示所有废弃警告,方便定位哪些旧特性会影响后续版本升级。

  • 使用方式:
    • 直接执行Gradle命令时,在末尾追加参数:
      ./gradlew build --warning-mode all
      
    • 通过Quasar/Cordova构建时,用--gradleArg将参数传递给Gradle:
      quasar build -m cordova -T android -- --gradleArg="--warning-mode all"
      
    • 也可以直接修改platforms/android/build.gradle文件,添加配置:
      allprojects {
          gradle.projectsEvaluated {
              tasks.withType(JavaCompile) {
                  options.compilerArgs << "--warning-mode all"
              }
          }
      }
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:01:05