From ac998b394d60245f2d0361245c6000870dc6376a Mon Sep 17 00:00:00 2001 From: randogoth Date: Mon, 12 Oct 2026 08:17:49 +0300 Subject: [PATCH] fix: build Android against the devbox-managed JDK and NDK --- app/android/.gitignore | 1 + app/android/app/build.gradle.kts | 5 ++++- app/android/build.gradle.kts | 19 +++++++++++++++++++ devbox.json | 8 +++++++- devbox.lock | 4 ++++ 5 files changed, 35 insertions(+), 2 deletions(-) diff --git a/app/android/.gitignore b/app/android/.gitignore index be3943c..e330ecc 100644 --- a/app/android/.gitignore +++ b/app/android/.gitignore @@ -1,5 +1,6 @@ gradle-wrapper.jar /.gradle +/build /captures/ /gradlew /gradlew.bat diff --git a/app/android/app/build.gradle.kts b/app/android/app/build.gradle.kts index 224284f..8674251 100644 --- a/app/android/app/build.gradle.kts +++ b/app/android/app/build.gradle.kts @@ -8,7 +8,10 @@ plugins { android { namespace = "page.mews.mews" compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion + // The devbox-managed SDK ships this NDK and is read-only, so Gradle + // cannot install the Flutter default beside it; the version is pinned to + // what nix-android-sdk provides. + ndkVersion = "27.0.12077973" compileOptions { sourceCompatibility = JavaVersion.VERSION_17 diff --git a/app/android/build.gradle.kts b/app/android/build.gradle.kts index dbee657..3ec84e0 100644 --- a/app/android/build.gradle.kts +++ b/app/android/build.gradle.kts @@ -19,6 +19,25 @@ subprojects { project.evaluationDependsOn(":app") } +// The devbox-managed SDK ships one NDK and is read-only, so Gradle can never +// install another beside it. Plugin build scripts ask for Flutter's default +// NDK, which the SDK does not carry; every project is therefore pinned to +// the one it does. Matches the app's own pin in app/build.gradle.kts. +gradle.afterProject { + // The devbox-managed SDK ships one NDK and is read-only, so Gradle can + // never install another beside it. Plugin build scripts ask for + // Flutter's default NDK, which the SDK does not carry; every project + // is therefore pinned to the one it does, as the app itself is. + val android = extensions.findByName("android") ?: return@afterProject + try { + android::class.java + .getMethod("setNdkVersion", String::class.java) + .invoke(android, "27.0.12077973") + } catch (_: NoSuchMethodException) { + // Nothing to pin. + } +} + tasks.register("clean") { delete(rootProject.layout.buildDirectory) } diff --git a/devbox.json b/devbox.json index 8de57f8..2369bf2 100644 --- a/devbox.json +++ b/devbox.json @@ -2,6 +2,7 @@ "$schema": "https://raw.githubusercontent.com/jetify-com/devbox/main/schema/schemas/devbox.schema.json", "packages": { "flutter@3.41.9-sdk-links": {}, + "nixpkgs#openjdk17": {}, "path:./nix-android-sdk#android-sdk": {}, "gtk3": {}, "clang": {}, @@ -10,10 +11,15 @@ "pkg-config": {}, "patchelf": {} }, + "env": { + "ANDROID_HOME": "$DEVBOX_PACKAGES_DIR/share/android-sdk", + "ANDROID_SDK_ROOT": "$DEVBOX_PACKAGES_DIR/share/android-sdk" + }, "shell": { "init_hook": [ "export PKG_CONFIG_PATH=\"$PWD/.devbox/nix/profile/default/lib/pkgconfig:$PKG_CONFIG_PATH\"", - "export LD_LIBRARY_PATH=\"$PWD/.devbox/nix/profile/default/lib:$LD_LIBRARY_PATH\"" + "export LD_LIBRARY_PATH=\"$PWD/.devbox/nix/profile/default/lib:$LD_LIBRARY_PATH\"", + "flutter config --jdk-dir \"$(dirname \"$(dirname \"$(command -v java)\")\")\" > /dev/null" ], "scripts": { "analyze": "cd app && flutter analyze", diff --git a/devbox.lock b/devbox.lock index 26efb38..abfef91 100644 --- a/devbox.lock +++ b/devbox.lock @@ -69,6 +69,10 @@ "resolved": "github:NixOS/nixpkgs/b6c8664de9b6cc07fe5666a29f91884ba81197c4?narHash=sha256-641r7xrlSOHYoktL9%2FaArPIYNgZJ9eM5URzSEOtPJDY%3D#ninja", "source": "nixpkg" }, + "nixpkgs#openjdk17": { + "last_modified": "1970-01-01T00:00:00Z", + "resolved": "path:/nix/store/v8ynlbrldn7k8byb1kx0j0wka8dsbrw9-source?narHash=sha256-BZWCi9ZRJiARTuKTbbtvFTj7t1TK4G3UEckT3HyNfRg%3D#openjdk17" + }, "patchelf": { "resolved": "github:NixOS/nixpkgs/b6c8664de9b6cc07fe5666a29f91884ba81197c4?narHash=sha256-641r7xrlSOHYoktL9%2FaArPIYNgZJ9eM5URzSEOtPJDY%3D#patchelf", "source": "nixpkg"