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时追加参数:
也可以修改Cordova的构建逻辑,比如编辑java --add-modules java.xml.bind -jar $ANDROID_SDK_ROOT/cmdline-tools/latest/lib/apkanalyzer.jar manifest target-sdk /path/to/your/apkplatforms/android/cordova/lib/builders/GradleBuilder.js中的apkanalyzer调用代码,注入该参数。
- 方案一:切换到Java 8环境。Android构建工具对Java 8兼容性最佳,用
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" } } }
- 直接执行Gradle命令时,在末尾追加参数:
内容的提问来源于stack exchange,提问作者Janno
相关产品推荐
相关产品推荐

