使用Cordova调用apkanalyzer时出现NoClassDefFoundError错误求助
问题核心
javax.xml.bind 模块在JDK9及以上版本中被移除,而apkanalyzer(Cordova用来分析APK的工具)依赖这个模块,所以虽然APK构建能成功,但执行cordova run android时,工具调用会触发类缺失错误。手动安装APK没问题是因为这个错误只出现在工具分析阶段,不影响APK本身的完整性。
解决方法
给apkanalyzer添加JVM参数
临时生效:终端执行export _JAVA_OPTIONS="--add-modules java.xml.bind",再运行cordova run android。
永久生效:把上面的export语句添加到~/.bashrc文件末尾,执行source ~/.bashrc刷新环境变量。补充JAXB依赖包
下载jaxb-api、jaxb-impl、jaxb-core、activation这几个jar包,放到你的Android SDK的tools/lib目录下(比如~/Android/Sdk/tools/lib),让apkanalyzer运行时能加载到缺失的类。调整Cordova Android平台版本
先移除当前安卓平台:cordova platform remove android
安装兼容性更好的版本(比如11.0.0):cordova platform add android@11.0.0
不同版本的Cordova Android对JDK和SDK的适配不同,这个版本大概率能避开该问题。更新SDK工具链
打开Android SDK Manager,把Build-Tools和Platform-Tools更新到与当前Cordova平台匹配的最新版本,避免工具版本不匹配引发的兼容性问题。
内容的提问来源于stack exchange,提问作者rain 183

