私はダウンロードしてインストールしました:
jdk-9.0.1_osx-x64_bin.dmg
) はこちら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に戻らずにそれを修正する方法を知っていますか?
この答え の助けを借りて、私は問題をうまく解決しました。
sdkmanager
に修正を加えます。これはシェルスクリプトです。これは$Android_sdk/tools/bin
にあります。ここで$Android_sdk
はAndroid SDKを解凍した場所です。
sdkmanager
を開きます。DEFAULT_JVM_OPTS
変数を設定する行を見つけます。私のコピーでは、それは31行目にあります。
DEFAULT_JVM_OPTS='"-Dcom.Android.sdklib.toolsdir=$APP_HOME"'
次のオプションを変数に追加します:-XX:+IgnoreUnrecognizedVMOptions --add-modules Java.se.ee
。 引用符に注意してください。私のコピーでは、行は次のようになります。
DEFAULT_JVM_OPTS='"-Dcom.Android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules Java.se.ee'
これが結果です。
$ 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
...
ほら!できます!
sdkmanager
パッケージが更新されるとtools
シェルスクリプトがオーバーライドされる可能性があるため、sdkmanager --update
を実行した後に上記の修正を再度適用する必要があるかもしれません。
SDKMANAGER_OPTSを使用してsdkmanagerオプションを設定できます。
例:
export SDKMANAGER_OPTS="--add-modules Java.se.ee"
sdkmanager --list
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%
これまでのコメントを読んでいるように、このエラーは現在のSDKバージョンが最新のJavaバージョン(9と10)と互換性がないために発生しています。
それで、それを解決するために、あなたはあなたのJavaバージョンをJava 8にダウングレードすることができますまたはあなたの端末上で次のオプションをエクスポートすることができます回避策として:
Linux:
export Java_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules Java.se.ee'
Windows:
set Java_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules Java.se.ee'
これはsdkmanager
のためにこのエラーを解決します
それを恒久的に保存するためには、Linux上のプロファイルファイル(.zshrc
、.bashrc
など)にあるJava_OPTSをエクスポートするか、またはWindows上で恒久的に環境変数として追加することができます。
ps。これは、Java EEモジュールがないJava 11以降では機能しません。このオプションは、Javaのバージョンを下げるか、Flutter の更新 を待つことをお勧めします。
私はこの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
AndroidツールはまだJDK 9または10と互換性がありません。JDK8をインストールする必要があります。複数のJavaバージョンが必要な場合は、システム全体のJavaホームがJDK 8を指すようにしてください。
詳細はこちら: AndroidをターゲットにしてOSXでのビルドエラーを回避するようにUnity 2017.4を設定するにはどうすればよいですか?
システムにJava 11がある場合、提供される解決策は無効です。
この-XX:+IgnoreUnrecognizedVMOptions --add-modules Java.se.ee or
-- add-modules Java.xml.bindは、Mac OS上のJava 11では動作しません。
そのため、ここからJavaバージョンをバージョン8にダウングレードする必要があります。 http://www.Oracle.com/technetwork/Java/javase/downloads/jdk8-downloads-2133151.html
/usr/libexec/Java_home -V
export Java_HOME=$(/usr/libexec/Java_home -v 11)
export Java_HOME=$(/usr/libexec/Java_home -v 1.8)
それから
cd ~/Library/Android/sdk/tools/bin
そして
./sdkmanager --licenses
https://adoptopenjdk.net は現在、バージョン8以降のJDKのすべてのディストリビューションをサポートしています。例えば https://adoptopenjdk.net/releases.html#x64_win
これが、私がどのようにJDKバージョン8をsdkmanagerなどで使用できたかの例です。 https://travis-ci.com/mmcc007/screenshots/builds/109365628
JDK 9(そして私は10、そしておそらく11、しかし12以上ではないと思います)では、sdkmanagerを動かすために次のように動くべきです:
export SDKMANAGER_OPTS="--add-modules Java.se.ee"
sdkmanager --list