nixos 下开发环境可以独立配置,较为简单的开发环境类似 golang nodejs等较为简单。而flutter将对来说较为复杂。
先看nixos 下开发环境可以独立配置。 在现有的flutter项目目录下,或者打算储存flutter项目的目录里面创建一个flake.nix 文件内容如下。
flake.nix
nix develop --impure --show-trace
命令进入flutter环境
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
| # 注意dl.google.com 有可能会被域名分流掉代理,实际只要解析没问题国内可以直连
# idea 打开项目后提示没有dart sdk 不用管,直接配置flutter的sdk 这里是 /nix/store/wkaqj97xj7glb0a0za3iplwcj95jm6mj-flutter-wrapped-3.19.0-sdk-links
# flutter pub get
{
description = "Flutter 3.19.x";
inputs = {
# nixpkgs.url = "github:NixOS/nixpkgs/23.11";
# https://mirrors.ustc.edu.cn/nix-channels/nixpkgs-unstable/nixexprs.tar.xz?narHash=sha256-LuNFBL0P7GGtv6dNmLbD5MeyGlor0uV2482QhZRwbI8%3D' (2024-04-04)
nixpkgs.url = "https://mirrors.ustc.edu.cn/nix-channels/nixpkgs-unstable/nixexprs.tar.xz";
flake-utils.url = "github:numtide/flake-utils";
};
# build-tools-30-0-3 platforms-android-33
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
inherit system;
config = {
android_sdk.accept_license = true; #貌似无效但是不影响使用
allowUnfree = true;
};
};
# platforms;android-33 Android SDK Platform 33
buildToolsVersion = "34.0.0";
androidComposition = pkgs.androidenv.composeAndroidPackages {
buildToolsVersions = [ buildToolsVersion "30.0.3" ];
platformVersions = [ "34" "33" "29" "28" ]; #具体需要用那个版本 还是要看代码里面 以及真机/模拟器的版本
abiVersions = [ "armeabi-v7a" "arm64-v8a" ];
};
androidSdk = androidComposition.androidsdk;
in
{
devShell =
with pkgs; mkShell rec {
#真机调试需要配GRADLE_OPTS
GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${androidSdk}/libexec/android-sdk/build-tools/34.0.0/aapt2"; # 30.0.3 34.0.0
ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk";
#ANDROID_HOME = "${androidSdk}/libexec/android-sdk";
JAVA_HOME = "${pkgs.jdk17.home}";
CHROME_EXECUTABLE = "${pkgs.chromium}/bin/chromium";
buildInputs = [
flutter319 # flutter316 flutter313 flutter=3.19
androidSdk # The customized SDK that we've made above
gradle #Gradle=8.6 gradle_7 gradle_6
jdk17 # 最好指定版本,不然可能需要处理gradle和jdk版本的兼容 jdk="21"
#ninja cmake glibc # linux下调试桌面应用用 需要自行装到 home.packages 装这里可能有问题,c和rust也需要所以不写这里
fish
chromium
#jetbrains.idea-ultimate
];
shellHook = ''
echo " 你可能需要运行下面的命令 "
echo " rm -rf ~/.pub-cache "
echo " rm -rf ~/.gradle "
echo " rm -rf ~/.dart "
echo " rm -rf ~/.dartServer "
echo " flutter pub get "
exec fish
'';
};
});
}
|
使用注意
这里没有用nix管理idea的插件,需要手动在idea安装 flutter和 android插件。
dar sdk
idea打开对应的项目的时候 会提示配置dart sdk 这是因为他没有识别的到这是flutter项目。不用例会,直接去配置flutter 的sdk即可。如果有多个版本和环境,可以cd到对应环境的/nix/store/xxx 检查版本,注意选择。
真机/模拟器调试 无法adb
当前用户组需要在 adbusers 组里,需要在configuration.nix 里配置
1
2
3
4
5
6
7
| programs.adb.enable = true;
users.users.你的用户名 = {
# ...其他配置项
extraGroups = [
# ... 其他用户组
"adbusers"
]
|
其他错误
1、网络问题,注意科学上网环境和分流规则。需要东github和google下载一些文件。
2、版本匹配文件,检查项目里面的安卓配置相关的情况