解決Flutter安裝在Windows上的Android License status unknown(NoClassDefFoundError)問題

基本安裝好flutter使用flutter doctor檢測系統,其中Android SDK部分一直有問題
Android License status unknown

從下面這個討論串得知也有人遭遇相同問題

跟隨討論串已確認是sdkmanager的問題
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:582)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
        ... 5 more

問題根因:
我們在系統環境變數設定了JAVA_HOME指定到Java9以上版本,導致sdkmanager執行失敗。

解法:
把JAVA_HOME改掉,但是因為我其他開發工具會用Java9,所以只能從sdkmanager本身下手,以下採取討論串後面直接修改sdkmanager的方法。

我們修改sdkmanager.bat,位置在: C:\Users\{使用者名稱}\AppData\Local\Android\Sdk\tools\bin\sdkmanager.bat,將JAVA_HOME變數部分改成Android Studio內建的Java位置"C:/Program Files/Android/Android Studio/jre"

修改如下:
:findJavaFromJavaHome
@rem set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_HOME=C:/Program Files/Android/Android Studio/jre
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto init

修改後
執行一下sdkmanager --update確認沒有運行錯誤

使用下面指令同意各項協議文件取得授權
flutter doctor --android-licenses

再執行flutter doctor確認Android License status unknown已解決
flutter doctor

完成

留言