2016-06-22 41 views
5

我發現Travis CI有幾個問題,我一直在解決它們,但最後一個我不能。無法配置Travis在Android項目上工作

,我發現了常見的錯誤 com.android.ddmlib.InstallException: Failed to establish session

這是我的特拉維斯文件:

language: android 

before_install: 
- chmod +x gradlew 

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 
    - tools 
    - build-tools-23.0.3 

    # Additional components 
    - extra-google-m2repository 
    - extra-android-m2repository 

    # The SDK version used to compile your project 
    - android-23 

    # Specify at least one system image, 
    # if you need to run emulator(s) during your tests 
    - sys-img-armeabi-v7a-android-23 
    #- sys-img-x86-android-17 

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 --name test --target android-23 --abi armeabi-v7a 
    - emulator -avd test -no-skin -no-audio -no-window -gpu off -no-boot-anim & 
    - android-wait-for-emulator 
    - adb devices 
    - adb shell input keyevent 82 & 

script: 
    - echo $ADB_INSTALL_TIMEOUT 
    - android list target 
    - ./gradlew connectedAndroidTest 

after_failure: 
    # Customize this line, 'android' is the specific app module name of this project. Shows log. 
    - export MY_MOD="SimpleLock" 
    - export MY_LOG_DIR="$(pwd)/app/build/reports/androidTests/connected/" 
    - pwd && cd "${MY_LOG_DIR:-.}" && pwd && ls -al 
    - sudo apt-get install -qq lynx && lynx --dump index.html > myIndex.log 
    - lynx --dump com.android.builder.testing.ConnectedDevice.html > myConnectedDevice.log 
    - lynx --dump com.android.builder.testing.html > myTesting.log 
    - for file in *.log; do echo "$file"; echo "====================="; cat "$file"; done || true 

這是我特拉維斯輸出: https://travis-ci.org/GarceGon/SimpleLock/builds/139367600

:app:connectedDebugAndroidTestUnable to install /home/travis/build/GarceGon/SimpleLock/app/build/outputs/apk/app-debug.apk 
com.android.ddmlib.InstallException: Failed to establish session 
    at com.android.ddmlib.SplitApkInstaller.install(SplitApkInstaller.java:66) 
    at com.android.ddmlib.Device.installPackages(Device.java:901) 
    at com.android.builder.testing.ConnectedDevice.installPackages(ConnectedDevice.java:119) 
    at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:121) 
    at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:48) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 
com.android.builder.testing.ConnectedDevice > runTests[test(AVD) - 6.0] FAILED 
    com.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException: Failed to establish session 
     at com.android.builder.testing.ConnectedDevice.installPackages(ConnectedDevice.java:129) 
null 
com.android.builder.testing.api.DeviceException: com.android.ddmlib.InstallException: Failed to establish session 
    at com.android.builder.testing.ConnectedDevice.installPackages(ConnectedDevice.java:129) 
    at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:121) 
    at com.android.builder.internal.testing.SimpleTestCallable.call(SimpleTestCallable.java:48) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: com.android.ddmlib.InstallException: Failed to establish session 
    at com.android.ddmlib.SplitApkInstaller.install(SplitApkInstaller.java:66) 
    at com.android.ddmlib.Device.installPackages(Device.java:901) 
    at com.android.builder.testing.ConnectedDevice.installPackages(ConnectedDevice.java:119) 
    ... 8 more 
:app:connectedDebugAndroidTest FAILED 
FAILURE: Build failed with an exception. 
* What went wrong: 
Execution failed for task ':app:connectedDebugAndroidTest'. 
> There were failing tests. See the report at: file:///home/travis/build/GarceGon/SimpleLock/app/build/reports/androidTests/connected/index.html 
* Try: 
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 
BUILD FAILED 
Total time: 2 mins 20.531 secs 
The command "./gradlew connectedAndroidTest" exited with 1. 

謝謝!

回答

3

解決方案:

刪除-no-boot-anim選項等待模擬器準備就緒,並將超時時間增加到10分鐘。


第一個問題:

更換

- emulator -avd test -no-skin -no-audio -no-window -gpu off -no-boot-anim & 

通過

- emulator -avd test -no-skin -no-audio -no-window -gpu off & 

刪除 - no-boot-anim選項,android-wait-for-emulator腳本取決於開機動畫,以檢測當模擬器已準備就緒如我所知平原here

我分叉的項目,以確認這對開發分支和特拉維斯-CI構建passed但是......


第二期:

後來我使用主重建的變化分支和構建failed ...

Caused by: com.android.ddmlib.ShellCommandUnresponsiveException 

你已經固定this發行版由肖恩·巴博很好的解釋:

# install timeout in minutes (2 minutes by default) 
- ADB_INSTALL_TIMEOUT=8 

,你也固定另一超時問題解釋herehere,需要更多的時間,see

Android的搖籃插件有一個硬編碼超時值太低。

谷歌修復它(版本2.0.0-β3):

https://code.google.com/p/android/issues/detail?id=189764

那麼,我們投入的build.gradle設置此超時值?

目前它全部附加到android.adbOptions.timeOutInMs。

示例:Google project Increasing ADB timeout and adding Travis-ci support。它works

// This enables long timeouts required on slow environments, e.g. Travis 
adbOptions { 
    timeOutInMs 10 * 60 * 1000 // Set the timeout to 10 minutes 
    installOptions "-d","-t" 
} 

我是從1到10分鐘增加超時像馬克麥當勞做到了,構建passed

enter image description here

2

嘗試一些東西

  • 確保仿真器啓動/設備連接
  • 重新啓動亞行與$ adb kill-server
  • 檢查仿真器設置爲 「使用主機GPU」 啓用