Skip to content

Commit 17f8060

Browse files
committed
Stabilize emulator startup for Android UI tests
1 parent 63a380d commit 17f8060

File tree

1 file changed

+20
-11
lines changed

1 file changed

+20
-11
lines changed

scripts/build-android-app.sh

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -377,10 +377,6 @@ wait_for_emulator() {
377377
return 0
378378
}
379379

380-
get_emulator_serial() {
381-
"$ADB_BIN" devices | awk '/emulator-/{print $1; exit}'
382-
}
383-
384380
stop_emulator() {
385381
if [ -n "${EMULATOR_SERIAL:-}" ]; then
386382
"$ADB_BIN" -s "$EMULATOR_SERIAL" emu kill >/dev/null 2>&1 || true
@@ -420,23 +416,36 @@ create_avd "$AVDMANAGER_BIN" "$AVD_NAME" "$SYSTEM_IMAGE" "$AVD_HOME"
420416

421417
ANDROID_AVD_HOME="$AVD_HOME" "$ADB_BIN" start-server >/dev/null
422418

419+
EMULATOR_PORT="${EMULATOR_PORT:-5560}"
420+
if ! [[ "$EMULATOR_PORT" =~ ^[0-9]+$ ]]; then
421+
EMULATOR_PORT=5560
422+
elif [ $((EMULATOR_PORT % 2)) -ne 0 ] || [ $EMULATOR_PORT -lt 5554 ] || [ $EMULATOR_PORT -gt 5584 ]; then
423+
# emulator requires an even console port between 5554-5584; fall back if invalid
424+
EMULATOR_PORT=5560
425+
fi
426+
EMULATOR_SERIAL="emulator-$EMULATOR_PORT"
427+
423428
EMULATOR_LOG="$GRADLE_PROJECT_DIR/emulator.log"
424-
ba_log "Starting headless Android emulator $AVD_NAME"
425-
ANDROID_AVD_HOME="$AVD_HOME" "$EMULATOR_BIN" -avd "$AVD_NAME" -no-window -no-snapshot -gpu swiftshader_indirect -no-audio -no-boot-anim -accel off >"$EMULATOR_LOG" 2>&1 &
429+
ba_log "Starting headless Android emulator $AVD_NAME on port $EMULATOR_PORT"
430+
ANDROID_AVD_HOME="$AVD_HOME" "$EMULATOR_BIN" -avd "$AVD_NAME" -port "$EMULATOR_PORT" -no-window -no-snapshot -gpu swiftshader_indirect -no-audio -no-boot-anim -accel off >"$EMULATOR_LOG" 2>&1 &
426431
EMULATOR_PID=$!
427432
trap stop_emulator EXIT
428433

429434
sleep 5
430-
EMULATOR_SERIAL=""
435+
EMULATOR_READY=0
431436
for _ in $(seq 1 30); do
432-
EMULATOR_SERIAL="$(get_emulator_serial)"
433-
if [ -n "$EMULATOR_SERIAL" ]; then
437+
if "$ADB_BIN" -s "$EMULATOR_SERIAL" get-state >/dev/null 2>&1; then
438+
EMULATOR_READY=1
434439
break
435440
fi
436441
sleep 2
437442
done
438-
if [ -z "$EMULATOR_SERIAL" ]; then
439-
ba_log "Failed to determine emulator serial" >&2
443+
if [ "$EMULATOR_READY" -ne 1 ]; then
444+
ba_log "Failed to connect to emulator serial $EMULATOR_SERIAL" >&2
445+
if [ -f "$EMULATOR_LOG" ]; then
446+
ba_log "Emulator log tail:" >&2
447+
tail -n 40 "$EMULATOR_LOG" | sed 's/^/[build-android-app] | /' >&2
448+
fi
440449
stop_emulator
441450
exit 1
442451
fi

0 commit comments

Comments
 (0)