Fix Flutter Doctor Android Licenses (Java v11 + Ubuntu 18)

fix flutter doctor android licenses java v11

Hari ini saya membuka Visual Studio Code untuk melanjutkan proyek aplikasi android berbasis Flutter (laptop saya menggunakan Ubuntu 18). Muncul notifikasi untuk memperbaharui versi Dart, maka saya ijinkan. Ternyata proses tersebut juga memperbaharui Java SDK menjadi v11, dimana saya membutuhkan v8 untuk menjalankan flutter. Setelah proses selesai berikut error yang muncul:

X Android license status unknown.

Biasanya untuk menerima persetujuan semua lisensi dari SDK Manager kita cukup menjalankan perintah berikut, tapi hasilnya juga error.

$ flutter doctor --android-licenses

A newer version of the Android SDK is required. To update, run:

/path/android-sdk/tools/bin/sdkmanager --update

Sekarang kita diminta untuk memperbaharui sdkmanager tetapi muncul error yang lainnya.

$ /path/android-sdk/tools/bin/sdkmanager --update
 Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
     at com.android.repository.api.SchemaModule$SchemaModuleVersion.(SchemaModule.java:156)
     at com.android.repository.api.SchemaModule.(SchemaModule.java:75)
     at com.android.sdklib.repository.AndroidSdkHandler.(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

Solusi untuk permasalahan tersebut adalah menggunakan Java SDK v8 dan dijadikan sebagai versi default. Lakukan langkah berikut

sudo apt-get install openjdk-8-jre
sudo update-alternatives --config java

Lalu pilih angka yang menunjukkan Java v8 lalu tekan enter (pada laptop saya v8 ditunjukkan dengan nomor 2). Hasilnya sebagai berikut.

$ sudo update-alternatives --config java
 There are 2 choices for the alternative java (providing /usr/bin/java).
   Selection    Path                                            Priority   Status
 0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1101      auto mode
 1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1101      manual mode
 2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode 
 Press  to keep the current choice[*], or type selection number: 2   
 update-alternatives: using /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java to provide /usr/bin/java (java) in manual mode

Sekarang pastikan Java SDK anda sudah berganti menjadi v8 dengan perintah berikut.

$ java -version
 openjdk version "1.8.0_222"
 OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~18.04.1-b10)
 OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

Sekarang jalankan lagi perintah /path/android-sdk/tools/bin/sdkmanager --update. Apabila terdapat error Error: Could not find or load main class java.se.ee. Maka jalankan perintah berikut terlebih dahulu unset JAVA_OPTS, lalu update sdkmanager lagi.

Pada tahap ini harusnya flutter anda sudah berfungsi kembali seperti biasanya. Jalankan perintah flutter doctor untuk memastikannya. Hasilnya harus tidak ada error lagi sama sekali.

$ flutter doctor
 Doctor summary (to see all details, run flutter doctor -v):
 [✓] Flutter (Channel stable, v1.5.4-hotfix.2, on Linux, locale en_US.UTF-8)
 [✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
 [!] Android Studio (not installed)
 [✓] VS Code (version 1.38.1)
 [✓] Connected device (1 available)
 ! Doctor found issues in 1 category.

Referensi:
askubuntu.com/questions/1133216/downgrading-java-11-to-java-8
stackoverflow.com/questions/54287619/could-not-find-or-load-main-class-java-se-ee-while-running-sdkmanager-licenc

Leave a Comment