【问题标题】:Failed to install android-sdk: "java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema"安装 android-sdk 失败:“java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema”
【发布时间】:2023-04-09 07:30:01
【问题描述】:

安装 android sdk 工具时出现以下错误:

java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema

为什么会发生这种情况以及如何解决?

调试输出:

$ java --version
java 9
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
$ brew cask install android-sdk
==> Caveats
We will install android-sdk-tools, platform-tools, and build-tools for you.
You can control android sdk packages via the sdkmanager command.
You may want to add to your profile:
  'export ANDROID_SDK_ROOT=/usr/local/share/android-sdk'

This operation may take up to 10 minutes depending on your internet connection.
Please, be patient.

==> Satisfying dependencies
==> Downloading https://dl.google.com/android/repository/sdk-tools-darwin-3859397.zip
Already downloaded: /Users/tomasnovella/Library/Caches/Homebrew/Cask/android-sdk--3859397,26.0.1.zip
==> Verifying checksum for Cask android-sdk
==> Installing Cask android-sdk
==> 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.SdkManagerCli.main(SdkManagerCli.java:117)
==>     at com.android.sdklib.tool.SdkManagerCli.main(SdkManagerCli.java:93)
==> 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:185)
==>     at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
==>     ... 5 more
Error: Command failed to execute!

==> Failed command:
/usr/local/Caskroom/android-sdk/3859397,26.0.1/tools/bin/sdkmanager tools platform-tools build-tools;26.0.1

==> Standard Output of failed command:


==> Standard Error of failed command:
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.SdkManagerCli.main(SdkManagerCli.java:117)

【问题讨论】:

  • 实际上这个问题是在安装 android sdk 时提出了一个合法问题
  • 我遇到了这个问题,我将错误消息的第一行复制/粘贴到谷歌,这个问题是第一个出现的问题。不仅如此,下面的答案之一解决了它。这不应该完全关闭:不管问题的规则是什么,这个问题显然满足了网站的全部目的。
  • /Library/Java/JavaVirtualMachines删除任何早于Java 8的东西
  • 在 Ubuntu 18.04 上使用包 openjdk-8-jdkopenjdk-11-jdk 的 Java 8 和 Java 11 会出现问题。有谁知道为javax/xml/bind/annotation/XmlSchema 安装什么,或者如何在NDK 中避免javax/xml/bind/annotation/XmlSchema
  • 这与 Java 版本无关。这是关于命令行工具的。安装命令行工具后,我通过了这个错误 Java 16。你也可以在这个问题的第二页找到正确的答案。 Android Studio -&gt; SDK Manager -&gt; SDK Tools -&gt; Android SDK Command-line Tools -&gt; Install

标签: java android java-9


【解决方案1】:

刚刚遇到这个错误,通过在Android Studio上下载Android SDK Command-line Tools (latest),在Preferences &gt; Appearance &amp; Behavior &gt; System Settings &gt; Android SDK &gt; SDK Tools下并重新运行flutter doctor --android-licenses解决

最后,将新工具添加到您的 PATH 中,在您的 .bashrc.zshrc 或类似文件中,在过时工具之前:

export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin

【讨论】:

  • 尝试了上述解决方案,但在 2021 年新安装的环境中没有任何工作。这对我来说是正确的答案。
  • Ubuntu 21 完美唤醒
  • 安装Android SDK Command-line Tools (latest)后执行flutter doctor --android-licenses时出现以下错误:Error: Could not find or load main class Sight\AppData\Local\Android\Sdk\cmdline-tools\latest\bin\\.. Caused by: java.lang.ClassNotFoundException: Sight\AppData\Local\Android\Sdk\cmdline-tools\latest\bin\\//
  • 这应该被标记为正确答案。降级 Java 不是正确的做法,那是高度倒退的!
  • 现在,Android Studio 上没有名为“Preferences”的选项。 “系统设置”现在在文件中可用
【解决方案2】:

今天早上我遇到了类似的问题(尝试使用 Unity3D 为 Android 构建)。我最终卸载了 JDK9 并安装了Java SE Development Kit 8u144。希望这会有所帮助。

  1. brew cask uninstall java#卸载java9
  2. brew tap homebrew/cask-versions
  3. brew cask install java8#安装java8
  4. touch ~/.android/repositories.cfg#没有这个文件,下一步会出错
  5. brew install --cask android-sdk

