Siu*_*ji- 79 java android android-sdk-tools android-sdk-manager java-9
我下载并安装了:
配置PATH变量后,我尝试运行sdkmanager,它取代了android管理SDK组件的命令.但是,它失败了,如下所示:
$ 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
Run Code Online (Sandbox Code Playgroud)
这是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)
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何修复它而不回到Java 8?
Siu*_*ji- 140
借助这个答案,我成功地解决了这个问题.
我们将要应用修复程序sdkmanager.这是一个shell脚本.它坐落在$android_sdk/tools/bin,在这里$android_sdk是您解压缩的Android SDK.
sdkmanager在您喜欢的编辑器中打开.找到设置DEFAULT_JVM_OPTS变量的行.在我的副本中,它位于第31行:
DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"'
Run Code Online (Sandbox Code Playgroud)将以下选项附加到变量:-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee.请注意报价.在我的副本中,该行变为:
DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
Run Code Online (Sandbox Code Playgroud)结果如下:
$ 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
...
Run Code Online (Sandbox Code Playgroud)
你好!有用!
请注意,您可能需要在运行后再次应用上面的修复程序sdkmanager --update,因为sdkmanager如果tools更新程序包,可能会覆盖shell脚本.
Nat*_*ram 35
已接受的答案截至 2019 年 2 月已过时。这是一个在sdkmanager迁移到更新版本的 Java之前将有效的答案。但到那时,你就不会再有这个问题了。
OpenJDK的10是由OpenJDK的11 superseeded,它没有实现
java.se.ee在所有。这意味着添加的黑客--add-modules java.se.ee不再做任何事情。这也意味着 OpenJDK 10 将自动从您的系统中删除,并在您下次更新时替换为 OpenJDK 11,如果您的更新配置正确。
sdkmanager通过将JAVA_HOMEinside 设置sdkmanager为 Java 8 安装来修改以使用 Java 8 。默认情况下,它位于~/Android/Sdk/tools/bin/sdkmanager。Run Code Online (Sandbox Code Playgroud)# 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'Run Code Online (Sandbox Code Playgroud)@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.Run Code Online (Sandbox Code Playgroud)@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\.."现在我有一些管道要修理。
bem*_*mpa 33
您可以使用SDKMANAGER_OPTS设置sdkmanager选项.
例:
export SDKMANAGER_OPTS="--add-modules java.se.ee"
sdkmanager --list
Run Code Online (Sandbox Code Playgroud)
aar*_*rkk 30
通过 Android Studio 在 SDK 管理器中安装命令行工具。
然后从cmdline-tools目录(而不是tools目录)运行 SDK Manager 的版本。
$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --version # GOOD!
$ANDROID_HOME/tools/bin/sdkmanager --version # BAD! (java.lang.NoClassDefFoundError)
Run Code Online (Sandbox Code Playgroud)
小智 15
我只是添加“Android SDK 命令行工具(最新)”,这解决了我的问题。
最初来自这里: https: //github.com/flutter/flutter/issues/56778#issuecomment-742639036
Sag*_*tri 12
对于Windows,如果没有任何作用,请尝试这样:
sdkmanager.bat用记事本打开.
找到以下行:
%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SDKMANAGER_OPTS%
加 --add-modules java.xml.bind
修改后的行应如下所示:
%JAVA_EXE%" %DEFAULT_JVM_OPTS% --add-modules java.xml.bind %JAVA_OPTS% %SDKMANAGER_OPTS%
tho*_*ris 11
系统中装有Java 11时,提供的解决方案无效。
-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee or在Mac OS上,此--add-modules java.xml.bind不适用于Java 11。
因此,您必须从此处将Java版本降级为版本8:http : //www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
/usr/libexec/java_home -V
Run Code Online (Sandbox Code Playgroud)
export JAVA_HOME=$(/usr/libexec/java_home -v 11)
Run Code Online (Sandbox Code Playgroud)
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
Run Code Online (Sandbox Code Playgroud)
然后去
cd ~/Library/Android/sdk/tools/bin
Run Code Online (Sandbox Code Playgroud)
和
./sdkmanager --licenses
Run Code Online (Sandbox Code Playgroud)
在我们阅读之前的评论时,发生此错误是因为当前的SDK版本与最新的Java版本不兼容:9和10.
因此,要解决此问题,您可以将Java版本降级到Java 8,或者作为解决方法,您可以在终端上导出以下选项:
Linux的:
export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
Run Code Online (Sandbox Code Playgroud)
Windows:
set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
Run Code Online (Sandbox Code Playgroud)
这将解决此错误 sdkmanager
并使其永久保存您可以导出JAVA_OPTS在您的个人资料文件在Linux( .zshrc,.bashrc等)或添加到环境变量永久在Windows上.
小智 9
正如一些人之前提到的,这很可能是一个更简单的问题,因为一个 Java 安装优先于另一个。
在我的情况下,Java 8 被默认的较新 Java 掩盖了。
我安装了 Java 8:
sudo apt-get install openjdk-8-jdk
Run Code Online (Sandbox Code Playgroud)
然后我将安装的 java 更新为新的默认值:
sudo update-alternatives --config java
Run Code Online (Sandbox Code Playgroud)
其中我选择了java 8的id号。
完成这些(非常简单的)步骤后,我可以毫无错误地运行 sdkmanager。
希望这可以帮助某人!
Android Tools仍然与JDK 9或10不兼容。您需要安装JDK 8,或者,如果需要多个Java版本,请确保系统范围的Java主页指向JDK 8。
此处有更多详细信息:如何将Unity 2017.4配置为以Android为目标并避免在OSX上构建失败?
小智 5
我很难找到这个解决方案,只需添加工作sdkmanager.bat
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem sdkmanager startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%..
@rem Add default JVM options here. You can also use JAVA_OPTS and SDKMANAGER_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.."
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\lib\sdklib-25.3.1.jar;%APP_HOME%\lib\layoutlib-api-25.3.1.jar;%APP_HOME%\lib\dvlib-25.3.1.jar;%APP_HOME%\lib\repository-25.3.1.jar;%APP_HOME%\lib\gson-2.2.4.jar;%APP_HOME%\lib\commons-compress-1.8.1.jar;%APP_HOME%\lib\httpclient-4.1.1.jar;%APP_HOME%\lib\httpmime-4.1.jar;%APP_HOME%\lib\common-25.3.1.jar;%APP_HOME%\lib\kxml2-2.3.0.jar;%APP_HOME%\lib\annotations-25.3.1.jar;%APP_HOME%\lib\annotations-12.0.jar;%APP_HOME%\lib\jimfs-1.1.jar;%APP_HOME%\lib\httpcore-4.1.jar;%APP_HOME%\lib\commons-logging-1.1.1.jar;%APP_HOME%\lib\commons-codec-1.4.jar;%APP_HOME%\lib\guava-18.0.jar
@rem Execute sdkmanager
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee %JAVA_OPTS% %SDKMANAGER_OPTS% -classpath "%CLASSPATH%" com.android.sdklib.tool.SdkManagerCli %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable SDKMANAGER_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%SDKMANAGER_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
Run Code Online (Sandbox Code Playgroud)
更新2019-10:
如问题追踪器所述,Google正在开发一个新的SDK工具版本,该版本可在当前JVM(9+)上运行!
您已经可以在Android Studio内部的canary通道上下载并使用新的Android SDK命令行工具(1.0.0 rc1),也可以通过从Google服务器手动下载它们:
对于最新版本,请检查repository.xml中的URL 。
如果您手动打开命令行工具的包装,请注意将其放在您的子文件夹中$ANDROID_HOME(例如$ANDROID_HOME/cmdline-tools/...)。
| 归档时间: |
|
| 查看次数: |
60524 次 |
| 最近记录: |