未能运行 sdkmanager --list with Java 9相关问题警告-- 编辑: 2017-11-07 --相关解答

我下载并安装了:

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

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

$ 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或并排运行它不是我想要的。


答案 1

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

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

  1. 在您最喜爱的编辑器中打开。sdkmanager
  2. 找到设置变量的行。在我的副本中,它位于第31行:DEFAULT_JVM_OPTS

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

    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
    
  4. 保存文件并退出编辑器。
  5. 再次运行该命令。

结果如下:

$ 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 --

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

相关解答


答案 2

截至2019年2月,接受的答案已过时。这是一个答案,在迁移到较新版本的Java之前将起作用。但到那时,您将不再有此问题。sdkmanager

OpenJDK 10 被 OpenJDK 11 取代,后者根本没有实现。这意味着添加的黑客不再做任何事情。这也意味着 OpenJDK 10 将自动从您的系统中删除,并在下次更新时替换为 OpenJDK 11,前提是您的更新配置正确。java.se.ee--add-modules java.se.ee

通过内部设置为 Java 8 安装来修改以使用 Java 8。默认情况下,它位于 。sdkmanagerJAVA_HOMEsdkmanager~/Android/Sdk/tools/bin/sdkmanager

# Add default JVM options here. You can also use JAVA_OPTS and SDKMANAGER_OPTS to pass JVM options $
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions'
@rem Add default JVM options here. You can also use JAVA_OPTS and SDKMANAGER_OPTS to pass JVM options to this script.
set JAVA_HOME="C:\ProgramData\scoop\apps\android-studio\current\jre"
set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.."

这样,您就可以在系统上继续使用健全且维护的Java版本,同时使用。sdkmanager

# Java
export JAVA_HOME=/usr/lib/jvm/default-java

现在我有一些管道要修理。


推荐