#!/bin/bash set -e echo "==========================================" echo " ChunYu Android Emulator Container" echo "==========================================" # Configuration BACKEND_HOST="${BACKEND_HOST:-backend}" BACKEND_PORT="${BACKEND_PORT:-8000}" APK_PATH="${APK_PATH:-/app/apks/app-debug.apk}" LAUNCH_ACTIVITY="${LAUNCH_ACTIVITY:-com.chunyu.app/.MainActivity}" echo "[1/5] Starting Redroid Android container..." # Start redroid in background redroid --host=0.0.0.0 --port=5555 & REDROID_PID=$! echo "[2/5] Waiting for Android emulator to be ready..." # Wait for boot completion timeout=120 counter=0 while [ $counter -lt $timeout ]; do if adb devices | grep -q "emulator.*device"; then echo " ✓ Android emulator is ready!" break fi sleep 2 counter=$((counter + 2)) echo " ...waiting for emulator (${counter}s/${timeout}s)" done if [ $counter -ge $timeout ]; then echo " ✗ Timeout waiting for emulator to boot" exit 1 fi # Wait for boot completion adb wait-for-device echo " Waiting for boot to complete..." adb shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done; echo "Boot completed"' echo " ✓ Android boot completed!" echo "[3/5] Configuring network..." # Get the IP that the Android emulator can use to reach the backend # In Docker bridge network, we can use the service name echo " Backend host: ${BACKEND_HOST}:${BACKEND_PORT}" # Push configuration to Android # Create a config file that the app can read adb shell "mkdir -p /data/local/tmp/chunyu" adb shell "echo '${BACKEND_HOST}' > /data/local/tmp/chunyu/backend_host" adb shell "echo '${BACKEND_PORT}' > /data/local/tmp/chunyu/backend_port" echo "[4/5] Installing APK..." if [ -f "$APK_PATH" ]; then echo " Installing: $APK_PATH" adb install -r -t "$APK_PATH" echo " ✓ APK installed successfully!" else echo " ⚠ APK not found at $APK_PATH" echo " Please mount the APK to /app/apks/app-debug.apk" fi echo "[5/5] Launching application..." adb shell am start -n "$LAUNCH_ACTIVITY" echo " ✓ Application launched!" echo "" echo "==========================================" echo " Android Emulator Ready!" echo "==========================================" echo " ADB Port: 5555" echo " Backend: ${BACKEND_HOST}:${BACKEND_PORT}" echo "" echo " To connect from host:" echo " adb connect localhost:5555" echo "==========================================" # Keep container running wait $REDROID_PID