Подтвердить что ты не робот

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 &

Можете ли вы рассказать мне, что я делаю неправильно, и как его исправить?

4b9b3361

Ответ 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