安装Android Studio时缺少sdkmanager

28

我一直在使用macOS 10.15.3编写Flutter程序,目标是iOS设备。今天我也尝试安装了Android Studio以扩展开发。安装过程没有错误,但是在Library/Android/sdk/下没有tools子目录,这是一个问题,因为sdkmanager应该在Library/Android/sdk/tools/bin中找到。

我注意到这一点是因为运行flutter doctor时给出了以下提示:

     Android license status unknown.
      Try re-installing or updating your Android SDK Manager.
      See https://developer.android.com/studio/#downloads or visit https://flutter.dev/setup/#android-setup for detailed instructions.
我尝试重新安装了Android Studio(没有任何改变)。其他在线发布的解决方案提到了Java版本问题,因此我升级了JRE从1.7到1.8,并重新安装了Android Studio(没有任何改变),然后升级了JDK到最新版本(现在Java版本为11.0.6),并尝试再次安装Android Studio(没有任何改变)。在上述操作期间,我还将Flutter升级到了v1.12.13+hotfix.8,但这个错误仍然存在。
如果我输入flutter doctor --android-licenses,那么我会得到:
    Android sdkmanager tool not found (/Users/macuser/Library/Android/sdk/tools/bin/sdkmanager).
    Try re-installing or updating your Android SDK,
    visit https://flutter.dev/setup/#android-setup for detailed instructions.

这是我第一次注意到我缺少Android Studio的部分。

我尝试通过创建一个tools/bin子目录并将sdkmanager从插件的Library/Android/sdk/cmdline-tools/latest/bin复制到我的新Library/Android/sdk/tools/bin来欺骗Flutter,但这并没有起作用。 运行flutter doctor --android-licenses会导致:

A newer version of the Android SDK is required. To update, run:
/Users/macuser/Library/Android/sdk/tools/bin/sdkmanager --update

这是错误的,因为Android SDK是最新版本。

有人知道为什么Android Studio会不断地缺少tools/bin子目录和其中的好东西吗?谢谢,如果我忽略了某些基本内容,请原谅。

4个回答

57

更新1(2020年2月29日)

最新版本的Android SDK似乎将'Android SDK tools'软件包重命名为'Android-SDK command line tools'。 但不幸的是,目前的稳定版本Flutter SDK(v1.12.13+hotfix.8)与这个更改不兼容,并且会持续显示错误消息。

image description

解决方法:

如@Mark Ebden所建议,您可以在SDK tools页面上简单地取消选中Hide Obsolete Packages复选框,然后会看到Android SDK Tools (Obsolete) 26.1.1。安装它就行了。如果发现有什么遗漏,请阅读以下详细说明。

有关更多信息,请参见flutter存储库中的问题。


以下是在最新版Mac OS上安装android studio时所需的完整细节。

1. 安装Android Studio稳定版。

2. 打开android studio

3. 打开SDK管理器。请参见以下屏幕截图。

enter image description here

4. 确保您已下载所有必需的内容。请参见以下屏幕截图。

enter image description here

enter image description here

请注意,我使用自定义位置(/Users/darish/development/sdk/android)来存储Android SDK,而不是默认位置(Library/Android/sdk/)。

5. 转到您的主目录并检查是否存在 .bash_profile 文件。如果有,请打开它;如果没有,请创建一个。将以下内容添加到该文件中。

 export PATH="$PATH:~/development/sdk/flutter/bin"
 export ANDROID_HOME="/Users/darish/development/sdk/android"
 export PATH="$PATH:$ANDROID_HOME/platform-tools"

6. 在完成上述所有步骤后,运行 flutter doctor --android-licenses 并接受所有许可证。

flutter doctor --android-licenses

7. 现在运行flutter doctor以查看是否一切正常。如果您需要进一步的帮助,请告诉我。:)

就这些了,祝你有美好的一天:)


太好了。请随意接受答案。祝您有美好的一天。 - Darish
请说明如何获取Android路径?从哪里获取? - mercury
即使安装了过时的软件包,仍然会出现相同的错误。还有其他缺少的东西吗? - Krunal Parmar
好的,谢谢。我只需要进入Android Studio中的工具/SDK管理器,点击SDK工具,取消隐藏过时包的勾选,这样我就可以看到Andriod Sdk Tools(过时)并勾选它,然后从那里安装即可。它会要求您接受许可证,就这样。 - Neo
在我的情况下,以相反的方式安装“Android-SDK命令行工具”。 - gogog
显示剩余2条评论

1

