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.
This commit is contained in:
Arnie via Claude
2026-06-12 12:25:47 +02:00
parent 1a2f687a88
commit 57aa0ab57b
2 changed files with 11 additions and 2 deletions
+8 -2
View File
@@ -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
'';
};
}
);
+3
View File
@@ -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__