💬
sdkmanager で jdk バージョン違いでこけるのを対処する
バージョン違いによる問題
jdk version9 以上の環境下で sdkmanager
を使用すると、sdkmanager が version8 までしか対応していないため、次のようなエラーが発生してしまいます。
そのため、sdkmanager が使用する jdk を version8 になるようにパスを指定して上げる必要があります。
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.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
解決策
jdk8 をインストールする
まずは jdk8をインストールします。(以下は Mac でのインストール方法です)
$ brew cask install adoptopenjdk8
上記のコマンドで/Library/Java/JavaVirtualMachines/
に jdk8
がインストールされますので、ここにパスを通します。
$ echo 'export ANDROID_JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home' >> ~/.bash_profile
$ source ~/.bash_profile
SDK Manager の使用する JDK を指定する
SKD Manager はデフォルトで JAPA_HOME
で指定されている JDK を見に行きますので、これを先ほどパスと通した環境変数へ置き換える必要があります。
SKD Manager の設定ファイルは /usr/local/share/android-sdk/tools/bin/sdkmanager
で、このシェルスクリプトを修正します。
# Determine the Java command to use to start the JVM.
の後にある "$JAVA_HOME"
を"$ANDROID_JAVA_HOME"
へ変更します。(# Increase the maximum file descriptors if we can.
の前までの全てを変更)
変更を保存して完了。
確認
JDK 9+ の動作と、sdkmanager の動作確認をします。
$ java --version
>>> java 14 2020-03-17
Java(TM) SE Runtime Environment (build 14+36-1461)
Java HotSpot(TM) 64-Bit Server VM (build 14+36-1461, mixed mode, sharing)
$ sdkmanager --version
>>> 26.1.1
以上になります。
Discussion