簡體   English   中英

flutter doctor --android-licenses 給出了 java 錯誤

[英]flutter doctor --android-licenses gives a java error

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:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 5 more

運行 flutter doctor --android-licenses 時,出現上述錯誤。 有誰知道為什么會這樣以及我該如何解決? 我已經在 flutter 控制台上運行它。

Android ZF20E3C5E54C0AB3D376AZD660B3F86安裝Android SDK 命令行工具ZF20E3C5E54C0AB3D3765D660B3F86

  1. 打開工具> SDK 管理器
  2. 從左側選擇,外觀和行為>系統設置> Android SDK
  3. Select SDK頂部菜單中的工具
  4. 檢查Android SDK 命令行工具並單擊“應用”。

替代步驟 #1:WINDOWS:文件>設置(Ctrl+Alt+S) / MAC: Android Studio >首選項


在此處輸入圖像描述

如果您在執行上述步驟后仍遇到問題,可以嘗試將系統升級到 JDK 8。升級到 JDK 8 的官方文檔可在此處獲得。

我是 Mac 用戶,我解決了這個問題。

這個答案也幫助 Windows 用戶和 Linux 用戶解決了用戶反饋的問題。

起初,這是我遇到的問題
$ flutter 醫生-v 在此處輸入圖像描述

以下命令不適用於我的情況。
$ flutter 醫生 --android-licenses 在此處輸入圖像描述

解決這個問題的方法是安裝
Android SDK 命令行工具 如何?
您只需要通過以下兩個步驟來完成。

安裝:Android SDK 命令行工具

步驟 1. 打開 SDK 管理器
頂部菜單 -> 工具 -> SDK 管理器在此處輸入圖像描述

步驟 2. 安裝命令行工具

  1. 展開外觀和行為
  2. 展開系統設置
  3. 點擊Android SDK
  4. 單擊SDK 工具的選項卡
  5. 檢查Android SDK 命令行工具(最新)
  6. 單擊應用按鈕。 在此處輸入圖像描述 然后單擊確定按鈕完成安裝。

繼續簽署 android 許可證。

Android Studio 完成安裝后,您可以執行以下操作。
$ flutter 醫生 --android-licenses
在此處輸入圖像描述 多次說yes后,android的license都簽完了。

再次由 flutter 醫生檢查。

$ flutter 醫生-v
在此處輸入圖像描述

您可以看到所有 Android 許可證都已接受。

恭喜你,你已經完成了這個任務!

我有同樣的問題,通過安裝 android 工作室的 coomand-line 工具解決了它

點擊文件,設置,然后在搜索欄輸入 sdk 並點擊 android sdk 安卓 SDK

然后點擊sdk工具,勾選android命令行工具框,點擊應用允許下載。 然后嘗試在您的 cmd 上再次運行flutter doctor --android-licenses您將被提示接受許可證

似乎您遇到了 JDK 異常,它發生在您沒有在系統變量上設置JAVA_HOME或者您幾乎設置了 JDK 但在錯誤的文件夾中或者您正在嘗試運行 SDK 管理器(它允許您接受Android 許可證)使用錯誤的 JDK。

如果是 JDK 9 或更高版本:

Actually, Android SDK Manager works only with Gradle compiled on version of JDK 8 for Android development , so, if you have a most-recent JDK version already setted on system variables, consider to downgrade it to the JDK version 8.

這個版本對我來說很好用: https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

如果已安裝 JDK 8

如果你手動將JDK文件夾解壓到一個目錄下,可能是你設置的“錯誤”。 我的意思是:您將錯誤的方式指向bin Java 文件夾,但它仍然有效。 必須將JAVA_HOME設置為JDK的根目錄,例如:在JDK壓縮文件夾中,您必須將其解壓並指向解壓文件夾中的系統變量,而不是直接在bin目錄中,您必須將JAVA_HOME指向為系統變量並將 bin 文件夾聲明為可執行文件。

例子:

Linux

在您的 shell 配置文件中:

export JAVA_HOME="/home/user/jdk1.8.0_261"
export PATH="$PATH:$JAVA_HOME/bin"

Windows

