#!/usr/bin/env bash # AetherForge Android Agent APK — compile embedded agent + assembleDebug set -euo pipefail ROOT="$(cd "$(dirname "$0")" && pwd)" REPO_ROOT="$(cd "$ROOT/.." && pwd)" AGENT_DIR="$REPO_ROOT/agent" APP_DIR="$ROOT/agent-app" ASSETS_DIR="$APP_DIR/src/main/assets" AGENT_ASSET="$ASSETS_DIR/agent" CONFIG_ASSET="$ASSETS_DIR/config.json" BUILTIN_PATH="$AGENT_DIR/config/builtin.go" BUILTIN_BACKUP="$AGENT_DIR/config/builtin.go.android-bak" APK_OUT="$APP_DIR/build/outputs/apk/debug/aetherforge-agent.apk" SERVER_URL="${AETHERFORGE_SERVER_URL:-http://127.0.0.1:8989}" WORKER_NAME="${AETHERFORGE_WORKER_NAME:-android-fleet-node}" FLEET_SECRET="${AETHERFORGE_FLEET_SECRET:-}" BUILD_ID="${AETHERFORGE_BUILD_ID:-android-$(date +%Y%m%d-%H%M%S)}" restore_builtin() { if [[ -f "$BUILTIN_BACKUP" ]]; then mv -f "$BUILTIN_BACKUP" "$BUILTIN_PATH" fi } trap restore_builtin EXIT command -v go >/dev/null 2>&1 || { echo "go compiler not found" >&2; exit 1; } echo "==> Baking config (server=$SERVER_URL worker=$WORKER_NAME)" pushd "$ROOT/forge" >/dev/null bake_args=( run ./cmd/bake -server "$SERVER_URL" -worker "$WORKER_NAME" -build-id "$BUILD_ID" -config-out "$CONFIG_ASSET" -builtin-out "$BUILTIN_PATH" ) if [[ -n "$FLEET_SECRET" ]]; then bake_args+=(-fleet-secret "$FLEET_SECRET") fi go "${bake_args[@]}" popd >/dev/null [[ -f "$BUILTIN_PATH" ]] && cp -f "$BUILTIN_PATH" "$BUILTIN_BACKUP" echo "==> Compiling linux/arm64 agent binary" ( cd "$AGENT_DIR" GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o "$AGENT_ASSET" . ) echo " agent binary: $(wc -c <"$AGENT_ASSET") bytes -> $AGENT_ASSET" export ANDROID_HOME="${ANDROID_HOME:-${ANDROID_SDK_ROOT:-}}" if [[ -z "$ANDROID_HOME" ]]; then echo "ANDROID_HOME (or ANDROID_SDK_ROOT) is required for Gradle assembleDebug" >&2 exit 1 fi if [[ ! -x "$APP_DIR/gradlew" ]]; then echo "Gradle wrapper missing. Run: cd android/agent-app && gradle wrapper" >&2 exit 1 fi echo "==> Gradle assembleDebug" ( cd "$APP_DIR" ./gradlew assembleDebug --no-daemon ) [[ -f "$APK_OUT" ]] || { echo "APK not found at $APK_OUT" >&2; exit 1; } echo "==> APK ready: $APK_OUT"