在Arch Linux搭建Flutter开发环境时遭遇sdkmanager问题
在Arch Linux(fish shell)搭建Flutter环境时sdkmanager报错的解决方案
问题概述
在Arch Linux上使用fish shell搭建Flutter 3.7.12开发环境时,遇到以下问题:
- 普通用户执行
sdkmanager命令时报错:Error: Main class java.se.ee not found or could not be loaded. - 使用
sudo执行sdkmanager则无此错误 flutter doctor显示Android相关校验失败
已尝试:设置ANDROID_HOME、修改Android SDK目录权限、切换OpenJDK 8/11版本,但问题未解决。
解决方案
1. 统一普通用户与sudo的Java环境变量
fish shell下sudo默认不会完全继承用户环境变量,可能导致两者使用的Java版本/路径不一致:
- 普通用户终端执行:
echo $JAVA_HOME - sudo终端执行:
sudo -E echo $JAVA_HOME(-E参数保留用户环境) - 如果输出不一致,编辑
~/.config/fish/config.fish,添加对应Java版本的环境变量(以OpenJDK 8为例):set -x JAVA_HOME /usr/lib/jvm/java-8-openjdk set -x PATH $JAVA_HOME/bin $PATH - 重启shell后再次验证
$JAVA_HOME是否一致。
2. 修改sdkmanager脚本适配OpenJDK版本
OpenJDK 11+移除了java.se.ee聚合模块,旧版sdkmanager依赖该模块,需调整脚本参数:
- 打开Android SDK目录下的
tools/bin/sdkmanager文件 - 找到
DEFAULT_JVM_OPTS定义行,根据Java版本修改:
针对OpenJDK 11+:
针对OpenJDK 8:DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" --add-modules java.xml.bind,java.activation'DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME"' - 保存文件后,普通用户执行
sdkmanager --version验证是否正常运行。
3. 确保Android SDK权限与环境变量正确配置
- 重新设置Android SDK目录权限:
chown -R $USER:$USER /opt/android-sdk chmod -R u+rwx /opt/android-sdk - 在
~/.config/fish/config.fish中添加Android相关环境变量:set -x ANDROID_HOME /opt/android-sdk set -x PATH $PATH $ANDROID_HOME/tools/bin $ANDROID_HOME/platform-tools - 重启shell后执行
echo $ANDROID_HOME验证配置。
4. 重新校验Flutter环境
- 先执行
sdkmanager --update更新Android SDK工具 - 运行
flutter doctor --android-licenses接受所有许可证 - 最后执行
flutter doctor检查环境修复情况
内容的提问来源于stack exchange,提问作者user21847218
相关产品推荐
相关产品推荐

