
Some checks are pending
iOS UniFFI Build / build-ios (push) Waiting to run
Add church management API library with cross-platform support for iOS, Android, and WASM. Features include event management, bulletin handling, contact forms, and authentication.
120 lines
3.9 KiB
Bash
Executable file
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" |