NixOS环境下执行flutter run报错,求解决方案
问题描述
执行flutter run时出现以下错误:
- What went wrong:
Error resolving plugin [id: 'dev.flutter.flutter-gradle-plugin', version: '1.0.0']A problem occurred configuring project ':gradle'.
Could not create service of type OutputFilesRepository using ExecutionGradleServices.createOutputFilesRepository().
Failed to create parent directory '/nix/store/lbi43bsi63zvp7wjgswsp1vjrg4pv9b2-flutter-3.13.4-unwrapped/packages/flutter_tools/gradle/.gradle' when creating directory '/nix/store/lbi43bsi63zvp7wjgswsp1vjrg4pv9b2-flutter-3.13.4-unwrapped/packages/flutter_tools/gradle/.gradle/buildOutputCleanup'
核心原因是NixOS的/nix/store为只读目录,但Gradle默认尝试在Flutter工具的安装目录下生成缓存文件,触发权限不足报错。
解决方法
方法1:临时指定Gradle可写缓存目录
运行Flutter命令时,通过环境变量将Gradle用户目录指向个人可写路径:
GRADLE_USER_HOME="$HOME/.gradle" flutter run
如果需要长期生效,可将环境变量写入shell配置文件(如~/.bashrc或~/.zshrc):
echo 'export GRADLE_USER_HOME="$HOME/.gradle"' >> ~/.bashrc source ~/.bashrc
方法2:通过NixOS系统配置全局生效
在/etc/nixos/configuration.nix中添加全局环境变量配置:
environment.variables = { GRADLE_USER_HOME = "/home/你的用户名/.gradle"; };
执行以下命令应用配置:
sudo nixos-rebuild switch
方法3:调整项目本地Gradle配置
在Flutter项目的android/gradle/wrapper/gradle-wrapper.properties文件中,修改distributionUrl指向本地可写目录下的Gradle包,或直接使用Nix提供的Gradle路径(需确保对应路径有读写权限)。
内容的提问来源于stack exchange,提问作者Barsch

