#!/usr/bin/env bash # build_native.sh - build reconstructed native libs for a given ABI via NDK + CMake. # Usage: build_native.sh [Debug|Release] # Requires: $ANDROID_NDK_HOME (or $NDK), cmake, ninja. set -euo pipefail ABI="${1:?usage: build_native.sh [Debug|Release]}" CFG="${2:-Debug}" HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJ="$(cd "$HERE/../.." && pwd)" NATIVE="$PROJ/native" JNILIBS="$PROJ/app/src/main/jniLibs/$ABI" NDK="${ANDROID_NDK_HOME:-${NDK:-}}" [ -n "$NDK" ] && [ -d "$NDK" ] || { echo "ERROR: set ANDROID_NDK_HOME (see tools/scripts/fetch_ndk.sh)"; exit 2; } [ -f "$NATIVE/CMakeLists.txt" ] || { echo "ERROR: native/CMakeLists.txt missing"; exit 3; } BUILD="$NATIVE/build/$ABI" mkdir -p "$BUILD" "$JNILIBS" echo "[*] Configuring native ($ABI, $CFG) with NDK=$NDK" cmake -S "$NATIVE" -B "$BUILD" -G Ninja \ -DCMAKE_TOOLCHAIN_FILE="$NDK/build/cmake/android.toolchain.cmake" \ -DANDROID_ABI="$ABI" -DANDROID_PLATFORM=android-21 \ -DANDROID_STL=c++_shared -DCMAKE_BUILD_TYPE="$CFG" cmake --build "$BUILD" -j"$(nproc)" echo "[*] Collecting .so into $JNILIBS" find "$BUILD" -name '*.so' -exec cp -f {} "$JNILIBS/" \; echo "[+] Native build done for $ABI:"; ls -1 "$JNILIBS" || true