diff --git a/flake.nix b/flake.nix index eb0ca79..968e20f 100644 --- a/flake.nix +++ b/flake.nix @@ -54,9 +54,15 @@ ANDROID_HOME = sdkRoot; ANDROID_SDK_ROOT = sdkRoot; + # NixOS gotcha: AGP downloads a dynamically-linked aapt2 from Maven - # that can't run on NixOS. Point it at the SDK's own aapt2 instead. - GRADLE_OPTS = "-Dandroid.aapt2FromMavenOverride=${sdkRoot}/build-tools/${buildToolsVersion}/aapt2"; + # that can't run on NixOS. AGP reads the override from gradle.properties + # as a project property (not a JVM system property), so GRADLE_OPTS -D + # flags don't work. The shellHook writes the correct nix store path + # directly into gradle.properties so providers.gradleProperty() finds it. + shellHook = '' + sed -i "s|android.aapt2FromMavenOverride=.*|android.aapt2FromMavenOverride=${sdkRoot}/build-tools/${buildToolsVersion}/aapt2|" gradle.properties + ''; }; } ); diff --git a/gradle.properties b/gradle.properties index 660848f..d95c162 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,5 @@ org.gradle.jvmargs=-Xmx2g android.useAndroidX=true +# NixOS: AGP cannot run the Maven-downloaded aapt2 (dynamically linked generic Linux binary). +# Value is rewritten by the nix shellHook on every `nix develop` — do not edit manually. +android.aapt2FromMavenOverride=__NIX_SHELLHOOK_SETS_THIS__