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 &
私が間違っていることとそれを修正する方法を教えていただけますか?
残念ながら、私は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
問題は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 を参照してください。
最近のエミュレータを使いたかった。残念ながら、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 &
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