From 2c80b00fad5d07a40363a65e735592466c34018e Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Wed, 2 Jul 2025 11:40:23 -0600 Subject: [PATCH 1/4] Print ndk env --- .github/workflows/android.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 5c09328..22157b7 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -8,11 +8,11 @@ jobs: if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: distribution: "temurin" java-version: "17" @@ -30,6 +30,7 @@ jobs: x86_64-linux-android \ i686-linux-android cargo install cargo-ndk + cargo ndk-env - name: Build for Android run: | From 7825539e1a74097c93648a96f984a5e44890c973 Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Wed, 2 Jul 2025 12:26:55 -0600 Subject: [PATCH 2/4] Use NDK 28 --- .github/workflows/android.yml | 1 - android/build.gradle.kts | 33 +++++++++++++++++++ .../gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 22157b7..54c9b0b 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -30,7 +30,6 @@ jobs: x86_64-linux-android \ i686-linux-android cargo install cargo-ndk - cargo ndk-env - name: Build for Android run: | diff --git a/android/build.gradle.kts b/android/build.gradle.kts index 7ed202f..bfa55ae 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -1,4 +1,11 @@ +import org.gradle.tooling.BuildException import java.util.Base64 +import java.util.Properties +import kotlin.io.path.Path +import kotlin.io.path.absolutePathString +import kotlin.io.path.exists +import kotlin.io.path.listDirectoryEntries +import kotlin.io.path.name plugins { id("maven-publish") @@ -14,7 +21,33 @@ repositories { google() } +fun ndkPath(): String { + val properties = Properties() + properties.load(project.rootProject.file("local.properties").inputStream()) + + val androidHome = properties["sdk.dir"] ?: System.getenv("ANDROID_HOME") + check(androidHome != null) { "Could not find android SDK dir" } + + val ndks = Path(androidHome.toString()).resolve("ndk") + check(ndks.exists()) { "Expected NDK installations at $ndks" } + + for (entry in ndks.listDirectoryEntries()) { + val name = entry.name + val majorVersion = name.split('.').first().toInt() + + // We want to use NDK 28 or newer to build with 16KB support by default. + if (majorVersion >= 28) { + return entry.absolutePathString() + } + } + + error("Expected an NDK 28 or later installation in $ndks") +} + val buildRust = tasks.register("buildRust") { + group = "build" + environment("ANDROID_NDK_HOME", ndkPath()) + workingDir("..") commandLine( "cargo", diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index b82aa23..ff23a68 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 37dd12dc6f4e5b91efe2278fd617055ff5c729c7 Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Wed, 2 Jul 2025 12:32:37 -0600 Subject: [PATCH 3/4] Don't require local.properties --- android/build.gradle.kts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/android/build.gradle.kts b/android/build.gradle.kts index bfa55ae..ff4b8b3 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -22,13 +22,21 @@ repositories { } fun ndkPath(): String { - val properties = Properties() - properties.load(project.rootProject.file("local.properties").inputStream()) + val file = project.rootProject.file("local.properties") + var androidHome = System.getenv("ANDROID_HOME") + + if (file.exists()) { + val properties = Properties() + properties.load(project.rootProject.file("local.properties").inputStream()) + + properties["sdk.dir"]?.let { + androidHome = it as String + } + } - val androidHome = properties["sdk.dir"] ?: System.getenv("ANDROID_HOME") check(androidHome != null) { "Could not find android SDK dir" } - val ndks = Path(androidHome.toString()).resolve("ndk") + val ndks = Path(androidHome).resolve("ndk") check(ndks.exists()) { "Expected NDK installations at $ndks" } for (entry in ndks.listDirectoryEntries()) { From 9af9e4c2603a10b56af0bfa317292db41c6cd2f8 Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Wed, 2 Jul 2025 12:35:05 -0600 Subject: [PATCH 4/4] Upload asset for inspection when we're done --- .github/workflows/android.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 54c9b0b..6ac1271 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -36,3 +36,10 @@ jobs: cd android ./gradlew build ls -lh build/outputs/aar + + - name: Upload Android library + uses: actions/upload-artifact@v4 + with: + name: android-library + path: | + android/build/outputs/aar/