【讨论】:

  • 太棒了——这对我在 Android Studio 中构建 Flutter 应用程序很有用。谢谢!
  • 这停止工作,brew cask install java8 不起作用。
  • 正确的命令现在似乎是brew cask install homebrew/cask-versions/java8
  • brew cask install homebrew/cask-versions/adoptopenjdk8 似乎有效
  • 我不得不使用brew install --cask homebrew/cask-versions/adoptopenjdk8 而不是brew cask install java8
【解决方案3】:
  • 我也遇到了这个错误
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 环境,(在我的例子中是 java 13)
  • 并安装java 8
  • 我已完成以下步骤
  • open the android studio &gt; go to configure &gt; select sdk manager &gt; go to sdk tools &gt; make a tick on android sdk command line tools &gt;apply &gt; and wait for installation

  • 重启命令行工具

  • 输入命令flutter doctor

  • 输入命令flutter doctor --android-licenses

  • 输入y接受所有许可

【讨论】:

  • 谢谢!很好奇你是怎么想出来的。
  • 是的,你是怎么想出来的。救生员
  • 最后,一个可行的解决方案。我非常感谢你发布这个!
  • 非常感谢,这节省了我的时间。在此之前我做了一场噩梦。
  • 我必须记住这一点。让许可工具工作对 JAVA_HOME 来说太疯狂了,这个小标记和 5 分钟让我构建了我的项目。截图也不错。
【解决方案4】:

要解决此错误,您可以降级您的 Java 版本。

或在您的终端上导出以下选项:

Linux/MAC:

export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

Windows

set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee

如果这不起作用,请尝试导出 java.xml.bind

Linux:

export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.xml.bind'

Windows

set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.xml.bind

要永久保存它,您可以在 Linux 上的配置文件中导出 JAVA_OPTS.zshrc.bashrc 等),或者在 Windows 上将其永久添加为环境变量。


ps. 这不适用于没有 Java EE 模块的 Java 11/11+。因为这个选项是个好主意,请降级您的 Java 版本或等待 Flutter update

参考:JDK 11: End of the road for Java EE modules

【讨论】:

  • 这在带有 OpenJDK 10.0.2 的 Ubuntu 18.04 中对我有用
  • 在 macOS Mojave (10.14.2) 上为我工作,Java 版本为“10.0.1”2018-04-17。
  • 在 macOS Mojave (10.14.2) 上为我创建了一个新错误:启动层 java.lang.module.FindException 初始化期间发生错误:找不到模块 java.se.ee
  • 我也尝试了 1.8.0_191,但仍然收到:错误:无法找到或加载主类 java.se.ee
  • 不工作,java.lang.module.FindException:找不到模块 java.se.ee
【解决方案5】:
set JAVA_OPTS=-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee

这为我解决了 Windows 上的问题。

Source 1, source 2

【讨论】:

  • 也在 ubuntu 16.04 上使用了这个(使用export 而不是set),它解决了这个问题。
  • 天才。非常感谢。以为我将不得不改变我的 JVM
  • 在带有 Java 10 的 Windows 10 上的工作就像一个魅力
  • 不幸的是,这似乎已在 Java 11 中完全删除。
  • 在 Ubuntu 18.04 上工作过 export JAVA_OPTS = '-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'
【解决方案6】:

2019-10 更新:

作为stated in the issue tracker,Google 一直在开发新的 Android SDK 命令行工具 版本,该版本可在当前 JVM(9、10、11+)上运行,并且不依赖于已弃用的 JAXB EE模块!

您可以在 Android Studio 中下载和使用新的 Android SDK 命令行工具,也可以从 Google 服务器手动下载:

有关最新版本,请检查 repository.xml 中的 URL。

如果您手动解压命令行工具,请注意将它们放在您的$ANDROID_HOME 内的子文件夹中(例如$ANDROID_HOME/cmdline-tools/...)。

2021-03 更新:

最新的稳定命令行工具可在Googles Downloads-Website 获得。这些工具比上面链接的工具更新。

