- Вопрос или проблема
- Ответ или решение
- Проблема запуска эмулятора Android на macOS Runner в GitHub Actions
- 1. Проверка конфигурации GitHub Actions
- 2. Увеличение таймаута
- 3. Проверка подключения через ADB
- 4. Использование переменной ADB_SERVER_PORT
- 5. Просмотр логов эмулятора
- 6. Убедитесь в наличии необходимых системных ресурсов
- Заключение
Вопрос или проблема
Я запускаю UI-тест на GitHub Actions с использованием macOS runner и действия ReactiveCircus/android-emulator-runner@v2
. Эмулятор запускается, но, кажется, не удается подключиться через adb
. Я установил emulator-port: 5556
и увеличил emulator-boot-timeout
до 1200, но тест не может обнаружить устройство. Есть идеи, как гарантировать правильный запуск эмулятора? Вот текущая настройка:
name: Android UI Tests
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
ui_tests:
# Используйте macOS runner для поддержки аппаратного ускорения с HAXM
runs-on: macos-latest
steps:
# 1. Клонировать репозиторий
- name: Проверить репозиторий
uses: actions/checkout@v2
# 2. Настроить JDK 17 (необходимо для нового SDK Manager)
- name: Настроить JDK 17
uses: actions/setup-java@v2
with:
distribution: 'zulu'
java-version: '17'
# 3. Настроить Android SDK
- name: Настроить Android SDK
uses: android-actions/setup-android@v2
with:
api-level: 30
build-tools: 30.0.3
cache: gradle
# 4. Запустить Android эмулятор для UI-тестов
- name: Запустить Android эмулятор
uses: ReactiveCircus/android-emulator-runner@v2
with:
api-level: 30
target: default
arch: x86_64
profile: Nexus 6
emulator-options: "-no-window -no-audio"
disable-animations: true
emulator-port: 5556 # Использовать конкретный порт
emulator-boot-timeout: 1200 # 20 минут
force-avd-creation: true
script: echo "Запуск эмулятора"
# 5. Проверить соединение ADB
- name: Проверить состояние эмулятора
run: adb devices
# 6. Подождать, пока Android эмулятор загрузится (с таймаутом)
- name: Подождать, пока Android эмулятор загрузится
run: |
boot_timeout=300 # Установить таймаут на 5 минут
boot_time=0
until adb shell getprop sys.boot_completed | grep -m 1 '1'; do
if [ $boot_time -ge $boot_timeout ]; then
echo "Таймаут загрузки эмулятора истек после $boot_timeout секунд."
adb -s emulator-5556 emu kill # Завершить работу эмулятора
exit 1
fi
echo "Ожидание загрузки эмулятора..."
sleep 10
boot_time=$((boot_time + 10))
done
echo "Эмулятор успешно загружен."
# 7. Проверить журнал эмулятора (по желанию, для устранения неполадок)
- name: Напечатать журнал эмулятора
run: adb logcat -d
# 8. Запустить UI-тесты
- name: Запустить UI-тесты
run: ./gradlew connectedAndroidTest
# 9. Загрузить результаты UI-тестов (по желанию)
- name: Загрузить результаты UI-тестов
if: failure()
uses: actions/upload-artifact@v3
with:
name: ui-test-results
path: app/build/reports/androidTests/connected
здесь:
adb: не найдено устройств/эмуляторов
Ожидание загрузки эмулятора...
adb: не найдено устройств/эмуляторов
Ожидание загрузки эмулятора...
adb: не найдено устройств/эмуляторов
Таймаут загрузки эмулятора истек после 300 секунд.
ошибка: не удалось подключиться к TCP порту 5554: Соединение отклонено
Ошибка: Процесс завершился с кодом выхода 1.
Ответ или решение
Проблема запуска эмулятора Android на macOS Runner в GitHub Actions
Запуск UI-тестов на Android с использованием эмулятора в GitHub Actions может представлять определенные трудности, особенно в среде macOS. Вы описали проблему с тем, что эмулятор запускается, но не удается подключиться к adb
, и тест не может обнаружить устройство. Рассмотрим возможные шаги для устранения этой проблемы.
1. Проверка конфигурации GitHub Actions
Ваш YAML файл содержит все необходимые шаги для установки JDK, SDK и запуска эмулятора. Однако, несколько аспектов стоит дополнительно проверить:
-
Версия эмулятора: Убедитесь, что используемая версия
ReactiveCircus/android-emulator-runner@v2
совместима с API уровнем 30 и архитектурой x86_64. -
Параметры эмулятора: Опция
-no-window
может вызывать определенные проблемы, так как эмулятор может работать с графическим интерфейсом. Попробуйте запустить эмулятор без этой опции, чтобы убедиться, что визуализация не влияет на его работу.
2. Увеличение таймаута
Вы уже увеличили параметр emulator-boot-timeout
до 1200 секунд; однако, если эмулятор не запускается, возможно, стоит проверить логи, чтобы убедиться, что запускается именно правильный образ. Увеличение таймаута для команды adb shell getprop sys.boot_completed
до 600 секунд также может дать дополнительные шансы на успешный запуск эмулятора.
3. Проверка подключения через ADB
Убедитесь, что команда adb devices
действительно выполняется после запуска эмулятора, и попробуйте добавлять некоторые задержки перед этой командой, чтобы убедиться, что эмулятор успел загрузиться. Например, вы можете добавить небольшую паузу перед проверкой состояния ADB:
# 5. Verify ADB Connection
- name: Check Emulator Status
run: |
sleep 30 # Добавление задержки на 30 секунд перед проверкой
adb devices
4. Использование переменной ADB_SERVER_PORT
Вы можете столкнуться с проблемами, связанными с портами. Попробуйте явно указать порт ADB перед выполнением adb
команд:
- name: Set ADB Server Port
run: |
adb nodaemon server &
adb -P 5037 devices
5. Просмотр логов эмулятора
Для получения дополнительных подсказок о том, что идет не так, стоит изучить журналы эмулятора. Вы уже добавили шаг для вывода логов, но при этом рекомендую выполнять его сразу после неудавшейся попытки запуска:
# 7. Check Emulator Log (optional, for troubleshooting)
- name: Print Emulator Log
run: |
adb logcat -d || true # Обеспечить, чтобы ошибка не остановила выполнение
6. Убедитесь в наличии необходимых системных ресурсов
Эмуляторы могут требовать значительных ресурсов. Убедитесь, что на macOS Runner достаточно памяти и процессорных мощностей для запуска эмулятора. Спецификация runner’а может повлиять на производительность.
Заключение
В случае если все вышеперечисленные шаги не решают проблему, возможно, стоит рассмотреть использование альтернативных подходов, таких как использование тестирования на реальных устройствах или использование облачных сервисов для проведения UI-тестов. Убедитесь также, что вы следите за актуальными обновлениями эмулятора и используемой инфраструктуры GitHub Actions.
Если у вас есть дополнительные вопросы или неясности, не стесняйтесь задавать их, и мы поможем вам найти решение.