我的解决办法:

  1. 运行flutter doctor --android-licenses -v
  2. 我收到了以下信息:

$ flutter doctor --android-licenses -v Android sdkmanager tool not found (/Users/juarse1/Library/Android/sdk/tools/bin/sdkmanager). Try re-installing or updating your Android SDK, visit https://flutter.dev/setup/#android-setup for detailed instructions.

  throwToolExit (package:flutter_tools/src/base/common.dart:28:3)
  AndroidLicenseValidator.runLicenseManager (package:flutter_tools/src/android/android_workflow.dart:311:7)
  Doctor.diagnose (package:flutter_tools/src/doctor.dart:243:38)
这是因为Android SDK无法找到命令工具,但需要强制从过时的软件包中提取,所以: 3. 进入Android Studio -> 首选项 -> 系统设置 -> Android SDK -> SDK工具部分 4. 取消底部的隐藏过时软件包勾选 5. 确保两个选项都被勾选:

Android SDK平台工具和Android SDK工具(过时)

  1. 好了,关闭Android Studio
  2. 运行flutter doctor --android-licenses,应该可以了!

1
问题似乎是在Java 11(或9和10)中,JDK中没有包含jaxb库,而且Android Studio的sdkmanager无法读取许可证XML文件。如果您正在使用Java 11,则必须将这些库包含在类路径中,您可以按照此处发布的说明操作(在Windows 10上对我有效)。

https://medium.com/@parsher/flutter-android-sdkmanager-update-with-jdk-12-ad8098165472

最后一步不是必需的。在包含了类路径行之后,运行flutter doctor,一切应该都没问题了。

0
如果您正在使用Java 11或更高版本,则只需要jaxb库即可,但是当它在JDK 11/12上运行时(特别是在Win 10上),这些库并未包含在其中。
请按照以下步骤操作:
  1. 从以下位置下载wget工具 -> https://eternallybored.org/misc/wget/ 并在计算机中设置环境变量path以在cmd提示符中运行wget命令。

  2. 找到您的Android SDSK\tools文件夹(<ANDROID_SDSK>\tools),并使用cd命令更改目录:cd <ANDROID_SDSK>\tools

  3. tools文件夹内执行以下命令:

    mkdir jaxb_lib

    wget https://repo1.maven.org/maven2/javax/activation/activation/1.1/activation-1.1.jar -O jaxb_lib/activation.jar

    wget https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-xjc/2.3.2/jaxb-xjc-2.3.2.jar -O jaxb_lib/jaxb-xjc.jar

    wget https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-core/2.3.0.1/jaxb-core-2.3.0.1.jar -O jaxb_lib/jaxb-core.jar

    wget https://repo1.maven.org/maven2/org/glassfish/jaxb/jaxb-jxc/2.3.2/jaxb-jxc-2.3.2.jar -O jaxb_lib/jaxb-jxc.jar

    wget https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1.jar -O jaxb_lib/jaxb-api.jar

    wget https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-impl/2.3.2/jaxb-impl-2.3.2.jar -O jaxb_lib/jaxb-impl.jar

    wget https://repo1.maven.org/maven2/com/sun/istack/istack-commons-runtime/3.0.8/istack-commons-runtime-3.0.8.jar -O jaxb_lib/istack-commons-runtime.jar

  4. 进入<ANDROID_SDSK>\tools\bin文件夹,并使用您喜欢的文本编辑器(记事本即可)编辑sdkmanager.batavdmanager.bat文件。

  5. 在语句‘@rem Execute sdkmanager’之前粘贴以下代码以设置类路径。

    set CLASSPATH=%CLASSPATH%;%APP_HOME%\jaxb_lib\jaxb-api.jar set CLASSPATH=%CLASSPATH%;%APP_HOME%\jaxb_lib\jaxb-core.jar set CLASSPATH=%CLASSPATH%;%APP_HOME%\jaxb_lib\jaxb-impl.jar set CLASSPATH=%CLASSPATH%;%APP_HOME%\jaxb_lib\jaxb-jxc.jar set CLASSPATH=%CLASSPATH%;%APP_HOME%\jaxb_lib\jaxb-xjc.jar set CLASSPATH=%CLASSPATH%;%APP_HOME%\jaxb_lib\activation.jar set CLASSPATH=%CLASSPATH%;%APP_HOME%\jaxb_lib\istack-commons-runtime.jar

  6. 最后执行:<ANDROID_SDSK>\tools\bin\sdkmanager --update

我们已经全部完成了。现在运行flutter doctor,你的安卓许可状态错误应该就会消失。干杯!!!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接