You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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+:
    DEFAULT_JVM_OPTS='"-Dcom.android.sdklib.toolsdir=$APP_HOME" --add-modules java.xml.bind,java.activation'
    
    针对OpenJDK 8:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 06:30:11