[Android 问题集锦] cmdline-tools component is missing

2,906 阅读2分钟

原因

今天在运行 Flutter 项目的时候, 突然报错 ECL 无法配置, 既然是环境问题, 我们直接在控制台输入

flutter doctor --verbose

或者在Android Studio 顶部菜单栏中选择 Tools -> Flutter -> Flutter Doctor, 这两种方式是一样的

这里会显示当前 Flutter 的环境配置信息.

[✓] Flutter (Channel stable, 2.8.1, on macOS 11.6 20G165 darwin-x64, locale zh-Hans-CN)
[!] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    ✗ cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
    ✗ Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.
[✓] Xcode - develop for iOS and macOS (Xcode 13.0)
[✓] Chrome - develop for the web

提示上要我们去通过 sdkmanager 去安装这个工具, 这里我们直接在控制台输入

 ~/Library/Android/sdk/tools/bin/sdkmanager --install "cmdline-tools;latest"

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

由此, 我们正式采用以下方法解决

解决办法

image.png

  1. 打开 Android Studio 的偏好设置
  2. 在 Android SDK -> SDK Tools -> Android SDK Command-line Tools(latest), 点击此选项, 再点击下面的 Apply, 开始下载安装.
  3. 安装完之后, 再次使用 flutter doctor --verbose , 检测环境是否完整.

这里我遇到的问题是在 SDK Tools 下面没有出现 Android SDK Command-line Tools(latest) 这一栏,

我通过卸载重装 Android SDK, 再次打开 SDK Tools, Command-line 这一栏终于出现了.

image.png

卸载 Android SDK 的方式是取消勾选对应的SDK版本, 再次点击 Apply, 开始卸载SDK. 我们需要重新在 SDK Platforms 寻找我们需要的 SDK 版本开始下载安装.

有可能你在 SDK Platforms 无法显示 31, 30 这些版本的 SDK, 建议重启 Android Studio, 在偏好设置里面重新进入.

参考

I am getting error "cmdline-tools component is missing" after installing Flutter and Android Studio... I added the Android SDK. How can I solve them?