Android Studio 在没有 sdkmanager 的情况下安装

Posted

技术标签:

【中文标题】Android Studio 在没有 sdkmanager 的情况下安装【英文标题】:Android Studio installs without sdkmanager 【发布时间】:2020-06-13 01:43:16 【问题描述】:

我一直在使用 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 子目录和里面的好东西?如果我忽略了一些基本的东西,谢谢和抱歉。

【问题讨论】:

【参考方案1】:

如果您使用的是 Java 11 或更高版本,您只需要在 JDK 11/12 运行时(尤其是在 Win 10 上)不包含的 jaxb 库。

按照以下步骤操作:

    从该位置下载 wget 工具 -> https://eternallybored.org/misc/wget/ 并在您的计算机中设置环境变量 path 以在 cmd 提示符下运行 wget 命令

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

    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

    转到 \tools\bin 文件夹并使用您喜欢的文本编辑器编辑 sdkmanager.batavdmanager.bat 文件(记事本可以)。

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

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

    最后执行:\tools\bin\sdkmanager --update

我们都完成了。现在运行 flutter doctor,现在您的 android 许可证状态错误应该会消失。干杯!!!

【讨论】:

【参考方案2】:

问题似乎是在 java 11(或 9 和 10)中,jaxb 库不包含在 JDK 中,并且 android studio sdkmanager 无法读取许可证 xml 文件。 您必须在类路径中包含此库(如果您使用的是 Java 11),您可以按照此处发布的说明进行操作(它在 Windows 10 中对我有用)

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

最后一步不是必需的。包含 classpath 行后,运行 de flutter doctor 应该一切正常。

【讨论】:

【参考方案3】:

更新 1 (2020-02-29)

似乎最新版本的 Android SDK 将“Android SDK 工具”包重命名为“Android-SDK 命令行工具”。 但不幸的是,当前稳定版的 Flutter SDK (v1.12.13+hotfix.8) 与此更改不兼容,并且一直显示错误消息。

解决方法:

正如@Mark Ebden 建议的那样,您只需取消选中SDK 工具 页面上的Hide Obsolete Packages 复选框,您就会看到Android SDK Tools (Obsolete) 26.1.1。安装它,你就可以开始了。如果您发现缺少任何东西,请阅读以下详细说明。

查看this关于flutter repo的问题了解更多信息。


以下是您在使用最新版本的 Mac OS 安装 android studio 时所需的完整详细信息。

1.安装 Android Studio 稳定版。

2。打开安卓工作室

3.打开 SDK 管理器。请参阅下面的屏幕截图。

4.确保您已下载所有必需的东西。请参阅下面的屏幕截图。

请注意,我正在为我的 Android SDK 使用自定义位置 (/Users/darish/development/sdk/android),而不是默认位置 (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 看看一切正常。如果您需要任何进一步的帮助,请告诉我。 :)

就是这样,祝你有美好的一天:)

【讨论】:

谢谢,问题是在第 4 步中,我的屏幕缺少Android SDK tools。在Android SDK Platform-ToolsDocumentation for Android SDK 之间,什么都没有。也许您比今天的 android-studio-ide-192.6241897-mac.dmg 更早下载了 2020 年 2 月 12 日的 3.6 版。**** 但是您的屏幕截图令人鼓舞。我取消选中Hide Obsolete Packages 并看到Android SDK Tools (Obsolete) 26.1.1 出现。我安装了这个,现在一切正常。 **** 点击查看 Flutter 中bug 的详细信息。 太棒了。随意接受答案。祝你有美好的一天。 请说明如何获取android路径?从哪里来? 安卓路径是指我们在SDK管理器中定义的安卓SDK路径。你在哪里卡住了? 即使在安装过时的软件包后仍然出现相同的错误。还有什么遗漏的吗?【参考方案4】:

什么对我有用:

    运行颤振医生 --android-licenses -v 我收到一条消息,内容如下:

$ flutter doctor --android-licenses -v Android sdkmanager 工具不行 找到(/Users/juarse1/Library/Android/sdk/tools/bin/sdkmanager)。尝试 重新安装或更新您的 Android SDK,请访问 https://flutter.dev/setup/#android-setup 获取详细说明。

  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 工具(已过时)

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

【讨论】:

以上是关于Android Studio 在没有 sdkmanager 的情况下安装的主要内容,如果未能解决你的问题,请参考以下文章

SDKMAN——The Software Development Kit Manager

Linux安装sdkman

android studio preview在哪 在 View -> Tool Windows 没有 Preview

sdkman 的酷炫 Logo 欢迎界面: 安装 kscript (Kotlin Shell)

Eclipse 找不到使用 sdkman 安装的 jdk

sh 安装sdkman.io