church-core/build_android.sh
RTSDA 4d6b23beb3
Some checks are pending
iOS UniFFI Build / build-ios (push) Waiting to run
Initial commit: Church Core Rust library
Add church management API library with cross-platform support for iOS, Android, and WASM.
Features include event management, bulletin handling, contact forms, and authentication.
2025-08-16 19:25:01 -04:00

120 lines
3.9 KiB
Bash
Executable file

#!/bin/bash
# UniFFI Android Build Script
# Generates Kotlin bindings and Android libraries
set -e
echo "🤖 Building UniFFI Android Library..."
# Clean previous Android builds
echo "🧹 Cleaning previous Android builds..."
rm -rf bindings/android/
mkdir -p bindings/android
# Install required tools
if ! command -v uniffi-bindgen &> /dev/null; then
echo "📦 Installing uniffi_bindgen..."
cargo install uniffi_bindgen --bin uniffi-bindgen
fi
if ! command -v cargo-ndk &> /dev/null; then
echo "📦 Installing cargo-ndk..."
cargo install cargo-ndk
fi
# Android targets for cargo-ndk
ANDROID_ABIS=(
"arm64-v8a" # ARM64 devices
"armeabi-v7a" # ARM32 devices
"x86_64" # x86_64 emulator
"x86" # x86 emulator
)
echo "🔧 Building Rust library for Android targets using cargo-ndk..."
for abi in "${ANDROID_ABIS[@]}"; do
echo "Building for $abi..."
cargo ndk --target $abi --platform 21 build --release --features uniffi
done
echo "⚡ Generating Kotlin bindings..."
# Find the first available library for binding generation
if [ -f "target/aarch64-linux-android/release/libchurch_core.so" ]; then
LIB_FILE="target/aarch64-linux-android/release/libchurch_core.so"
else
# Find any available library
LIB_FILE=$(find target -name "libchurch_core.so" -type f | head -1)
fi
# Generate Kotlin bindings using uniffi_bindgen
uniffi-bindgen generate \
src/church_core.udl \
--language kotlin \
--out-dir bindings/android \
--lib-file "$LIB_FILE"
echo "📁 Organizing Android libraries..."
# Create JNI library structure
mkdir -p bindings/android/jniLibs/arm64-v8a
mkdir -p bindings/android/jniLibs/armeabi-v7a
mkdir -p bindings/android/jniLibs/x86_64
mkdir -p bindings/android/jniLibs/x86
# Copy libraries to JNI structure (cargo-ndk puts them in different locations)
if [ -f "target/aarch64-linux-android/release/libchurch_core.so" ]; then
cp target/aarch64-linux-android/release/libchurch_core.so bindings/android/jniLibs/arm64-v8a/
fi
if [ -f "target/armv7-linux-androideabi/release/libchurch_core.so" ]; then
cp target/armv7-linux-androideabi/release/libchurch_core.so bindings/android/jniLibs/armeabi-v7a/
fi
if [ -f "target/x86_64-linux-android/release/libchurch_core.so" ]; then
cp target/x86_64-linux-android/release/libchurch_core.so bindings/android/jniLibs/x86_64/
fi
if [ -f "target/i686-linux-android/release/libchurch_core.so" ]; then
cp target/i686-linux-android/release/libchurch_core.so bindings/android/jniLibs/x86/
fi
echo "📦 Creating Android README..."
cat > bindings/android/README.md << EOF
# Church Core Android Bindings
This directory contains the generated Kotlin bindings and native libraries for the church-core Rust crate.
## Files:
- \`uniffi/\` - Generated Kotlin bindings
- \`jniLibs/\` - Native libraries for Android architectures
- \`arm64-v8a/\` - ARM64 devices (modern phones)
- \`armeabi-v7a/\` - ARM32 devices (older phones)
- \`x86_64/\` - x86_64 emulator
- \`x86/\` - x86 emulator
## Integration:
1. Copy the Kotlin files from \`uniffi/\` to your Android project's \`src/main/java/\` directory
2. Copy the \`jniLibs/\` directory to your Android project's \`src/main/\` directory
3. Add JNA dependency to your \`build.gradle\`:
```gradle
implementation 'net.java.dev.jna:jna:5.13.0@aar'
```
## Usage:
```kotlin
import uniffi.church_core.*
// Fetch events
val eventsJson = fetchEventsJson()
// Fetch sermons
val sermonsJson = fetchSermonsJson()
// All other functions from the UDL file are available
```
EOF
echo "✅ UniFFI Android library build complete!"
echo "📁 Generated files in bindings/android/:"
echo " - uniffi/ (Kotlin bindings)"
echo " - jniLibs/ (Native libraries for all Android architectures)"
echo " - README.md (Integration instructions)"
echo ""
echo "🎯 Ready for Android integration!"
echo "💡 Follow the README.md instructions to integrate into your Android project"