Files
self/packages/mobile-sdk-alpha/scripts/build-android.sh
Justin Hernandez f47b46d465 Add browser host callback contract for WebView verification flow (#1846)
* push code for wv-02 and 03

* save wip

* fixes

* pr feedback fix pipelines

* save spec

* address feedback

* pr feedbacak

* fixes

* format

* fix pipelines

* fix

* fix

* fixes
2026-03-12 07:50:18 -07:00

123 lines
4.8 KiB
Bash
Executable File

#!/bin/bash
# SPDX-FileCopyrightText: 2025 Social Connect Labs, Inc.
# SPDX-License-Identifier: BUSL-1.1
# NOTE: Converts to Apache-2.0 on 2029-06-11 per LICENSE.
# Build Android AAR from source using the app's Gradle wrapper
set -e
echo "🤖 Building Android AAR for mobile-sdk-alpha..."
# Navigate to SDK directory
SDK_DIR="$(dirname "$0")/.."
cd "$SDK_DIR"
# Ensure dist/android directory exists
mkdir -p dist/android
# Check if native modules source is available
MOBILE_SDK_NATIVE="mobile-sdk-native"
echo "🔍 Checking for Android build options..."
if [ -d "$MOBILE_SDK_NATIVE" ]; then
echo "✅ Native modules source submodule found, building from source..."
# Check if Java is actually available (required for Gradle build)
# Note: macOS has a /usr/bin/java stub that passes `command -v` but fails at runtime
if ! java -version 2>/dev/null 1>/dev/null; then
echo "⚠️ Java not available — skipping Android AAR build"
if [ -f "dist/android/mobile-sdk-alpha-release.aar" ]; then
echo "📦 Using existing prebuilt AAR: dist/android/mobile-sdk-alpha-release.aar"
else
echo "⚠️ No prebuilt AAR available. Android native modules will not be included."
fi
exit 0
fi
# Check if we already have a valid AAR file
if [ -f "dist/android/mobile-sdk-alpha-release.aar" ]; then
echo "🔍 AAR file found, validating contents..."
# Check file size first (should be at least 100KB for a valid AAR)
AAR_SIZE=$(stat -f%z "dist/android/mobile-sdk-alpha-release.aar" 2>/dev/null || stat -c%s "dist/android/mobile-sdk-alpha-release.aar" 2>/dev/null)
if [ "$AAR_SIZE" -gt 100000 ]; then
# Extract classes.jar to temp file and check for required classes
TEMP_JAR=$(mktemp)
if unzip -p "dist/android/mobile-sdk-alpha-release.aar" classes.jar > "$TEMP_JAR" 2>/dev/null && \
jar tf "$TEMP_JAR" 2>/dev/null | grep -q "com/selfxyz/selfSDK/RNSelfPassportReaderModule.class"; then
rm -f "$TEMP_JAR"
echo "✅ AAR is valid ($(numfmt --to=iec-i --suffix=B $AAR_SIZE 2>/dev/null || echo "${AAR_SIZE} bytes")), skipping build"
echo "📦 Using existing AAR: dist/android/mobile-sdk-alpha-release.aar"
exit 0
else
rm -f "$TEMP_JAR"
echo "⚠️ AAR is missing required classes (RNSelfPassportReaderModule)"
fi
else
echo "⚠️ AAR file is too small (${AAR_SIZE} bytes), likely incomplete"
fi
echo "🔄 Removing invalid AAR and rebuilding..."
rm -f "dist/android/mobile-sdk-alpha-release.aar"
fi
# Setup and update submodule using the setup script
echo "🔄 Setting up and updating submodule..."
node scripts/setup-native-source.cjs
# Navigate to android directory
cd android
# Check if we're in a monorepo and can use the app's gradlew
APP_GRADLEW="../../../app/android/gradlew"
if [ -f "$APP_GRADLEW" ]; then
echo "✅ Using app's Gradle wrapper"
# Copy source from submodule if available
if [ -d "../$MOBILE_SDK_NATIVE/src" ]; then
echo "📝 Copying source from submodule to android directory..."
rm -rf src
cp -r "../$MOBILE_SDK_NATIVE/src" .
fi
if [ -d "../$MOBILE_SDK_NATIVE/libs" ]; then
echo "📝 Copying libs from submodule to android directory..."
rm -rf libs
cp -r "../$MOBILE_SDK_NATIVE/libs" .
fi
# Build using app's gradlew from the app's android directory
# This ensures React Native and other dependencies are available
cd ../../../app/android
./gradlew :mobile-sdk-alpha:assembleRelease
echo "✅ Android AAR built successfully from submodule source"
echo "📦 AAR location: packages/mobile-sdk-alpha/dist/android/"
echo "💡 Changes in mobile-sdk-native/ are tracked with git history"
else
echo "❌ Error: Could not find app's Gradle wrapper at $APP_GRADLEW"
echo "Please ensure you're running this from the monorepo root or that the app is set up."
exit 1
fi
else
echo "⚠️ Private source not found, checking for prebuilt AAR..."
# Check if prebuilt AAR already exists
if [ -f "dist/android/mobile-sdk-alpha-release.aar" ]; then
echo "✅ Prebuilt AAR found: dist/android/mobile-sdk-alpha-release.aar"
echo "📦 Using existing prebuilt AAR"
else
echo "❌ No prebuilt AAR found at dist/android/mobile-sdk-alpha-release.aar"
echo "💡 To build from source, clone the mobile-sdk-native repository:"
echo " node scripts/setup-native-source.cjs"
echo " yarn build:android"
echo ""
echo "⚠️ Package may not work without AAR file!"
exit 1
fi
fi