web-dev-qa-db-ja.com

Travis CI Androidテスト:接続されたデバイスなし

Android用Travisをセットアップしようとしています。ビルドの実行はこれまでのところ機能しているようですが、テストになると、「接続されているデバイスがありません!」というメッセージが表示されます。

: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です。私が理解していることから、 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 &

私が間違っていることとそれを修正する方法を教えていただけますか?

30
Terry

残念ながら、私はDominicJodoinの回答を完成させたいだけなので、コメントすることはできません。 DominicJodoinがすでに述べたように、正しいインデントと長いADB_INSTALL_TIMEOUTが必要です。

私の意見では、エミュレータは実行されていますが、APKをインストールする準備ができていません。 - adb wait-for-deviceを使用すると、デバイスが接続されるまで待機します。 Documentation によると、これは次のことを意味します。

このコマンドは、システム全体が完全に起動するまでadbを待機させないことに注意してください。そのため、完全に起動されたシステムを必要とする他のコマンドの前に追加しないでください。

代わりに、travis.ymlでこの行を- Android-wait-for-emulatorに置き換えてみてください。

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
13
J-Bossi

問題は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私がフォークしてコンポーネントで正常に実行した単体テストのプロジェクトですが、Travis CIのsys-img-armeabi-v7a-Android-21イメージを使用しています:

お役に立てれば!

編集:Android-22画像がTravis CIでまもなく利用可能になるはずです。次の pull request を参照してください。

8
Dominic Jodoin

最近のエミュレータを使いたかった。残念ながら、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 &
1
Gavriel

J-Bossiの回答でキーADB_TIMEOUT_INSTALLビットを見つけ、Travis-CIが現在推奨しているようにbefore_scriptでエミュレーターを起動しますが、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