#!/usr/bin/env bash # # bridge-emulator.sh — (host-side) expose the emulator's adbd to the LAN so agents # inside the container/other machines can use it: binds :5557 -> 127.0.0.1:5601. # The emulator console transport (emulator-5600) stays local-only; this bridges the # adbd TCP port 5601. set -euo pipefail ADBD_PORT=5601 BRIDGE_PORT=5557 # start emulator if not running ADB="${ANDROID_SDK_ROOT:-$HOME/Android/Sdk}/platform-tools/adb" if ! "$ADB" devices | grep -q "emulator-5600.*device"; then echo "emulator-5600 not running — starting it…" ADB_VENDOR_KEYS="$HOME/.android/adbkey" setsid nohup \ "${ANDROID_SDK_ROOT:-$HOME/Android/Sdk}/emulator/emulator" -avd jtubesc -port 5600 \ -no-window -gpu swiftshader_indirect -no-snapshot -no-audio -no-boot-anim \ > /tmp/jtube-emu.log 2>&1 < /dev/null & echo "waiting for boot (log: /tmp/jtube-emu.log)…" for i in $(seq 1 60); do ok=$("$ADB" -s emulator-5600 shell getprop sys.boot_completed 2>/dev/null | tr -d '\r') [ "$ok" = "1" ] && { echo "BOOTED"; break; } sleep 5 done fi # keep JTube TV installed + running APK="$HOME/Projects/jtube-tv/app/build/outputs/apk/debug/app-debug.apk" if [ -f "$APK" ]; then "$ADB" -s emulator-5600 install -r "$APK" >/dev/null && echo "JTube TV installed" "$ADB" -s emulator-5600 shell am start -n net.jeena.jtubetv/.MainActivity && echo "app started" fi # the bridge (bind all LAN addresses) if ! ss -tln 2>/dev/null | grep -q ":$BRIDGE_PORT"; then setsid nohup socat TCP-LISTEN:$BRIDGE_PORT,bind=0.0.0.0,fork,reuseaddr \ TCP:127.0.0.1:$ADBD_PORT > /tmp/jtube-bridge.log 2>&1 < /dev/null & echo "bridge: :$BRIDGE_PORT -> 127.0.0.1:$ADBD_PORT (pid $!)" fi echo "From this host: adb connect localhost:$BRIDGE_PORT" echo "From other machines: adb connect rutherford:$BRIDGE_PORT"