在Jenkins Linux EC2上的android模拟器中安装apk时出现超时异常



当我们需要为Android应用程序运行自动GUI测试时,我的雇主已将Jenkins配置为在Amazon EC2上自动启动Jenkins奴隶。

目前,我们正在使用Android 2.2,因为它在我们当前的Jenkins从属设置上运行良好。SDK版本使用API 8和任何高于此版本的软件都会在尝试启动模拟器时超时。

我们想放弃对Android 4.0之前的任何东西的支持。

我正在更新我们的基础设施,以便使用API 15在模拟器上运行这些自动化GUI测试。

我们正在研究Ravello,它通过KVM提供硬件辅助加速。它使用x86系统映像以及android64-x86二进制工具来运行。

目前,在尝试安装apk时会引发异常。我在谷歌上搜索过,没有看到任何人遇到同样的错误。我使用grepcode.com查看异常堆栈跟踪正在打印的代码;昨天,我看到它在读广告栏时似乎有问题,所以我认为我的SD卡可能太大了,所以把它减少到了50M。昨天成功了,测试开始运行,但随后挂起了测试套件中的一个测试,57个测试套件中可能有20个测试。

然后我@Suppress通过了那个测试,现在我得到了这个异常。删除@Suppress离子现在不会改变任何事情:它总是无法安装。

有没有人看到这一点,或者对我如何解决这个问题有什么建议?

以下是错误日志:


[ERROR] Failed to execute goal com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.1.1:internal-pre-integration-test (default-internal-pre-integration-test) on project ravenousity-android-test: Install of /mnt/workspace/workspace/lyndsey-ferguson_DR-1543-update-android-version_android-dynamic-grids/m2-repo/com/ravenousity/ravenousity-android/2.6.1-SNAPSHOT/ravenousity-android-2.6.1-SNAPSHOT.apk failed. InstallException: TimeoutException -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.1.1:internal-pre-integration-test (default-internal-pre-integration-test) on project ravenousity-android-test: Install of /mnt/workspace/workspace/lyndsey-ferguson_DR-1543-update-android-version_android-dynamic-grids/m2-repo/com/ravenousity/ravenousity-android/2.6.1-SNAPSHOT/ravenousity-android-2.6.1-SNAPSHOT.apk failed.
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.apache.maven.plugin.MojoExecutionException: Install of /mnt/workspace/workspace/lyndsey-ferguson_DR-1543-update-android-version_android-dynamic-grids/m2-repo/com/ravenousity/ravenousity-android/2.6.1-SNAPSHOT/ravenousity-android-2.6.1-SNAPSHOT.apk failed.
    at com.jayway.maven.plugins.android.AbstractAndroidMojo$1.doWithDevice(AbstractAndroidMojo.java:521)
    at com.jayway.maven.plugins.android.AbstractAndroidMojo.doWithDevices(AbstractAndroidMojo.java:607)
    at com.jayway.maven.plugins.android.AbstractAndroidMojo.deployApk(AbstractAndroidMojo.java:513)
    at com.jayway.maven.plugins.android.AbstractAndroidMojo.deployDependencies(AbstractAndroidMojo.java:541)
    at com.jayway.maven.plugins.android.phase11preintegrationtest.InternalPreIntegrationTestMojo.execute(InternalPreIntegrationTestMojo.java:36)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
    ... 19 more
Caused by: com.android.ddmlib.InstallException
    at com.android.ddmlib.Device.installPackage(Device.java:586)
    at com.jayway.maven.plugins.android.AbstractAndroidMojo$1.doWithDevice(AbstractAndroidMojo.java:516)
    ... 25 more
Caused by: com.android.ddmlib.TimeoutException
    at com.android.ddmlib.AdbHelper.read(AdbHelper.java:648)
    at com.android.ddmlib.SyncService.doPushFile(SyncService.java:688)
    at com.android.ddmlib.SyncService.pushFile(SyncService.java:375)
    at com.android.ddmlib.Device.syncPackageToDevice(Device.java:607)
    at com.android.ddmlib.Device.installPackage(Device.java:577)
    ... 26 more

我的同事JayB发现了:

使用4.0.0-rc.3版本的maven安卓插件,它是可以配置adb连接超时。使用3.1.1版本的插件,没有办法做到这一点。

[..snip..我们现在不能使用4.0.0-rc.3..]

相反,我克隆了maven安卓插件,创建了3.1.1版本,并添加了一行代码来硬编码超时在60秒时,将插件的更新版本安装为版本3.1.1.复仇-1在本地存储库中,并使用它构建。在该配置中,构建通过安装应用程序以及开始测试。

最新更新