Android-тесты Travis CI: нет подключенных устройств
Автор вопроса: TerryОтветов: 4
Я пытаюсь настроить 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 &
Можете ли вы сказать мне, что я делаю неправильно и как это исправить?
Давайте пока забудем об эмуляции устройства. Попробуем на реальном устройстве. Можете ли вы на самом деле подтвердить, что ОС распознает реальное устройство? Вы можете сделать это, выполнив adb devices в командной строке терминала/команды с повышенными привилегиями. Если вы видите длинную строку с цифрами, мы можем устранить одну потенциальную проблему. Shailen 07.07.2015
Это ведет Трэвис. Я не могу подключить устройство или запустить там оболочку. Все, что я могу сделать, это поместить правильную команду в файл .tavis.yml и быть уверенным, что она запустит эмулятор. К сожалению, я даже не получаю сообщения журнала для этого. Terry 08.07.2015
К сожалению, мне не разрешено комментировать, так как я просто хочу завершить ответ Доминика Джодоина. Правильный отступ и более длинный ADB_INSTALL_TIMEOUT необходимы, как уже сказал DominicJodoin.
На мой взгляд, ваш эмулятор работает, но не готов установить apk. С - adb wait-for-device вы ждете, пока устройство подключится. Согласно документации, это означает:
Обратите внимание, что эта команда не заставляет adb ждать полной загрузки всей системы. По этой причине вы не должны добавлять его перед другими командами, которые требуют полностью загруженной системы.
Попробуйте вместо этого заменить эту строку на - 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 · рейтинг 9 · Dominic Jodoin
Я думаю, ваша проблема в том, что изображение 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 · рейтинг 1 · Gavriel
Я хотел использовать более новый эмулятор. К сожалению, мне не удалось заставить его работать на 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 · Hans-Christoph Steiner
Я нашел бит ключа ADB_TIMEOUT_INSTALL в ответе J-Bossi, и он запускает эмулятор в before_script, как сейчас рекомендует Travis-CI, но у меня были проблемы с нехваткой памяти виртуальной машины. Поэтому вместо того, чтобы запускать эмулятор во время сборки, я изменил свою конфигурацию, чтобы запустить сборку, затем запустить эмулятор, а затем запустить тесты.
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