在您的環境變量管理器中:

設置一個名為 JAVA_HOME 的新系統變量

在此處輸入圖像描述

然后,編輯 PATH 變量並向其中添加一個新寄存器:

%JAVA_HOME%\bin

實際上,我真的不知道如何在 MacOS 中管理 JDK,如果那是你的操作系統,對不起:(

希望能幫助到你!

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:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 5 more

運行 flutter 醫生 --android-licenses 時出現上述錯誤。 有誰知道為什么會發生這種情況以及我該如何解決? 我已經在 flutter 控制台上運行它。

在 Linux

Android SDK僅適用於JDK 8 ,因此請卸載當前的JDK版本。

通過命令並按 Tab 鍵進行自動完成,刪除它顯示的所有以openjdk-開頭的內容-

sudo apt remove openjdk-

現在安裝JDK 8

sudo apt install openjdk-8-jdk

您需要 JDK 8,因為在更高版本中刪除了所需文件。

安裝后,您可以使用在版本之間切換

sudo update-alternatives --config java

然后是 select JDK 8 的選項。這還將顯示您需要的 JDK 8 安裝位置:

export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/jre/"
PATH=$PATH:$JAVA_HOME/bin

我建議清除 android-studio-dir 和 android-sdk 設置,讓 flutter 自動檢測它們的路徑:這對我有用。

 flutter config --android-studio-dir="" flutter config --android-sdk=""

首先你需要知道 flutter 適用於 jdk 8,所以如果你安裝了其他版本,你需要清除它們以完全刪除其他版本

注意:這是根據我的情況 Ubuntu 20.04,這是根據我的情況,不保證為您工作

如果您有 jdk 11,要卸載使用這兩個命令之一,具體取決於您已安裝的命令,或者如果您不知道您的機器上安裝了哪一個命令,則可以同時運行這兩個命令。

sudo apt purge openjdk-11-jre-headless

sudo apt purge openjdk-11-jre

如果是任何其他版本,請將 11 替換為該數字。 如果您使用默認 jdk,則使用以下命令卸載

sudo apt purge default-jre

確保我們刪除與 java 相關的所有內容,運行此命令

sudo apt auto remove

注意:您可以運行上述所有命令,以確保完全刪除與 java 相關的所有內容

驗證我們已刪除所有運行

java -v

如果您看到以下錯誤或 java 版本,則 java 尚未卸載

Unrecognized option: --version
Error: Could not create the Java Virtual Machine. 
Error: A fatal exception has occurred. Program will exit.

但是如果你得到回應說 java 沒有找到並且有 java 安裝建議這意味着 java 已被卸載

現在我們需要安裝 jdk 8 運行這個命令

sudo apt install openjdk-8-jre

如果一切順利,重新啟動您的機器並運行flutter doctor並按照說明接受許可證

問候,希望這篇文章對你有所幫助

上述解決方案完全有效,但我看到的解決方案比我預期的要少:sdkman => https://sdkman.io/

安裝了這樣的工具,更改 java 版本很快(以 java 8 為例):

❯ sdk install java 8.0.282.hs-adpt
❯ sdk use java 8.0.282.hs-adpt

My solution was: I had Android SDK Build-Tools, Android Emulator and Android SDK Platform-Tools installed. 我也在環境變量中有JAVA_HOME變量。

So I decided to uninstall Android SDK Build-Tools, Android Emulator and Android SDK Platform-Tools and install them again. 此外,我刪除JAVA_HOME變量。 在這些操作之后,我在終端中運行flutter doctor --android-licenses 不知何故,它成功了。

對我來說,在 Windows 10 上,答案只是刪除 JAVA_HOME 環境變量。

如果您是 Java 開發人員,或者您依賴某些 Java 軟件來完成您的工作,那么這可能不是一個好主意,但如果您是一個無法在 ZD52387880E1EA2283819Z 空間中工作的開發人員,那么您只需獲得 375921113817A72像我一樣從 Flutter 開始,然后 go 進入系統環境變量並殺死那個。 flutter doctor --android-licenses在我這樣做之后就像它應該的那樣工作。

暫無
暫無

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

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