From 57aa0ab57b300d0e974a90cb34be8cb419276a1d Mon Sep 17 00:00:00 2001 From: Arnie via Claude Date: Fri, 12 Jun 2026 12:25:47 +0200 Subject: [PATCH] fix: use shellHook to set aapt2 override via gradle.properties AGP 8.7.3 reads android.aapt2FromMavenOverride via providers.gradleProperty() which only reads gradle.properties files, not JVM system properties set via GRADLE_OPTS -D. The shellHook rewrites the sentinel value on every nix develop so the correct nix store path is always present before gradle runs. --- flake.nix | 10 ++++++++-- gradle.properties | 3 +++ 2 files changed, 11 insertions(+), 2 deletions(-) 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__