diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..bb38431 --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1791956154, + "narHash": "sha256-jBYGPi4udQ9uo4KQp9m2J0546nJVQitG15gvZSaVVAs=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "55bfb4d7437bd4e09ab7cba58a43bd68eb310044", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..9544b6c --- /dev/null +++ b/flake.nix @@ -0,0 +1,64 @@ +{ + description = "FatihsMG4 — Android Automotive build environment"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + }; + + outputs = { self, nixpkgs }: + let + systems = [ "x86_64-linux" "aarch64-linux" ]; + forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f (import nixpkgs { + inherit system; + config = { + allowUnfree = true; + android_sdk.accept_license = true; + }; + })); + + # Must match app/build.gradle (compileSdk 36.1) and EVHardware/lib (compileSdk 36). + buildToolsVersion = "36.0.0"; + in + { + devShells = forAllSystems (pkgs: + let + android = pkgs.androidenv.composeAndroidPackages { + platformVersions = [ "36" "36.1" ]; + buildToolsVersions = [ buildToolsVersion ]; + includeEmulator = false; + includeNDK = false; + includeSources = false; + includeSystemImages = false; + }; + sdk = "${android.androidsdk}/libexec/android-sdk"; + # gradle/gradle-daemon-jvm.properties pins the daemon to JDK 21. + jdk = pkgs.jdk21; + in + { + default = pkgs.mkShell { + packages = [ jdk android.androidsdk ]; + + ANDROID_HOME = sdk; + ANDROID_SDK_ROOT = sdk; + JAVA_HOME = jdk.home; + + # AGP otherwise downloads an aapt2 binary from Maven, which is dynamically linked + # against a generic FHS and does not run on NixOS. Use the SDK's patched one. + # Gradle is also pointed at the Nix JDK so the daemon toolchain criteria are met + # locally instead of downloading a (non-NixOS) JDK through foojay. + GRADLE_OPTS = builtins.concatStringsSep " " [ + "-Dorg.gradle.project.android.aapt2FromMavenOverride=${sdk}/build-tools/${buildToolsVersion}/aapt2" + "-Dorg.gradle.java.installations.paths=${jdk.home}" + "-Dorg.gradle.java.installations.auto-download=false" + ]; + + shellHook = '' + echo "sdk.dir=$ANDROID_HOME" > local.properties + echo "FatihsMG4 dev shell — JDK $(java -version 2>&1 | head -1 | cut -d'"' -f2), SDK at $ANDROID_HOME" + echo " ./gradlew assembleStableDebug build a debug APK" + echo " ./gradlew testStableDebugUnitTest run unit tests" + ''; + }; + }); + }; +}