[英]Flutter.io Android License Status Unknown
>[!] Android toolchain - develop for Android devices (Android SDK 27.0.3)
>>• Android SDK a ..\Android\sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-27, build-tools 27.0.3
• Java binary at C:\Program Files\Android\Android Studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b02)
X Android license status unknown.
我在運行 Flutter 醫生時收到 Android SDK 錯誤,盡管我仍然可以在我的設備上構建/運行它。 我只是好奇如何解決這個問題。 我相信我已經下載了 Android SDK 的最新版本,不確定發生了什么,因為我上周沒有遇到這個問題。
##New Issues 在評論中進行了幾個可能的修復后,它導致了一個新問題。 我安裝了更新版本的 android sdk P、8 和 7 以及新的 jdk10。 顯然還不夠更新。
C:\Flutter\flutter>flutter doctor --android-licenses
A newer version of the Android SDK is required. To update, run:
C:\Users\tdmil\AppData\Local\Android\sdk\tools\bin\sdkmanager --update
C:\Flutter\flutter>C:\users\用戶名\appdata\local\android\sdk\tools\bin\sdkmanager.bat --update
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
錯誤:
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
發生的原因是當前的 SDK 版本與 Java 9 不兼容。
因此,要解決此問題,您可以將 Java 版本降級到 Java 8,或者使用一種變通方法,您可以在終端上導出以下選項:
Linux:
export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
窗戶:
set JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
為了讓它堅持下去,您可以在 Linux 上的配置文件( .zshrc
、 .bashrc
等)中導出 JAVA_OPTS 或在 Windows 上永久添加為環境。
然后,您可以輸入 flutter 或 sdkmanager 命令:
顫振:
flutter doctor --android-licenses
sdkmager :
sdkmanager --licenses
並在需要時鍵入 Y 以接受許可證。
附: 這不適用於沒有 Java EE 模塊的 Java 11/11+。 對於此選項是個好主意,請降級您的 Java 版本或等待 Flutter更新。
我寫這個是因為在安裝 flutter 時遇到了挫折......大多數問題都是由簡單的配置問題引起的。 請按照以下步驟解決您的問題。
第 1 步:ANDROID LICENSES --android-licenses,將解決大多數情況
既然你在這里,你已經遇到了 Android 工具鏈的“Android 許可證狀態未知”問題,許多人建議嘗試flutter doctor --android-licenses
。 如果你對所有配置都很好。 它應該要求是,然后按 y 和 Voila。 但是如果它顯示一個
找不到 Android sdkmanager 工具
(C\\Users\\__\\local\\Android\\sdk\\tools\\bin\\sdkmanager)
。 進入第二步
第 2 步:從 Android Studio 安裝 SDK Manager
打開您的 Android Studio , File-> settings->System settings(left tab) ->Android SDK,
轉到該頁面中的SDK Tool section
,取消選中隱藏過時的包,選擇Android SDL tools(obsolete)
並按應用。
它將安裝 SDK,您通過檢查此路徑是否存在
(C\\Users\\__\\local\\Android\\sdk\\tools\\bin\\sdkmanager)
第 3 步:重復 1
在新的命令行中安裝后重復步驟 1 檢查其是否有效,否則轉到步驟 4
第 4 步:sdkmanager --update
它會要求您更新 sdk,只需運行終端C\\Users\\__\\local\\Android\\sdk\\tools\\bin\\sdkmanager --update
。 如果它正在運行,那么它很酷。 讓它完成並重復步驟 1,否則如果它拋出一些異常,如java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
等, 這意味着您的java未安裝或版本不正確。 進入下一步
第 5步: JAVA 8.1 和 JAVA_HOME 路徑。
安裝 JAVA 8.1 並設置 JAVA_HOME 路徑。 確保它是8.1版本(注冊免費帳戶並從oracle下載8.1版本,記住11+以上不適用於flutter
注意:由yaniv maymon 提供:如果您的計算機上已經安裝了 Java 並且 sdkmanager --update 仍然無法正常工作。 轉到環境變量並將“JAVA_HOME”路徑更新到 jdk 文件夾。 然后退出命令提示符,再次打開並運行更新命令——
第 6 步:最后一步
正確安裝並設置好路徑后,在新終端運行C\\Users\\__\\local\\Android\\sdk\\tools\\bin\\sdkmanager --update
命令即可
步驟 7:重新運行 flutter doctor ,您可以看到它說運行命令flutter doctor --android-licenses
。 所以在終端中運行flutter doctor --android-licenses
並在詢問時按 y
以下是解決我的問題的步驟:
flutter doctor --android-licenses
y
接受,此過程可能會發生多次。 完成!我找到了這個必須使用 JDK 8 的解決方案(您現在需要一個帳戶才能下載!) - 使用 Android Studio 附帶的嵌入式 OpenJDK:
將此添加到您的~/.profile
或類似文件中:
# Use the JDK embedded with Android Studio for command-line builds
export JAVA_HOME='/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home'
通過gradlew
和任何其他表現良好的腳本進行命令行構建,然后將使用 Android Studio 2.2+ 附帶的 SDK 版本。
*我的 Mac 仍在使用默認的 Java 7。
這也是我的問題,與#16025相同
對於線程“main”中的異常 java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema 這個問題似乎通常發生在您之前安裝 Java 9 時。 順便說一句,它與 android-sdk 不兼容,如果仍然存在,請嘗試刪除 Java 9 JDK。
一般來說,JAXB API 被認為是 Java EE API,因此不再包含在 Java SE 9 的默認類路徑中。Java 9 引入了模塊的概念,默認情況下 java.se 聚合模塊在類中可用路徑(或者更確切地說,模塊路徑)。 顧名思義,java.se 聚合模塊不包括傳統上與 Java 6/7/8 捆綁在一起的 Java EE API。 幸運的是,JDK 6/7/8 中提供的這些 Java EE API 仍在 JDK 中,只是默認情況下它們不在類路徑中。 以下模塊中提供了額外的 Java EE API
如果您安裝了 Java9/10,解決方法
替換
DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"'
有了這個
DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
對於 Android 許可證狀態未知問題,我嘗試通過以下步驟解決:
轉到您的 Android SDK 位置 C:\\Users%user%\\AppData\\Local\\Android\\Sdk\\tools\\bin 或 ~/Library/Android/sdk/tools/bin
運行命令:./sdkmanager --license
參考文獻
無法使用 Java 9 運行 sdkmanager --list (Android SDK)
如何解決 Java 9 中的 java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
這是我的解決方案:
安裝 SDKMan
$ curl -s "https://get.sdkman.io" | bash
設置你的 bash_profile
$ source "$HOME/.sdkman/bin/sdkman-init.sh
$ source ~/.bash_profile
找到java sdk,選擇要安裝的版本
$ sdk ls java
$ sdk install java 8.0.192-zulu
復制您的顫振醫生警告消息以更新 sdkmanager
$ /Users/YourUserName/Library/Android/sdk/tools/bin/sdkmanager --update
1~4后重做
$ flutter doctor --android-licenses
GitHub 問題社區上提供的這一行解決了我的問題,這里只是為了幫助其他人。
@rem Execute sdkmanager
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% -XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee %JAVA_OPTS% %SDKMANAGER_OPTS% -classpath "%CLASSPATH%" com.android.sdklib.tool.sdkmanager.SdkManagerCli %CMD_LINE_ARGS%
所以這里是解決方案,打開您的 SDK 管理器,然后取消選中Hide Obsolete Packages
現在您將看到Android SDK Tools (Obsolete) 26.1.1
出現。 勾選那個包並點擊apply button
然后點擊確定按鈕。 它會下載sdk。 然后restart
安卓工作室
很好,現在如果你運行flutter doctor
,你應該得到如下的陽性結果
PS D:\Workplace\flutter_projects> flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, v1.12.13+hotfix.8, on Microsoft Windows [Version 10.0.18363.657], locale en-MY)
[√] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
[√] Android Studio (version 3.6)
[√] VS Code (version 1.42.1)
[√] Connected device (1 available)
• No issues found!
PS D:\Workplace\flutter_projects> flutter doctor --android-licenses -v
All SDK package licenses accepted.======] 100% Computing updates...
運行flutter doctor --android-licenses
並在詢問時輸入 Y
如果需要,我們可以在此處手動下載軟件包https://dl.google.com/android/repository/sdk-tools-windows-4333796.zip (適用於 Windows 用戶)。 希望本教程可以幫助尋找解決方案的人
MacOS 10.15:Android Studio 3.5.1:
對我有用的解決方案是使用Java 環境工具jenv
(通過homebrew安裝)。 當在 Java 版本之間切換時,此工具會更改$JAVA_HOME 。
就我而言,我安裝了多個 Java 版本,當前使用的全局版本是默認版本。 我還發現有必要在使用此工具時注釋掉.bash_profile
的$JAVA_HOME環境變量。
在終端中,我輸入jenv global 1.8
來運行 java 1.8 而不是更高版本(我安裝了多個版本)。
之后:
flutter doctor --android-licenses
或
sdkmanager --licenses
兩者都工作正常。
注意:如果您必須重新定義 $JAVA_HOME 環境變量,您可能需要退出並重新打開終端 shell。
對於那些使用 Linux 並在flutter doctor --android-licenses
期間不斷出錯的人。
嘗試接受許可證時,我不斷收到無法創建設置警告,我通過指定 SDK 位置修復了該警告:
sdkmanager --sdk_root=/home/adel/bin/android-sdk --licenses
Sdkmanager 然后打印:所有 SDK 包許可證都被接受。
但是 Flutter 一直給android 許可證狀態未知錯誤。 並嘗試調用flutter doctor --android-licenses
會給我同樣的無法創建我曾經得到的設置錯誤。
為了解決這個問題,我編輯了位於${your android tools location} /tools/bin/ 的sdkmanager
腳本,並將最后一行從:
exec "$JAVACMD" "$@"
至:
exec "$JAVACMD" "$@" --sdk_root=/home/adel/bin/android-sdk
這將使 Flutter 在傳遞所需的 sdk_root 參數時調用 sdkmanager,最后調用flutter doctor --android-licenses
修復了該問題。
我不必使用 Java 8。
從 flutter SDK 根文件夾打開 flutter_console.bat 文件並運行命令
flutter doctor --android-licenses
它將接受新下載的 Android SDK 更新的許可。 每次下載和更新 Android SDK 時都需要運行它。
嘗試降級您的 java 版本,當您的系統 java 版本與來自 android 的版本不兼容時,就會發生這種情況。 一旦您更改了 Java 版本,只需運行flutter doctor
它將自動接受許可證。
我的環境:Windows 10 64 位,OpenJDK 14.0.2
初始錯誤如上所述。
錯誤解決后
對我來說同樣的問題,請檢查您的 Java 版本至少必須是 1.8
AndroidSDK
。對於仍然面臨問題的人:
正如下面湯米 C、阿巴和其他少數人所回答的那樣,但我發現的可能不夠清楚。
嘗試按照 windows/linux 上的說明手動安裝java 1.8 :[ https://www3.ntu.edu.sg/home/ehchua/programming/howto/JDK_Howto.html]
並設置$JAVA_HOME變量(jdk 路徑)。
在 Windows 上設置 jdk 路徑($JAVA_HOME):[ 如何在 Windows 7 上設置 java_home? .
在 linux 上:[ https://askubuntu.com/questions/175514/how-to-set-java-home-for-java] 。
然后運行flutter doctor --android-licenses
並接受所有許可證。 希望它有幫助。
我找到了這個解決方案。我下載了JDK 8。然后我將JAVA_HOME的下載jdk文件路徑名添加到環境變量中的用戶變量中。
我遇到了同樣的問題,如上所述,我嘗試了這些。
這對我有用:
flutter doctor --android-licenses
並選擇y
作為提示flutter doctor
,一切都會好起來的!!!!我正面臨問題。 Android SDK
文件夾中也缺少tools
文件夾。 我相信tools
文件夾僅在安裝Android SDL tools(obsolete
)后才會出現。 這個選項對我不可用。
解決方案:我將Java
從版本 8 升級到版本 12,並且能夠安裝這些工具。 您可能仍會收到錯誤“ Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses
Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses
並提供命令flutter doctor -v
。 運行命令flutter doctor --android-licenses
,每次出現此問題時單擊yes
都會檢查許可證是否Accept? (y/N):
Accept? (y/N):
希望它會幫助某人。
如果你使用自制酒桶,你可以這樣做
brew cask install android-sdk
mkdir ~/Library/Android/sdk/tools
ln -s /usr/local/bin/ ~/Library/Android/sdk/tools/bin
flutter doctor --android-licenses
對於Windows 用戶,短期解決方案是降級到 JDK8。 希望 Flutter 能很快解決這個問題,讓 Android SDK 與 >JDK8 一起工作。
在對我的 Ubuntu 20.04 進行大量分析后,我找到了解決方案
對我來說,錯誤是/home/rk/Android/Sdk/tools/bin/sdkmanager
缺少寫入權限。
chmod +w home/rk/Android/Sdk/tools/bin/sdkmanager
然后運行下面的命令。
flutter doctor --android-licenses
它會自動處理許可證。
請按照以下簡單步驟操作。
即使在 2021 年,我也面臨同樣的問題
除了編輯 sdkmanager.bat 文件之外,我已經嘗試了上面的答案。 但根本沒有成功。
然后我使用“flutter upgrade”命令將flutter 2.5升級到2.5.1。 現在它正在工作。 “顫振醫生”命令沒有問題。
在 linux:20.10 請確保您設置了 ANDROID_HOME、ANDROID_SDK_ROOT 鏈接<\/a>的路徑
我必須更新最新的命令行工具:
path/to/sdkmanager --install "cmdline-tools;latest"
警告:如果您對 JAVA_HOME 環境變量及其方向有問題,則此答案很有用。 如果您沒有此問題,則不應嘗試此解決方案。
如果您遇到此錯誤並且您嘗試使用 flutter doctor --android-licenses 或 sdkmanager --licenses 並且您的 JAVA_HOME 環境變量出現問題,那么您必須閱讀此內容。
我有一個 MacOS Catalina 螞蟻,我可以通過以下步驟成功解決這個問題:
如果您有疑問,請告訴我。
這是我為解決問題所做的工作。 請注意,您不必卸載舊的 Android Studio/SDK 副本。 Android Studio 會在您安裝最新版本時處理這些問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.