Apple Silicon Mac执行sdkmanager --list抛出NoClassDefFoundError如何解决
报错原因
该报错是因为Java 9及更高版本移除了默认包含的JAXB(Java Architecture for XML Binding)相关模块,而
sdkmanager依赖javax.xml.bind系列类库,你当前使用的OpenJDK 17属于高版本JDK,无法提供对应依赖,因此触发类找不到异常。
另外你现有.zshrc中还存在一处路径配置错误:cmdline-tools的路径应该配置到bin目录,而非直接指向sdkmanager可执行文件。
解决方案(优先推荐)
使用Android Studio自带的兼容JDK,无需额外安装第三方JDK,完全适配sdkmanager运行要求:
- 编辑
.zshrc文件,修改原有JDK和Android相关配置为以下内容:
# 注释或删除原有openjdk的PATH配置,添加Android Studio自带JDK的JAVA_HOME export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home" export PATH="$JAVA_HOME/bin:$PATH" export ANDROID_HOME=$HOME/Library/Android/sdk export PATH=$PATH:$ANDROID_HOME/emulator export PATH=$PATH:$ANDROID_HOME/tools export PATH=$PATH:$ANDROID_HOME/tools/bin export PATH=$PATH:$ANDROID_HOME/platform-tools # 修正cmdline-tools的路径,只到bin目录即可 export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
- 执行命令让配置生效:
source ~/.zshrc - 验证配置是否生效:
- 执行
java -version,确认输出的JDK版本为Android Studio自带的JetBrains Runtime版本 - 执行
sdkmanager --list,确认可以正常输出SDK版本列表,无报错
- 执行
备选解决方案(使用OpenJDK 8)
如果你不想使用Android Studio自带JDK,可以安装自带JAXB模块的OpenJDK 8:
- 执行brew命令安装OpenJDK 8:
brew install openjdk@8 - 修改
.zshrc中的JAVA_HOME配置为:
export JAVA_HOME="/opt/homebrew/opt/openjdk@8/libexec/openjdk.jdk/Contents/Home" export PATH="$JAVA_HOME/bin:$PATH"
- 同样执行
source ~/.zshrc生效后再验证sdkmanager命令即可
内容的提问来源于stack exchange,提问作者Ismeet
相关产品推荐
相关产品推荐

