解決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
完成
留言