【讨论】:

  • 当使用Java 9+时,从现在开始这应该是答案!
  • 无论 Java 8 还是 9+,您都应该使用新的命令行工具;)
  • 我仍然有同样的错误,你能告诉我我需要把它放在哪里
  • @RohanDevaki c:\Users\username\AppData\Local\Android\Sdk\cmdline-tools\latest\bin\sdkmanager.bat
  • 你是对的。我把它放在错误的目录中。它应该在 $ANDROID_HOME/cmdline-tools/latest ...我使用的是 bootom 中提到的最新的稳定命令行工具。
【解决方案7】:

如果你不想改变你的 Java 版本(我不想),你可以在你的 shell 中临时改变版本:

第一次运行

/usr/libexec/java_home -V

如果已经安装,则选择一个主要版本,否则先安装:

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

现在您可以运行 sdkmanager。

【讨论】:

  • $ /usr/libexec/java_home -V 给出bash: /usr/libexec/java_home: No such file or directoryapt-file search /usr/libexec/java_home 什么也没给出。
  • 您的 $JAVA_HOME 设置是否正确?运行:echo "export JAVA_HOME=`/usr/libexec/java_home`" &gt;&gt; ~/.bashrc(或配置文件,如果你使用配置文件) - 重新加载:. ~/.bashrc
  • 也没有/usr/libexec。你在 MacOS 上吗? (我在 Ubuntu/Linux 和 Ubuntu/Windows 上)
  • 我正在使用 mac。你的 Java_home 在哪里?
【解决方案8】:

使用 Linux 时,一个简单的选项是安装 JDK version 8,然后使用以下命令选择它作为默认设置:

sudo update-alternatives --config java

【讨论】:

  • 应该提到这只是 linux
【解决方案9】:

在 Mac/Linux 上使用以下命令:

export JAVA_OPTS='-XX:+IgnoreUnrecognizedVMOptions --add-modules java.se.ee'

适用于 JDK 9 和 10,无需修补任何脚本(sdkmanager、avdmanager)。

对于 Java 11,请参阅:https://stackoverflow.com/a/51644855/798165

【讨论】:

  • 谢谢!安装 jdk 9 后问题解决了
【解决方案10】:

您需要将以下内容添加到您的个人资料(适用于 MacOS):

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

无需修补任何东西。

