使用 Java 9 运行 sdkmanager --list 失败

新手上路,请多包涵

我下载并安装:

  • 来自Oracle JDK( jdk-9.0.1_osx-x64_bin.dmg
  • 来自 Google Android SDK ( sdk-tools-darwin-3859397.zip )。

配置 PATH 变量后,我尝试运行 sdkmanager ,它取代了管理 SDK 组件的 android 命令。但是,它失败了,如下所示:

 $ sdkmanager --list
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.SdkManagerCli.main(SdkManagerCli.java:117)
    at com.android.sdklib.tool.SdkManagerCli.main(SdkManagerCli.java:93)
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:185)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
    ... 5 more

这是Java版本:

 $ java -version
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)

有谁知道如何在不回到 Java 8 的情况下修复它?

相关问题

警告

请注意,我在上面已经提到,回到 Java 8 或并行运行它 不是 我想要的。

原文由 Siu Ching Pong -Asuka Kenji- 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
1 个回答

这个答案 的帮助下,我成功地解决了这个问题。

我们将在 sdkmanager 中应用修复。它是一个 shell 脚本。它位于 $android_sdk/tools/bin ,其中 $android_sdk 是您解压 Android SDK 的位置。

  1. 在您喜欢的编辑器中打开 sdkmanager
  2. 找到设置 DEFAULT_JVM_OPTS 变量的行。在我的副本中,它位于第 31 行:
    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"'

  1. 将以下选项附加到变量: -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee请注意引号。 在我的副本中,该行变为:
    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

  1. 保存文件并退出编辑器。
  2. 再次运行命令。

这是结果:

 $ sdkmanager --list
Installed packages:
  Path    | Version | Description              | Location
  ------- | ------- | -------                  | -------
  tools   | 26.0.1  | Android SDK Tools 26.0.1 | tools/

Available Packages:
  Path                              | Version      | Description
  -------                           | -------      | -------
  add-ons;addon-g..._apis-google-15 | 3            | Google APIs
  add-ons;addon-g..._apis-google-16 | 4            | Google APIs
  add-ons;addon-g..._apis-google-17 | 4            | Google APIs
  add-ons;addon-g..._apis-google-18 | 4            | Google APIs
  add-ons;addon-g..._apis-google-19 | 20           | Google APIs
  add-ons;addon-g..._apis-google-21 | 1            | Google APIs
  add-ons;addon-g..._apis-google-22 | 1            | Google APIs
  add-ons;addon-g..._apis-google-23 | 1            | Google APIs
  add-ons;addon-g..._apis-google-24 | 1            | Google APIs
...

你好!有用!

-- 编辑:2017-11-07 –

请注意,您可能需要在运行后再次应用上述修复 sdkmanager --update ,因为 sdkmanager 如果 tools 程序包已更新,shell 脚本可能会被覆盖

相关答案

原文由 Siu Ching Pong -Asuka Kenji- 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题