Travis CI Android Tests: нет подключенных устройств
Я пытаюсь настроить Travis для Android. Запуск сборки, похоже, работает до сих пор, но когда дело доходит до тестов, он жалуется на "Нет подключенных устройств!"
:app:connectedAndroidTestDebug FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:connectedAndroidTestDebug'.
> com.android.builder.testing.api.DeviceException: java.lang.RuntimeException:
No connected devices!
Вот мой .travis.yml, и из того, что я понимаю, я создаю и запускаю эмулятор для тестов, как говорится в документации .
language: android
android:
components:
# Uncomment the lines below if you want to
# use the latest revision of Android SDK Tools
# - platform-tools
# - tools
# The BuildTools version used by your project
- build-tools-22.0.1
# The SDK version used to compile your project
- android-22
# Additional components
- extra-google-google_play_services
- extra-google-m2repository
- extra-android-m2repository
# - addon-google_apis-google-19
# - add-on
# - extra
# Specify at least one system image,
# if you need to run emulator(s) during your tests
- sys-img-armeabi-v7a-android-22
# - sys-img-x86-android-17
licenses:
- 'android-sdk-license-.+'
# Emulator Management: Create, Start and Wait
before_script:
- echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a
- emulator -avd test -no-skin -no-audio -no-window &
- android-wait-for-emulator
- adb shell input keyevent 82 &
Можете ли вы рассказать мне, что я делаю неправильно, и как его исправить?
Ответы
Ответ 1
К сожалению, мне не разрешено комментировать, так как я просто хочу завершить ответ DominicJodoin. Правильный отступ и более длинный ADB_INSTALL_TIMEOUT
необходимы, как уже сказал DominicJodoin.
На мой взгляд, ваш эмулятор работает, но не готов к установке apk. С помощью - adb wait-for-device
вы ожидаете, пока устройство не подключится. Согласно Документации это означает:
Обратите внимание, что эта команда не заставляет adb ждать полной загрузки всей системы. По этой причине вам не следует добавлять его к другим командам, для которых требуется полностью загруженная система.
Попробуйте заменить эту строку на --roid - android-wait-for-emulator
в вашем travis.yml.
Travis.yml
language: android
jdk: oraclejdk7
cache:
directories:
- node_modules
sudo: false
android:
components:
# Uncomment the lines below if you want to
# use the latest revision of Android SDK Tools
# - platform-tools
# - tools
# The BuildTools version used by your project
- build-tools-22.0.1
# The SDK version used to compile your project
- android-22
# Additional components
- extra-google-google_play_services
- extra-google-m2repository
- extra-android-m2repository
# - addon-google_apis-google-19
# - add-on
# - extra
# Specify at least one system image,
# if you need to run emulator(s) during your tests
- sys-img-armeabi-v7a-android-21
# - sys-img-x86-android-17
licenses:
- 'android-sdk-license-.+'
env:
global:
# install timeout in minutes (2 minutes by default)
- ADB_INSTALL_TIMEOUT=8
# Emulator Management: Create, Start and Wait
before_script:
- echo no | android create avd --force -n test -t android-21 --abi armeabi-v7a
- emulator -avd test -no-skin -no-audio -no-window &
- android-wait-for-emulator
- adb shell input keyevent 82 &
script:
- android list target
- ./gradlew connectedAndroidTest
Ответ 2
Я думаю, ваша проблема в том, что изображение sys-img-armeabi-v7a-android-22
пока недоступно в Travis CI.
Действительно, если вы запустите следующую команду в Travis CI: android list target
, вывод для android-22
не отображает Tag/ABIs : no ABIs.
Я предлагаю вам попробовать выполнить тесты на sys-img-armeabi-v7a-android-21
тем временем.
Вы можете посмотреть пример проекта Android с модульными тестами, которые я разветкил и успешно выполнил с вашими компонентами, но с изображением sys-img-armeabi-v7a-android-21
на Travis CI:
Надеюсь, это поможет!
Изменить: android-22
изображение должно быть доступно в ближайшее время на Travis CI. См. Следующий запрос на перенос.
Ответ 3
Я хотел использовать более свежий эмулятор. К сожалению, я не смог заставить его работать на Android-26 или 27, но я смог заставить его работать на Android-25. Имена ABI были изменены. Вот что у меня работает:
language: android
jdk:
- oraclejdk8
env:
global:
- ANDROID_BUILD_TOOLS_VERSION=26.0.2
- ANDROID_ABI=arm64-v8a
- ANDROID_TAG=google_apis
- ANDROID_API_LEVEL=26
- EMULATOR_API_LEVEL=25
- ADB_INSTALL_TIMEOUT=8 # minutes (2 minutes by default)
android:
components:
# Uncomment the lines below if you want to
# use the latest revision of Android SDK Tools
- tools
- platform-tools
- tools
# The BuildTools version used by your project
- build-tools-$ANDROID_BUILD_TOOLS_VERSION
# The SDK version used to compile your project
- android-$ANDROID_API_LEVEL
- android-$EMULATOR_API_LEVEL
# Support library
# Latest artifacts in local repository
- extra-android-m2repository
# Specify at least one system image,
# if you need to run emulator(s) during your tests
- sys-img-$ANDROID_ABI-$ANDROID_TAG-$EMULATOR_API_LEVEL
before_cache:
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
- rm -fr $HOME/.gradle/caches/*/plugin-resolution/
cache:
directories:
- $HOME/.gradle/caches/
- $HOME/.gradle/wrapper/
# Emulator Management: Create, Start and Wait
before_script:
- android list targets
- echo no | android create avd --force -n test -t "android-"$EMULATOR_API_LEVEL --abi $ANDROID_ABI --tag $ANDROID_TAG
- emulator -list-avds
- emulator -avd test -no-window &
- android-wait-for-emulator
- adb devices
- adb shell input keyevent 82 &
Ответ 4
Я нашел ключ ADB_TIMEOUT_INSTALL
в ответе J-Bossi, и он запускает эмулятор в before_script
, как в настоящее время рекомендует Travis-CI, но у меня были проблемы с нехваткой памяти VM. Поэтому вместо запуска эмулятора во время работы сборки я изменил свой конфиг, чтобы запустить сборку, затем запустить эмулятор, а затем запустить тесты.
sudo: false
language: android
env:
global:
# switch glibc to a memory conserving mode
- MALLOC_ARENA_MAX=2
# wait up to 10 minutes for adb to connect to emulator
- ADB_INSTALL_TIMEOUT=10
android:
components:
- platform-tools
- extra-android-m2repository
- build-tools-22.0.1
- android-22
- sys-img-armeabi-v7a-android-22
script:
- ./gradlew assemble lint
after_script:
# Emulator Management: Create, Start and Wait
- echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a
- emulator -avd test -no-skin -no-audio -no-window &
- android-wait-for-emulator
- adb shell input keyevent 82 &
# now run the tests
- ./gradlew connectedCheck