web-dev-qa-db-fra.com

Tests Travis CI Android: aucun appareil connecté

J'essaie de configurer Travis pour Android. Exécuter la compilation semble fonctionner jusqu'à présent, mais en ce qui concerne les tests, il se plaint de "Aucun périphérique connecté!"

: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!

Voici mon .travis.yml, et d'après ce que j'ai compris, je crée et démarre un émulateur pour les tests, comme le dit la documentation .

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 &

Pouvez-vous me dire ce que je fais mal et comment y remédier?

29
Terry

Malheureusement, je n'ai pas le droit de commenter car je veux juste compléter la réponse de DominicJodoin. L’indentation correcte et un ADB_INSTALL_TIMEOUT plus long sont nécessaires comme DominicJodoin l’a déjà indiqué.

À mon avis, votre émulateur est en cours d'exécution mais n'est pas prêt à installer un apk. Avec - adb wait-for-device, vous attendez que le périphérique soit connecté. Selon la Documentation cela signifie: 

Notez que cette commande ne fait pas attendre adb jusqu'au démarrage complet du système. Pour cette raison, vous ne devez pas l'ajouter à d'autres commandes nécessitant un système entièrement démarré. 

Essayez de remplacer cette ligne par - Android-wait-for-emulator dans votre travis.yml à la place.

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

Edit: Indentation fixe dans le fragment YAML ci-dessus.

13
J-Bossi

Je pense que votre problème est que l’image sys-img-armeabi-v7a-Android-22 n’est pas encore disponible sur Travis CI.

En effet, si vous exécutez la commande suivante sur Travis CI: Android list target, la sortie pour Android-22 ne montre pas Tag/ABIs : no ABIs..

Je vous suggère d'essayer de lancer vos tests sur le sys-img-armeabi-v7a-Android-21 entre-temps.

Vous pouvez consulter un exemple de projet Android avec des tests unitaires que j'ai créés et exécutés avec succès avec vos composants, mais avec une image sys-img-armeabi-v7a-Android-21 sur Travis CI:

J'espère que cela t'aides!

Edit:Android-22 L’image devrait être disponible sous peu sur Travis CI. Voir ce qui suit demande de tirage .

7
Dominic Jodoin

Je voulais utiliser un émulateur plus récent. Malheureusement, je n'ai pas réussi à le faire fonctionner sur Android-26 ou 27, mais j'ai réussi à le faire fonctionner sur Android-25. Les noms ABI ont été changés. Voici ce qui fonctionne pour moi:

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 &
1
Gavriel

J'ai trouvé le bit ADB_TIMEOUT_INSTALL clé dans la réponse J-Bossi et il a démarré l'émulateur dans before_script comme le recommande actuellement Travis-CI, mais il y avait un problème avec le manque de mémoire de VM. Ainsi, au lieu d’exécuter l’émulateur pendant l’exécution de la construction, j’ai modifié ma configuration pour l’exécuter, puis démarrer l’émulateur, puis exécuter les tests.

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
0