原因
今天在运行 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
由此, 我们正式采用以下方法解决
解决办法
- 打开 Android Studio 的偏好设置
在 Android SDK -> SDK Tools -> Android SDK Command-line Tools(latest)
, 点击此选项, 再点击下面的Apply
, 开始下载安装.- 安装完之后, 再次使用
flutter doctor --verbose
, 检测环境是否完整.
这里我遇到的问题是在 SDK Tools
下面没有出现 Android SDK Command-line Tools(latest)
这一栏,
我通过卸载重装 Android SDK, 再次打开 SDK Tools, Command-line 这一栏终于出现了.
卸载 Android SDK 的方式是取消勾选对应的SDK版本, 再次点击 Apply, 开始卸载SDK. 我们需要重新在 SDK Platforms 寻找我们需要的 SDK 版本开始下载安装.
有可能你在 SDK Platforms 无法显示 31, 30 这些版本的 SDK, 建议重启 Android Studio, 在偏好设置里面重新进入.