簡體   English   中英

Flutter.io Android 許可證狀態未知

[英]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

只需在android studio中安裝sdk命令行工具(最新)即可。 在此處輸入圖片說明

然后運行: flutter doctor --android-licenses

之后你應該得到:

coolcoders@myhost ~ % flutter doctor --android-licenses
5 of 7 SDK package licenses not accepted. 100% Computing updates...             
Review licenses that have not been accepted (y/N)? y

...然后您將獲得一大堆許可證,可在您啜飲您最喜愛的飲料時閱讀。

如果您更新了 android SDK,則許可可能已更改。 根據您進行更新的方式,您可能會或可能不會被提示接受更改,或者它可能只是沒有保存您確實以一種顫振可以理解的方式接受它們的事實。

要解決,請嘗試運行

flutter doctor --android-licenses

這應該會提示您接受許可證(它可能會先詢問您,以防只需鍵入y並按 Enter - 盡管它應該會告訴您)。

如果您仍然有這樣做之后的問題,它可能是值得要么開在一個新的bug撲Github上庫,或像現有的問題添加注釋這一個,因為它可能是你看到的。

錯誤:

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更新

參考: JDK 11:Java EE 模塊之路的盡頭

正確的解決方案是,如果您安裝了 android studio

  1. 打開 SDK 管理器
  2. 在 SDK 工具下取消選中隱藏底部的過時包
  3. 那么您應該會看到一個名為Android SDK Tools (Obsolete)的選項

在此處輸入圖片說明

  1. 檢查並申請,讓工作室下載包
  2. 完成后運行命令flutter doctor ,它現在應該會提示您運行flutter doctor --android-licenses運行許可證命令后按 y 接受所有許可證,它應該可以解決問題

在此處輸入圖片說明

我寫這個是因為在安裝 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

以下是解決我的問題的步驟:

  1. 打開你的終端
  2. 輸入flutter doctor --android-licenses
  3. y接受,此過程可能會發生多次。 完成!

在我的情況下,問題是缺少Android SDK Command-line tools

在此處輸入圖片說明

我找到了這個必須使用 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,解決方法

  1. 在編輯器中打開 sdkmanager。
  2. 附加 DEFAULT_JVM_OPTS

替換

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'
  1. 保存文件並退出編輯器,然后再次嘗試運行該命令。

對於 Android 許可證狀態未知問題,我嘗試通過以下步驟解決:

  1. 打開終端
  2. 轉到您的 Android SDK 位置 C:\\Users%user%\\AppData\\Local\\Android\\Sdk\\tools\\bin 或 ~/Library/Android/sdk/tools/bin

  3. 運行命令:./sdkmanager --license

參考文獻

無法使用 Java 9 運行 sdkmanager --list (Android SDK)

如何解決 Java 9 中的 java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

這是我的解決方案:

  1. 安裝 SDKMan

    $ curl -s "https://get.sdkman.io" | bash

  2. 設置你的 bash_profile

    $ source "$HOME/.sdkman/bin/sdkman-init.sh

    $ source ~/.bash_profile

  3. 找到java sdk,選擇要安裝的版本

    $ sdk ls java

    $ sdk install java 8.0.192-zulu

  4. 復制您的顫振醫生警告消息以更新 sdkmanager

    $ /Users/YourUserName/Library/Android/sdk/tools/bin/sdkmanager --update

  5. 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%

參考-- https://robbinespu.gitlab.io/blog/2020/03/03/flutter-issue-fixed-android-license-status-unknown-on-windows/

所以這里是解決方案,打開您的 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它將自動接受許可證。

我將我的 Java 版本降級到 1.8 並已解決,這里是下載JDK8的鏈接

安裝JDK8后運行以下命令

   flutter doctor --android-licenses

我的環境:Windows 10 64 位,OpenJDK 14.0.2

初始錯誤如上所述。

錯誤解決后

  1. 將環境變量 PATH & JAVA_HOME 中的“ C:<installation-folder>\\openjdk-14.0.2_windows-x64_bin\\jdk-14.0.2 ”替換為“* C:\\Program Files\\Android\\Android Studio\\jre*
  2. 運行flutter doctor --android-licenses並選擇y作為提示

對我來說同樣的問題,請檢查您的 Java 版本至少必須是 1.8

  1. 打開安卓工作室。
  2. 轉到文件-> 設置。
  3. 搜索AndroidSDK
  4. 將您的 API 級別更新到最新版本。
  5. 然后重新加載 Android Studio。

對於仍然面臨問題的人
正如下面湯米 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文件路徑名添加到環境變量中的用戶變量中。

我遇到了同樣的問題,如上所述,我嘗試了這些。

  1. 安裝了 JDK 1.8 並將我的 JAVA_HOME env 設置為 1.8 - 這不起作用
  2. 我的 Android 工作室沒有顯示任何“Android SDK 工具(過時)”但有一個“Android SDK 工具”

這對我有用:

  1. 從 SDK Manager 中刪除“Android SDK Tools”
  2. 首先取消選擇“Hide Obsolete Packages”,然后選擇“Android SDK Tools (Obsolete)”,重新安裝它。
  3. 運行flutter doctor --android-licenses並選擇y作為提示
  4. 運行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缺少寫入權限。

  1. chmod +w home/rk/Android/Sdk/tools/bin/sdkmanager

然后運行下面的命令。

  1. flutter doctor --android-licenses

它會自動處理許可證。

請按照以下簡單步驟操作。

  1. 轉到工具,然后是 SDK 管理器,然后單擊 android SDK。
  2. 單擊 SDK 更新站點選項卡。
  3. 選中使用 https:// 獲取 https://..sources 的復選框。
  4. 單擊應用並確定。
  5. 現在重新啟動android studio。
  6. 轉到 SDK 工具並選中狀態為隱藏過時包的復選框。
  7. 等待大約一分鍾左右,包裹出現。
  8. 然后選擇一個名為“android SDK tools (obsolete)”的包,然后按確定。
  9. 繼續安裝包。
  10. 安裝后重啟android studio並重啟cmd,然后運行flutter doctor。
  11. 這將需要幾分鍾,它應該可以工作

即使在 2021 年,我也面臨同樣的問題

  • Android Studio - 北極狐 2020.3.1 補丁 2
  • Java jdk-16.0.2
  • 安卓 SDK 版本 31.0.0
  • 顫振 2.5

除了編輯 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 螞蟻,我可以通過以下步驟成功解決這個問題:

  1. 打開你的終端
  2. 輸入:open -e .bash_profile(你應該會看到幾乎兩個環境變量:flutter 和 JAVA_HOME)
  3. 如果您願意,可以將 JAVA_HOME 環境變量保存在 textEdit 文件中,然后刪除 JAVA_HOME 環境變量。 保存 bash_profile。
  4. 再次進入終端並運行 source $HOME/.bash_profile
  5. 再試一次 flutter doctor ,你應該不會再看到同樣的錯誤了。

如果您有疑問,請告訴我。

這是我為解決問題所做的工作。 請注意,您不必卸載舊的 Android Studio/SDK 副本。 Android Studio 會在您安裝最新版本時處理這些問題。

  1. 下載並安裝最新版本的Android Studio
  2. 按照本教程中的說明進行操作
  3. 安裝完成后,運行flutter doctor並檢查,你的問題應該已經解決了。 如果問題得到解決,則無需運行flutter doctor --android-licenses命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM