#!/usr/bin/env bash # Build + install egtest (egui grid, no textures) on the emulator or phone. # ./build.sh # x86_64 (emulator) + install # ./build.sh aarch64 # phone + install # ./build.sh no-install set -euo pipefail cd "$(dirname "$0")/.." export ANDROID_HOME=$HOME/android-sdk export ANDROID_NDK_ROOT=$HOME/android-sdk/ndk/27.0.12077973 export PATH="$HOME/.cargo/bin:$ANDROID_HOME/platform-tools:$PATH" SDK_PLATFORM=android-35 export ANDROID_JAR=$HOME/android-sdk/platforms/$SDK_PLATFORM/android.jar NDK_BIN=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin arg1=${1:-x86_64} arg2=${2:-install} case $arg1 in x86_64) export ANDROID_ABI=x86_64; export CC_x86_64_linux_android=$NDK_BIN/x86_64-linux-android26-clang CXX_x86_64_linux_android=$NDK_BIN/x86_64-linux-android26-clang++ AR_x86_64_linux_android=$NDK_BIN/llvm-ar; target=x86_64-linux-android ;; aarch64) export ANDROID_ABI=arm64-v8a; export CC_aarch64_linux_android=$NDK_BIN/aarch64-linux-android26-clang CXX_aarch64_linux_android=$NDK_BIN/aarch64-linux-android26-clang++ AR_aarch64_linux_android=$NDK_BIN/llvm-ar; target=aarch64-linux-android ;; *) echo "unknown: $arg1"; exit 1 ;; esac # 16KB-page kernel (Pixel 9 Pro) rejects .so with p_align that the segment # offsets don't satisfy — pin max-page-size to 4 KB (sltest-verified layout). export RUSTFLAGS="-C link-arg=-Wl,-z,max-page-size=4096" export CARGO_APK_RELEASE_KEYSTORE=$HOME/.android/debug.keystore export CARGO_APK_RELEASE_KEYSTORE_PASSWORD=android adb=(); [ -n "${ADB_SERIAL:-}" ] && adb=(adb -s "$ADB_SERIAL") cargo apk2 build --release --target "$target" --lib apk=target/release/apk/egtest.apk echo "APK: $apk ($(du -h "$apk" | cut -f1))" if [ "$arg2" = install ] && command -v adb >/dev/null; then "${adb[@]}" install -r "$apk" "${adb[@]}" shell am start -n wow.gmp.egtest/android.app.NativeActivity || true fi