196 lines
6.4 KiB
Nix
196 lines
6.4 KiB
Nix
{
|
|
description = "Flutter 3.13.x";
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
};
|
|
outputs = { self, nixpkgs, flake-utils }:
|
|
flake-utils.lib.eachDefaultSystem (system:
|
|
let
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
config = {
|
|
android_sdk.accept_license = true;
|
|
allowUnfree = true;
|
|
};
|
|
};
|
|
buildToolsVersion = "34.0.0";
|
|
androidComposition = pkgs.androidenv.composeAndroidPackages {
|
|
buildToolsVersions = [ buildToolsVersion "30.0.3" ];
|
|
platformVersions = [ "29" "30" "31" "32" "33" "34" "35" "28" ];
|
|
abiVersions = [ "armeabi-v7a" "arm64-v8a" ];
|
|
# toolsVersion = "26.1.1";
|
|
# platformToolsVersion = "33.0.3";
|
|
# # buildToolsVersions = [ buildToolsVersionForAapt2 ];
|
|
includeEmulator = true;
|
|
emulatorVersion = "34.1.19";
|
|
# platformVersions = [ "28" "29" "30" "31" ];
|
|
# includeSources = false;
|
|
# includeSystemImages = false;
|
|
# systemImageTypes = [ "google_apis_playstore" ];
|
|
# abiVersions = [ "armeabi-v7a" "arm64-v8a" ];
|
|
# cmakeVersions = [ "3.10.2" ];
|
|
includeNDK = true;
|
|
ndkVersions = [ "22.0.7026061" ];
|
|
# useGoogleAPIs = false;
|
|
useGoogleTVAddOns = false;
|
|
|
|
extraLicenses = [
|
|
"android-googletv-license"
|
|
"android-sdk-arm-dbt-license"
|
|
"android-sdk-license"
|
|
"android-sdk-preview-license"
|
|
"google-gdk-license"
|
|
"intel-android-extra-license"
|
|
"intel-android-sysimage-license"
|
|
"mips-android-sysimage-license"
|
|
];
|
|
};
|
|
androidSdk = androidComposition.androidsdk;
|
|
# pubspecLock = pkgs.lib.importJSON ./pubspec.lock.json;
|
|
|
|
gradleZip = pkgs.fetchurl {
|
|
url = builtins.readFile (
|
|
pkgs.runCommandLocal "distributionUrl"
|
|
{
|
|
nativeBuildInputs = with pkgs; [ coreutils ripgrep sd ];
|
|
}
|
|
''
|
|
rg -o --replace '$1' 'distributionUrl=(.+)' ${./android/gradle/wrapper/gradle-wrapper.properties} \
|
|
| sd --fixed-strings '\:' ':' \
|
|
| tr -d '\n' \
|
|
> $out
|
|
cat $out
|
|
''
|
|
);
|
|
hash = "sha256-uwmYL99ScY5MeyUCPRDfbTWl//lphgvfWlvSejqyep4=";
|
|
};
|
|
jdk = pkgs.lib.trivial.throwIfNot (pkgs.lib.versions.major pkgs.jdk.version == "21")
|
|
"jdk updated to ${pkgs.lib.versions.major pkgs.jdk.version}, sync android/app/build.gradle versions"
|
|
pkgs.jdk;
|
|
in
|
|
{
|
|
devShell = pkgs.mkShell rec {
|
|
ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk";
|
|
CHROME_EXECUTABLE = "${pkgs.ungoogled-chromium}/bin/chromium";
|
|
JAVA_HOME = "${pkgs.jdk.home}";
|
|
|
|
GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${androidSdk}/libexec/android-sdk/build-tools/34.0.0/aapt2";
|
|
buildInputs = with pkgs; [
|
|
flutter
|
|
androidSdk
|
|
jdk17
|
|
ungoogled-chromium
|
|
android-studio-full
|
|
];
|
|
};
|
|
packages.default = pkgs.stdenv.mkDerivation {
|
|
pname = "aifred-apk";
|
|
version = "1.0.0";
|
|
src = ./.;
|
|
buildInputs = [
|
|
pkgs.flutter
|
|
androidSdk
|
|
];
|
|
|
|
ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk";
|
|
GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${androidSdk}/libexec/android-sdk/build-tools/34.0.0/aapt2";
|
|
FLUTTER_SDK = "${pkgs.flutter}";
|
|
|
|
buildPhase = ''
|
|
echo hello
|
|
echo $GRADLE_OPTS
|
|
echo $ANDROID_SDK_ROOT
|
|
echo NIX_BUILD_TOP
|
|
echo $NIX_BUILD_TOP
|
|
|
|
echo current folder
|
|
pwd
|
|
echo $HOME
|
|
|
|
mkdir .pub-cache
|
|
|
|
export PUB_CACHE="$(pwd)/.pub-cache"
|
|
echo $PUB_CACHE
|
|
|
|
flutter doctor -v
|
|
'';
|
|
};
|
|
packages.apk-flutter = pkgs.flutter327.buildFlutterApplication rec {
|
|
pname = "aifred-apk";
|
|
version = "1.0.0";
|
|
src = ./.;
|
|
targetFlutterPlatform = "universal";
|
|
autoPubspecLock = src + "/pubspec.lock";
|
|
ANDROID_HOME = "${androidSdk}/libexec/android-sdk";
|
|
ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk";
|
|
ANDROID_NDK_ROOT = "${ANDROID_HOME}/ndk-bundle";
|
|
JAVA_HOME = jdk.home;
|
|
GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${ANDROID_HOME}/build-tools/${buildToolsVersion}/aapt2";
|
|
gradleFlags = [ GRADLE_OPTS ];
|
|
|
|
|
|
preBuild = ''
|
|
set -x
|
|
|
|
export HOME=$TMPDIR
|
|
|
|
touch env.sh
|
|
|
|
|
|
# Substitute the gradle-all zip URL by a local file to prevent downloads from happening while building an Android app
|
|
${pkgs.lib.getExe pkgs.sd} 'distributionUrl=.+' 'distributionUrl=file\://${gradleZip}' android/gradle/wrapper/gradle-wrapper.properties
|
|
cat android/gradle/wrapper/gradle-wrapper.properties
|
|
|
|
# sets up gradlew wrapper
|
|
flutter build apk -v --config-only
|
|
|
|
# add nix flags to gradlew
|
|
local flagsArray=()
|
|
concatTo flagsArray gradleFlags gradleFlagsArray
|
|
|
|
local wrapperFlagsArray=()
|
|
for flag in "''${flagsArray[@]}"; do
|
|
wrapperFlagsArray+=("--add-flags" "$flag")
|
|
done
|
|
|
|
gradlewPath="$PWD/android/gradlew"
|
|
wrapProgram "$gradlewPath" \
|
|
--run 'set -x' \
|
|
--add-flags '--info' \
|
|
--add-flags '--debug' \
|
|
"''${wrapperFlagsArray[@]}"
|
|
|
|
gradle() {
|
|
command "$gradlewPath" "$@"
|
|
}
|
|
'';
|
|
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
|
|
mkdir -p build/flutter_assets/fonts
|
|
|
|
flutter build apk -v --split-debug-info="$debug" $flutterBuildFlags
|
|
|
|
runHook postBuild
|
|
'';
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
cp -v ./build/app/outputs/flutter-apk/app-release.apk $out
|
|
|
|
runHook postInstall
|
|
'';
|
|
};
|
|
packages.web = pkgs.flutter327.buildFlutterApplication rec {
|
|
pname = "aifred-web";
|
|
version = "1.0.0";
|
|
src = ./.;
|
|
targetFlutterPlatform = "web";
|
|
# inherit pubspecLock;
|
|
autoPubspecLock = src + "/pubspec.lock";
|
|
};
|
|
});
|
|
}
|