【讨论】:

    【解决方案11】:

    我找到了两个对我有用的答案,而无需卸载 create-react-app 所需的 JDK 10(或 9)。 JDK 9 和 10 都与 android-sdk 不兼容!


    Siu Ching Pong -Asuka Kenji- 建议修改sdkmanager 脚本,替换这一行:

    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'
    

    请注意,更新 sdkmanager 时会覆盖此 mod。
    查看他的帖子以及他链接到的帖子,了解更多详情。
    这个解决方案也是这个github issues thread提到的解决方案之一。


    German's post 指示冲突的来源,并提供不会被更新覆盖的修复程序。
    他建议将/Library/Java/JavaVirtualMachines/Info.plist 重命名为从查找驻留在系统上的最高Java 版本的脚本中隐藏它的一种方法。这样,JDK 8 作为默认值返回。
    显式引用 JDK 10,或将其设置为 $JAVA_HOME,您可以在需要时使用 JDK 10 而不是默认值。
    详细信息在他的帖子中。

    【讨论】:

    • 完美运行,恕我直言,最好的解决方案,因为它不会强迫您降级 java
    • 不知何故,在用 ao 做了很多实验之后。 Android Studio,这个问题消失了,新的错误是Could not find or load main class java.se.ee - 恢复 DEFAULT_JVM_OPTS 修复了这个问题,之前的问题消失了..
    • 不幸的是,这现在不起作用。结果是:启动层初始化时出错java.lang.module.FindException: Module java.se.ee not found
    • 赞成 stackoverflow.com/a/49630166/5411817 提供正确的解决方案,无需降级即可安装 jdk-11 和 jdk1.8
    【解决方案12】:

    我使用的是 macOS,在构建 Flutter 应用程序时发生错误,提示不接受 android sdk 许可证。因此,在接受许可时发生了这个错误。

    在我的情况下,出现此错误的原因是我没有安装接受许可所需的 sdkmanager 命令行工具。

    所以,安装命令行工具最简单的方法是:

    1. 打开安卓工作室。
    2. 打开 SDK 管理器(参考下图):
    1. 在栏中选择 SDK 工具。
    2. 勾选选项 Android SDK 命令行工具(最新)
    3. 应用它。
    4. 如果使用 Flutter,请运行 flutter doctor -android-licenses,或者您可以继续执行发生错误的进程。

    【讨论】:

    • 像魅力一样工作
    【解决方案13】:

    奇怪的是Java9不兼容android-sdk

    $ avdmanager
    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.AvdManagerCli.run(AvdManagerCli.java:213)
        at com.android.sdklib.tool.AvdManagerCli.main(AvdManagerCli.java:200)
    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:185)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
        ... 5 more
    

    将所有命令合二为一,方便参考:

    $ sudo rm -fr /Library/Java/JavaVirtualMachines/jdk-9*.jdk/
    $ sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
    $ sudo rm -fr /Library/PreferencePanes/JavaControlPanel.prefPane
    
    $ /usr/libexec/java_home -V
    Unable to find any JVMs matching version "(null)".
    Matching Java Virtual Machines (0):
    Default Java Virtual Machines (0):
    No Java runtime present, try --request to install
    
    $ brew tap caskroom/versions
    $ brew cask install java8
    $ touch ~/.android/repositories.cfg
    $ brew cask install android-sdk
    $ echo 'export ANDROID_SDK_ROOT="/usr/local/share/android-sdk"' >> ~/.bash_profile
    $ java -version
    java version "1.8.0_162"
    Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
    $ avdmanager
    
    Usage:
          avdmanager [global options] [action] [action options]
          Global options:
      -s --silent     : Silent mode, shows errors only.
      -v --verbose    : Verbose mode, shows errors, warnings and all messages.
         --clear-cache: Clear the SDK Manager repository manifest cache.
      -h --help       : Help on a specific command.
    
    Valid actions are composed of a verb and an optional direct object:
    -   list              : Lists existing targets or virtual devices.
    -   list avd          : Lists existing Android Virtual Devices.
    -   list target       : Lists existing targets.
    -   list device       : Lists existing devices.
    - create avd          : Creates a new Android Virtual Device.
    -   move avd          : Moves or renames an Android Virtual Device.
    - delete avd          : Deletes an Android Virtual Device.
    

    【讨论】:

    • 错误:caskroom/versions 已移动。改为点击 homebrew/cask-versions。
    【解决方案14】:

    我遇到了同样的问题。虽然我是一个有点过时的开发者(仍然使用 windows 开发:P)

    在 Windows 上解决这个问题:

    第 1 步:如果未安装 jdk 8,请安装它(jdk 9 或 11 不起作用,但您可以安装它们以用于其他开发用途)。

    使用 Chocolatey 非常简单:

    choco 安装 jdk8

    (如果使用 Chocolatey 安装,请跳过步骤 2 和 3)

    第二步:进入环境变量设置,将 JAVA_HOME 设置为 jdk 8 的安装目录。

    STEP 3: 进入路径变量并添加jdk 8的bin目录并将其移动到顶部。

    第 4 步:关闭所有打开的终端会话并重新启动新会话

    可选步骤 5:取决于您在终端运行中的目标(可能需要将 sdkmanager 添加到路径或只是导航到目录):

    sdkmanager --update

    就是这样! :O 享受飘扬! :D

    【讨论】:

    • 这与最佳答案一起在 Windows 10 上为我工作!
    • 谢谢SSSSSSSSSSSS
    • 有效!我只是想补充一点,如果您使用的是 VS 代码,则必须在此更改后重新启动程序
    【解决方案15】:

    由于 Java 11 已删除 JavaEE,您需要下载一些 jar 并添加到类路径中:

    JAXB: https://javaee.github.io/jaxb-v2/

    JAF: https://www.oracle.com/technetwork/articles/java/index-135046.html

    然后编辑 sdkmanager.bat 使 set CLASSPATH=...;%CLASSPATH%

    结尾

    设置 CLASSPATH 以包含 JAXB 和 JAF:

    set CLASSPATH=jaxb-core.jar;jaxb-impl.jar;jaxb-api.jar;activation.jar
    

    然后 sdkmanager.bat 就可以工作了。

    【讨论】:

    • 它有效,但我收到此警告:警告:com.sun.xml.bind.v2.runtime.reflect.opt.Injector 的非法反射访问(文件:/F:/android_sdk/java /jaxb-ri/lib/jaxb-impl.jar) 到方法 java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int)
    • 是的,看起来 Java 开始警告使用反射来绕过 JAXB 使用的类安全性的不良编程实践(Oracle 违反了他们自己的规则);)
    【解决方案16】:

    我在运行时遇到了同样的问题:

    $ /Users/<username>/Library/Android/sdk/tools/bin/sdkmanager "platforms;android-28" "build-tools;28.0.3"_
    

    我解决了

    $ echo $JAVA_HOME
    /Library/Java/JavaVirtualMachines/jdk-11.0.1.jdk/Contents/Home    
    
    $ ls /Library/Java/JavaVirtualMachines/
    
    jdk-11.0.1.jdk      
    jdk1.8.0_202.jdk
    

    将 Java 更改为使用 1.8

    $ export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home'
    

    然后同样的命令运行正常

    $ /Users/<username>/Library/Android/sdk/tools/bin/sdkmanager "platforms;android-28" "build-tools;28.0.3"
    

    【讨论】:

    • 这是最好的情况。如果您已经导出 JAVA_OPTS。请先删除它,然后再执行此答案中的步骤。
    【解决方案17】:

    从最新版本的 Android 命令行工具(撰写本文时为 2.1)开始,不再需要修补 sdkmanager 或降级到 Java 的旧版本。

    只需更新您的 SDK 包并将您的命令行工具切换到 latest 版本,它将在新版本出现时跟踪它们:

    sdkmanager --update
    sdkmanager 'cmdline-tools;latest'
    sdkmanager --uninstall 'cmdline-tools;1.0'
    

    如果sdkmanager 不在您的PATH 上,您可能需要提供完整路径,如果PATH 明确引用了1.0 工具,您可能需要在之后调整您的1.0

    【讨论】:

      【解决方案18】:

      就我而言,我需要 JDK 8(尝试在 ubuntu 下的 Qt 中使用 AVD 和 SDK 管理器)和 11 用于不同的工具。删除版本 11 不是一种选择。

      “JAVA_OPTS”解决方案没有做任何事情。我不太喜欢导出 JAVA_HOME,因为它可能会强制您从同一个 shell(如 Qt)启动调用这些实用程序的任何工具,或者强制您将其永久化,这很不方便。

      所以对我来说,解决方案非常简单。在 ~/Android/tools/bin/sdkmanager 和 ~/Android/tools/bin/avdmanager 的第二行添加类似这样的内容:

      JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"

      (或任何通往 rev 8 jdk 的路径)。

      这样,这些命令行工具在独立模式下工作,它们在被其他工具(例如 Qt)调用时也可以工作,而 jdk 11 仍然是其他工具的系统默认值。无需混合库等...

      唯一的缺点是对这些命令行工具的任何更新都会删除这些修改,您必须将其放回原处。

      【讨论】:

      • 如果您不想弄乱 PATH 变量,最好的选择。
      【解决方案19】:

      就我而言,我有 Java 14 并且需要 Java 8。

      我在 Arch Linux 中并已安装 jdk8-openjdk jre8-openjdk https://www.archlinux.org/packages/extra/x86_64/java8-openjdk/

      Debian 用户 https://wiki.debian.org/Java 或 Fedora https://docs.fedoraproject.org/en-US/quick-docs/installing-java/

      在执行以下步骤之前,使用您的包管理器安装 Java 8(或所需版本,在本例中为 jdk8-openjdk jre8-openjdk)。


      1。找出我的 Java 在哪里:

      # which java
      /usr/bin/java
      

      2。检查java文件:

      我可以看到这里所有的 java 文件都是指向/usr/lib/jvm/default[something] 的链接。这意味着java 命令链接到某个特定版本的java 可执行文件。

      # ls -l /usr/bin/java*
      lrwxrwxrwx 1 root root 37 May 16 06:30 /usr/bin/java -> /usr/lib/jvm/default-runtime/bin/java
      lrwxrwxrwx 1 root root 30 May 16 06:30 /usr/bin/javac -> /usr/lib/jvm/default/bin/javac
      lrwxrwxrwx 1 root root 32 May 16 06:30 /usr/bin/javadoc -> /usr/lib/jvm/default/bin/javadoc
      lrwxrwxrwx 1 root root 30 May 16 06:30 /usr/bin/javah -> /usr/lib/jvm/default/bin/javah
      lrwxrwxrwx 1 root root 30 May 16 06:30 /usr/bin/javap -> /usr/lib/jvm/default/bin/javap
      

      3。检查defaultdefault-runtime

      在这里我可以看到默认版本链接到 14(唯一安装的版本)。

      # cd /usr/lib/jvm
      # ls -l
      lrwxrwxrwx 1 root root   14 Aug  8 20:44 default -> java-14-openjdk
      lrwxrwxrwx 1 root root   14 Aug  8 20:44 default-runtime -> java-14-openjdk
      drwxr-xr-x 7 root root 4096 Jul 19 22:38 java-14-openjdk
      drwxr-xr-x 6 root root 4096 Aug  8 20:42 java-8-openjdk
      

      4。切换默认版本

      首先,删除现有的defaultdefault-runtime链接到java-14版本。

      # rm default default-runtime
      

      然后,创建指向所需版本(在本例中为 java-8)的新链接。

      # ln -s java-8-openjdk default
      # ln -s java-8-openjdk default-runtime
      

      策略是使用上面的ln -s 链接到所需的软件版本(在本例中为java8)。然后,此链接将链接到 java bin 目录中的二进制文件(无需更改 $PATH 环境变量!


      或者您可能希望使用 archlinux-java 命令更改 Java 版本,而不是使用更安全的方法:https://wiki.archlinux.org/index.php/Java

      【讨论】:

        【解决方案20】:

        TLDR;尝试在 OSX 上设置 JAVA_HOME 对我来说效果很好

        export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
        

        从 AdoptOpenJDK 安装 JDK 8 ( LTS ):

        # brew tap adoptopenjdk/openjdk
        
        brew cask install adoptopenjdk/openjdk/adoptopenjdk8
        

        【讨论】:

        • 我尝试了很多东西,这是我在 OSX Big Sur 上缺少的链接
        【解决方案21】:

        对于 Linux 用户(我使用的是 Debian Distro,Kali) 以下是我的解决方法。

        如果你还没有 jdk-8,你想在 oracle 的网站上得到它

        https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

        我得到了 jdk-8u191-linux-x64.tar.gz

        第 1 步 - 安装 Java 像这样在合适的位置移动并打开包装

        $ mv jdk-8u191-linux-x64.tar.gz /suitablelocation/
        $ tar -xzvf /suitablelocation/jdk-8u191-linux-x64.tar.gz
        

        你应该得到一个像 jdk1.8.0_191 这样的解压文件夹 您可以在之后删除 tarball 以节省空间

        第 2 步 - 设置默认 java 位置的替代项

        $ update-alternatives --install /usr/bin/java java /suitablelocation/jdk1.8.0_191/bin/java 1
        $ update-alternatives --install /usr/bin/javac javac /suitablelocation/jdk1.8.0_191/bin/javac 1
        

        第 3 步 - 选择默认选项

        $ update-alternatives --set java /suitablelocation/jdk1.8.0_191/bin/java
        $ update-alternatives --set javac /suitablelocation/jdk1.8.0_191/bin/javac
        

        第 4 步 - 确认默认 java 版本

        $ java -version
        

        注意事项

        1. 在原文中:https://forums.kali.org/showthread.php?41-Installing-Java-on-Kali-Linux, 还设置了 Mozilla 的默认插件。我认为我们并不真正需要插件 只是尝试为 android 开发。
        2. 正如@spassvogel 的回答,您还应该在 ~/.android 目录中放置一个@repositories.cfg 文件 因为这是更新工具仓库列表所必需的
        3. 移动一些东西可能需要root权限。明智地使用 sudo。
        4. sdkmanager 使用方法见官方指南:https://developer.android.com/studio/command-line/sdkmanager

        【讨论】:

          【解决方案22】:

          在我的情况下,我的机器上没有安装所需的 sdk 版本。

          所以请确保您已经安装了错误中给出的 sdk 版本。

          您可以在此处通过 Android Studio 导航检查和安装。

          【讨论】:

            【解决方案23】:

            对于 windows 机器,如果 JDK 超过 1.8.172,请卸载 JDK。 安装 JDK 1.8.172

            我在带有 java 10 的 windows 10 中遇到了同样的问题。我卸载了 java 10 并安装了 java8,它现在对我来说工作正常 :)

            【讨论】:

              【解决方案24】:

              在命令行中运行java -versionjavac -version命令,确保它们来自同一个JDK(例如:版本1.8.0_181)

              如果不是,您必须修改PATH 变量,使其仅指向单个JDK。如果您不确定如何操作,只需卸载除 Java 8 之外的所有其他 Java 实例(Windows 中的添加/删除程序)。至于今天,Unity 和 Android 都建议你使用 JDK 8。

              使用 Java 8,没有必要像其他一些答案所示那样导出 java.se.ee 模块。您还可以删除您设置的任何JAVA_OPTS 或其他environment variables

              【讨论】:

                【解决方案25】:

                我最近通过卸载更高版本的JDK并安装JDK 8解决了这个问题。安装JDK后,您需要提供路径。然后你需要在 "C:\Users\Milan Adhikari\AppData\Local\Android\Sdk\tools" 中打开命令提示符并运行 "sdkmanager --update" 这将更新你的 sdk 然后你需要运行 "flutter doctor - -android-licenses" 在 cmd 中并接受所有许可证。
                现在你的问题应该解决了。

                【讨论】:

                  【解决方案26】:

                  最好的方法是使用下面的命令

                     $ wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip
                     $ unzip \platform-tools-latest-linux.zip
                     $ sudo cp platform-tools/adb /usr/bin/adb
                     $ sudo cp platform-tools/fastboot /usr/bin/fastboot
                  

                  现在运行 adb version 以验证它是否已更新。

                  【讨论】:

                    【解决方案27】:

                    无需卸载已安装在您机器上的其他 java 版本。需要时,您可以方便地使用实用程序“update-alternatives”来选择要激活的 Java 运行时。它将自动更新所需的符号链接。

                    您只需要运行以下命令并选择您选择的版本。就是这样!

                    sudo update-alternatives --config java
                    

                    【讨论】:

                      【解决方案28】:

                      正如@steven 指出的那样,安装 Java 8(这里是 Ubuntu 16.04、18.04 和 20.04/20.10 https://computingforgeeks.com/how-to-install-java-8-on-ubuntu/ 的链接),然后使用以下命令将其设置为默认 Java 版本:

                      sudo update-alternatives --config java
                      

                      【讨论】:

                        【解决方案29】:

                        这个问题有很多答案,由于用户安装不同的工具链和使用不同的 Java 版本,它们都是不同的。

                        使用 Android 开发工具链的推荐方法,或者至少是我建议使用的方法,是遵循 Android Studio 文档中的说明:

                        您应该始终通过使用 Android SDK 管理器下载最新版本来更新您的构建工具组件。

                        Android Studio 可让您轻松管理已安装的 SDK 和构建工具,是的,它需要您的硬盘驱动器上的一些空间,但它会为您节省一些时间。一旦熟悉了它的工作原理,就可以考虑只安装命令行工具。

                        如果没有特殊原因使用旧 Java 版本,请使用最新(稳定)版本,您将获得有趣的新功能,并且编译后的应用程序将受益于所有新优化。

                        全新安装

                        1. 删除您本地的Android 文件夹,通常在主目录中
                        2. Download Android studio
                        3. 安装后,打开Settings,搜索Android SDK并打开
                        4. SDK Platforms 中为您的应用选择目标 Android 版本
                        5. SDK Tools选项卡中,选择Android SDK Build-ToolsAndroid SDK Command-line Tools (latest)Android EmulatorAndroid SDK Platform-Tools
                        6. 在按 OK 之前,检查 Android SDK Location 路径是否适合您
                        7. 按 OK,让 Android Studio 下载并安装所有内容

                        (可选)如果您需要从命令行使用已安装的二进制文件,请务必将其文件夹添加到您的 PATH 变量中。如果您使用 Android Studio,则不需要。

                        我的机器上安装了 Java 14,无论如何你都可以使用 Android Studio 附带的 jre。

                        【讨论】:

                          【解决方案30】:

                          降级您的 java 版本。无论是什么系统或 ide。

                          确保java版本不高于8

                          就我而言。我更改了 ide java 版本。这解决了我的问题。

                          【讨论】:

                            猜你喜欢
                            • 2021-09-13
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2022-11-04
                            • 2021-04-01
                            • 2017-08-15
                            相关资源
                            最近更新 更多