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

多版本Java环境下Android SDK工具运行异常的解决咨询

解决Arch Linux下Android SDK工具Java版本兼容问题

问题背景

我的Arch Linux笔记本上安装了OracleJDK 8、9和10版本。使用Java 9或10运行avdmanager时出现如下错误:

% avdmanager list device :( 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.sdklib.tool.AvdManagerCli.run(AvdManagerCli.java:213) at com.android.sdklib.tool.AvdManagerCli.main(AvdManagerCli.java:200) Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499) ... 5 more

但在Java 8环境下avdmanager可正常运行;然而此时sdkmanager等其他SDK工具又无法运行,报错如下:

% sdkmanager --update Error: Could not find or load main class java.se.ee

使用的是Android SDK 26.1.1,该如何解决这一问题?

问题分析

这个冲突的核心是旧版Android SDK工具(26.1.1)对Java版本的兼容性适配不足:

  • Java 9及以后的版本移除了javax.xml.bind相关的JAXB模块,而avdmanager依赖这个模块,直接运行就会触发NoClassDefFoundError;
  • 但sdkmanager在Java 8环境下无法识别java.se.ee模块,导致启动失败。

可行解决方案

针对Arch Linux环境,这里提供两种实用的解决方法:

方法一:修改avdmanager脚本添加兼容参数

直接给avdmanager的启动命令加上Java 9+需要的模块引入参数,这样就能在Java 9/10环境下正常运行它,同时sdkmanager也能正常工作:

  1. 找到avdmanager的脚本文件,通常路径是$ANDROID_SDK_ROOT/tools/bin/avdmanager(替换成你实际的SDK根目录);
  2. 打开脚本,找到执行Java命令的行,类似:
    exec "$JAVACMD" $JAVA_OPTS "$@"
    
  3. 修改为:
    exec "$JAVACMD" $JAVA_OPTS --add-modules java.xml.bind "$@"
    

保存后,你就可以用Java 9/10同时正常运行avdmanager和sdkmanager了。

方法二:利用archlinux-java切换Java版本适配不同工具

Arch Linux自带的archlinux-java工具可以快速切换系统默认Java版本,分别适配不同的SDK工具:

  • 运行avdmanager时,切换到Java 8:
    sudo archlinux-java set java-8-oracle
    avdmanager list device
    
  • 运行sdkmanager时,切换回Java 9或10:
    sudo archlinux-java set java-9-oracle # 或者java-10-oracle,根据你安装的版本选择
    sdkmanager --update
    

这种方法不需要修改任何脚本,缺点是每次切换工具都需要手动执行版本切换命令。

额外建议

如果条件允许,升级你的Android SDK工具到26.1.1之后的版本(比如28.0.3及以上),新版工具已经完全适配了Java 9+的环境,不需要任何额外调整就能正常运行所有SDK工具,这是最一劳永逸的解决方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:23:32