#!/usr/bin/env bash set -e echo "=== 🦀 Building Oxygen Rust Core for Android ===" # Check if cargo-ndk is installed if ! command -v cargo-ndk &> /dev/null; then echo "Installing cargo-ndk (Android build helper)..." cargo install cargo-ndk fi # Ensure Android targets are installed echo "Adding Rust Android targets..." rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android # Ensure NDK is set if [ -z "$ANDROID_NDK_HOME" ]; then echo "⚠️ ANDROID_NDK_HOME is not set!" echo "Please set it to your NDK path, e.g.:" echo "export ANDROID_NDK_HOME=\$HOME/Android/Sdk/ndk/27.x.x.x" exit 1 fi cd rust-core echo "Building shared libraries using cargo-ndk..." # Build for all common Android architectures and output to the JNI libs folder cargo ndk -t armeabi-v7a -t arm64-v8a -t x86_64 -o ../app/src/main/jniLibs build --release echo "Generating Kotlin bindings using uniffi-bindgen..." # Use uniffi-bindgen to generate Kotlin files cargo run --features=uniffi/cli --bin uniffi-bindgen generate \ --library ../app/src/main/jniLibs/arm64-v8a/librust_core.so \ --language kotlin \ --out-dir ../app/src/main/java echo "✅ Rust build complete! The JNI libraries and Kotlin bindings are ready."