Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions .github/workflows/publish.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,11 @@ jobs:
echo "$SIGNING_KEY" | gpg --dearmor > ${HOME}/secring.gpg

- name: Install Android NDK
# The NDK the Android Gradle plugin uses, which builds every Android native library
run: yes | "$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" --install "ndk;28.2.13676358"
# Runners preset ANDROID_NDK_HOME to an older NDK, which KonanPlugin prefers over the Android
# Gradle plugin's; point it at NDK 28, whose linker aligns to 16 KB pages by default.
run: |
yes | "$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" --install "ndk;28.2.13676358" > /dev/null
echo "ANDROID_NDK_HOME=$ANDROID_HOME/ndk/28.2.13676358" >> "$GITHUB_ENV"

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
Expand All @@ -33,6 +36,11 @@ jobs:
with:
xcode-version: latest-stable

- name: Check 16 KB page alignment
run: |
./gradlew --no-configuration-cache :soundfont:bundleAndroidMainAar
scripts/check-16kb-alignment.sh soundfont/build/outputs/aar/soundfont.aar

- name: Publish To Maven Central
env:
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
Expand Down
12 changes: 12 additions & 0 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,13 @@ jobs:
distribution: 'zulu'
java-version: '17'

- name: Install Android NDK
# Runners preset ANDROID_NDK_HOME to an older NDK, which KonanPlugin prefers over the Android
# Gradle plugin's; point it at NDK 28, whose linker aligns to 16 KB pages by default.
run: |
yes | "$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" --install "ndk;28.2.13676358" > /dev/null
echo "ANDROID_NDK_HOME=$ANDROID_HOME/ndk/28.2.13676358" >> "$GITHUB_ENV"

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4

Expand All @@ -37,6 +44,11 @@ jobs:
- name: Run tests
run: ./gradlew :soundfont:linuxX64Test

- name: Check 16 KB page alignment
run: |
./gradlew :soundfont:bundleAndroidMainAar
scripts/check-16kb-alignment.sh soundfont/build/outputs/aar/soundfont.aar

- name: Upload test reports
if: failure()
uses: actions/upload-artifact@v4
Expand Down
24 changes: 24 additions & 0 deletions scripts/check-16kb-alignment.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/usr/bin/env sh
# Fails unless every 64-bit native library in the given AAR has 16 KB aligned LOAD segments,
# which Google Play requires for Android 15+ devices with 16 KB pages.
# Usage: scripts/check-16kb-alignment.sh path/to/library.aar
set -eu

aar=$1
readelf=$(ls "${ANDROID_NDK_HOME:?set ANDROID_NDK_HOME}"/toolchains/llvm/prebuilt/*/bin/llvm-readelf | head -1)
work=$(mktemp -d)
trap 'rm -rf "$work"' EXIT
unzip -q "$aar" 'jni/*' -d "$work"

status=0
for so in "$work"/jni/arm64-v8a/*.so "$work"/jni/x86_64/*.so; do
[ -e "$so" ] || { echo "missing 64-bit libraries in $aar"; exit 1; }
for align in $("$readelf" -lW "$so" | awk '$1 == "LOAD" { print $NF }'); do
if [ $((align)) -lt 16384 ]; then
echo "FAIL ${so#"$work"/}: LOAD segment aligned to $align"
status=1
fi
done
[ $status -eq 0 ] && echo "ok ${so#"$work"/}"
done
exit $status
Loading