set -euo pipefail HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" S="$HERE/tools/scripts" REQUIRED_LIBS=(libfmod.so libg.so libcr.so) ABI="" while [ $# -gt 0 ]; do case "$1" in --abi) ABI="${2:-}"; shift 2;; -h|--help) sed -n '2,12p' "$0"; exit 0;; *) echo "unknown arg: $1"; exit 1;; esac done [ -n "$ABI" ] || { echo "usage: ./build.sh --abi "; exit 1; } case "$ABI" in 32) ABI=armeabi-v7a;; 64) ABI=arm64-v8a;; both|all) ABI=universal;; armeabi-v7a|arm64-v8a|universal) ;; *) echo "invalid --abi '$ABI'"; exit 1;; esac case "$ABI" in universal) ABIS=(armeabi-v7a arm64-v8a);; *) ABIS=("$ABI");; esac echo "==> Target ABI: $ABI (build set: ${ABIS[*]})" echo "==> Checking tools" miss=0 for t in java cmake ninja; do command -v "$t" >/dev/null || { echo " MISSING: $t"; miss=1; }; done command -v gradle >/dev/null || [ -x "$HERE/gradlew" ] || { echo " MISSING: gradle/gradlew"; miss=1; } [ -n "${ANDROID_NDK_HOME:-${NDK:-}}" ] || echo " WARN: ANDROID_NDK_HOME unset (needed for native build; see tools/scripts/fetch_ndk.sh)" [ -n "${ANDROID_HOME:-${ANDROID_SDK_ROOT:-}}" ] || echo " WARN: ANDROID_HOME unset (needed for Gradle/AAPT2/apksigner; see tools/scripts/fetch_sdk.sh)" [ "$miss" -eq 0 ] || { echo "==> Install missing tools first (analysis/TOOLCHAIN.md)"; exit 2; } for abi in "${ABIS[@]}"; do echo "==> Native build: $abi" "$S/build_native.sh" "$abi" Debug done echo "==> Verifying required native libs are present per ABI" for abi in "${ABIS[@]}"; do d="$HERE/app/src/main/jniLibs/$abi" for req in "${REQUIRED_LIBS[@]}"; do [ -f "$d/$req" ] || { echo " ERROR: $abi missing required $req"; \ echo " -> reconstruct/replace it before building this ABI (see SHARED_LIBRARY_PORTING_PLAN.md)"; exit 3; } if [ "$abi" = arm64-v8a ] && ! file -b "$d/$req" | grep -qi '64-bit'; then echo " ERROR: $abi/$req is not ELF64 (arm64 INCOMPLETE)"; exit 3; fi done done echo "==> Gradle app build ($ABI)" "$S/build_project.sh" "$ABI" "$S/package_apk.sh" "$ABI" OUT_APK="$HERE/out/app-${ABI}-debug.apk" "$S/sign_apk.sh" "$OUT_APK" "$S/verify_apk.sh" "$OUT_APK" "$ABI" echo "==> DONE: $OUT_APK"