运行sdkmanager接受Android许可证报NoClassDefFoundError如何解决?
错误产生原因
你当前使用的Java 11版本与旧版Android sdkmanager 工具的依赖不兼容:
旧版sdkmanager(位于Android SDK的tools/bin目录下)开发时依赖Java 8内置的JAXB(Java Architecture for XML Binding)模块,而Java 9及之后的版本已经将JAXB等Java EE相关模块从默认JDK发行包中移除,导致sdkmanager运行时找不到javax.xml.bind.annotation.XmlSchema等必要类,触发类不存在异常。
解决方案
推荐按优先级选择以下方案:
- 方案1:临时切换Java 8运行
sdkmanager
本地安装OpenJDK 8或Oracle JDK 8,执行许可命令前临时指定JAVA_HOME指向Java 8的安装路径即可:
Windows CMD环境执行:
Windows PowerShell环境执行:set JAVA_HOME=C:\你的JDK8安装路径 C:\Android\Sdk\tools\bin\sdkmanager --sdk_root=${ANDROID_HOME} --licenses$env:JAVA_HOME="C:\你的JDK8安装路径" C:\Android\Sdk\tools\bin\sdkmanager --sdk_root=${ANDROID_HOME} --licenses - 方案2:使用新版Android SDK命令行工具
旧版tools/bin下的sdkmanager已经被官方废弃,你可以打开Android Studio的SDK Manager,在「SDK Tools」标签页勾选安装「Android SDK Command-line Tools (latest)」,新版工具安装后位于${ANDROID_HOME}/cmdline-tools/latest/bin/目录,原生兼容Java 11及更高版本,直接调用新版工具执行命令即可:C:\Android\Sdk\cmdline-tools\latest\bin\sdkmanager --licenses - 方案3(仅临时应急使用):给Java 11添加JAXB启动参数
找到sdkmanager的启动脚本,在Java执行命令行中添加--add-modules java.xml.bind参数,手动引入缺失的JAXB模块,该方案兼容性差,后续可能触发其他依赖问题,不建议长期使用。
内容的提问来源于stack exchange,提问作者Jhonata Bonadio
相关产品推荐
相关产品推荐

