android: sdkmanagerを起動すると、NoClassDefFoundErrorで起動できない

ターミナルでsdkmanagerを起動すると、NoClassDefFoundErrorで起動しません。avdmanagerも同様です。

Ubuntu 18.04標準のJava 11ではなく、Android Studio同梱のJava 1.8をPATHに設定して、解決しました。

sdkmanagerでNoClassDefFoundError

Ubuntu 18.04を新規インストールしてから、Android Studioをsnapでインストールし、Android SDKは既定の ~/Android/Sdk/ にインストールしました。

ターミナルでsdkmanagerを起動すると、NoClassDefFoundErrorで起動しません。avdmanagerも同様です。

$ sdkmanager --version 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) Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ... 5 more

sdkmanagerの位置を確認します。

$ which sdkmanager /home/aoki/Android/Sdk/tools/bin/sdkmanager

試しに絶対パスで sdkmanager を起動してみましたが、やはりNoClassDefFoundErrorでした。

$ /home/aoki/Android/Sdk/tools/bin/sdkmanager --version Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema (省略)

javaバージョンは、Java 11でした。

$ java -version openjdk version "11.0.6" 2020-01-14 OpenJDK Runtime Environment (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1) OpenJDK 64-Bit Server VM (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1, mixed mode, sharing)

javaの位置を調べると、/usr/lib/jvm/java-11-openjdk-amd64/bin/java でした。

$ which java /usr/bin/java $ ls -l /usr/bin/java lrwxrwxrwx 1 root root 22 6月 24 2019 /usr/bin/java -> /etc/alternatives/java $ ls -l /etc/alternatives/java lrwxrwxrwx 1 root root 43 6月 24 2019 /etc/alternatives/java -> /usr/lib/jvm/java-11-openjdk-amd64/bin/java $ ls -l /usr/lib/jvm/java-11-openjdk-amd64/bin/java -rwxr-xr-x 1 root root 10304 1月 16 00:14 /usr/lib/jvm/java-11-openjdk-amd64/bin/java $ /usr/lib/jvm/java-11-openjdk-amd64/bin/java -version openjdk version "11.0.6" 2020-01-14 OpenJDK Runtime Environment (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1)

解決方法

Ubuntu 18.04標準のJava 11ではなく、Android Studio同梱のJava 1.8をPATHに設定します。

Android Studioのインストール先に合わせて、読み替えて下さい。次の例は、snapでAndroid Studioをインストールした場合です。

Android SDKの下にjreが見つからないよ?

SDKのほうではなく、Android Studioの下を探してみて

まず、Android Studio同梱のJavaのバージョンを確認します。Java 1.8です。

$ /snap/android-studio/current/android-studio/jre/bin/java -version openjdk version "1.8.0_212-release" OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b4-5784211) OpenJDK 64-Bit Server VM (build 25.212-b4-5784211, mixed mode)

~/.bashrc の最後に、次の2行を追加します。

export JAVA_HOME=/snap/android-studio/current/android-studio/jre export PATH=$JAVA_HOME/bin:$PATH

編集後の .bashrc を適用するために、ターミナルを閉じて、再度ターミナルを開いてください。

ターミナルを閉じずにsourceコマンドで .bashrcを適用できますが、PATHの値がどんどん長くなってしまいます。再度ターミナルを開いたほうが確実です。

$ source ~/.bashrc #または(ドット、スペース、~/.bashrc) $ . ~/.bashrc

javaバージョンと位置を確認します。

$ java -version openjdk version "1.8.0_212-release" OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b4-5784211) OpenJDK 64-Bit Server VM (build 25.212-b4-5784211, mixed mode) $ which java /snap/android-studio/current/android-studio/jre/bin/java

無事、sdkmanagerが起動しました。

$ sdkmanager --version 26.1.1
タイトルとURLをコピーしました