Gradle命令在API 23 Google API模拟器镜像(armeabi-v7a)上失败

13

我似乎无法在命令行中使用Gradle命令与API 23 Google API模拟器镜像(Google APIs ARM (armeabi-v7a))配合使用- 我总是会遇到一个com.android.ddmlib.ShellCommandUnresponsiveException的错误。

复现步骤:

  1. 创建一个API 23的AVD Google APIs ARM (armeabi-v7a)
  2. 克隆 https://github.com/googlemaps/android-maps-utils (或使用您自己的项目)
  3. 从命令行运行 gradlew installDebug

你将看到:

:demo:assembleDebug :demo:installDebug FAILED

FAILURE: Build failed with an exception.

  • 出错原因:

Execution failed for task ':demo:installDebug'. com.android.builder.testing.api.DeviceException: com.android.ddmlib.ShellCommandUnresponsiveException

如果你运行 gradlew connectedCheck,你会看到类似的错误:

  • 出错原因: Execution failed for task ':library:connectedDebugAndroidTest'. com.android.builder.testing.api.TestException: com.android.builder.testing.api.DeviceException: com.android.ddmlib.ShellCommandUnresponsiveException

我可以在Android Studio (1.4)中安装/运行项目和测试,没有任何问题。

从命令行运行Gradle命令在API 21的Google API模拟器镜像上似乎能正常运行。

以下是在API 23 Google API模拟器镜像上的Travis示例失败:

https://travis-ci.org/barbeau/android-maps-utils/builds/83233500

这里有一个使用API 21的Google API模拟器镜像构建成功的例子:

https://travis-ci.org/barbeau/android-maps-utils/builds/83234555

两个构建唯一的差别在于API级别,一个是23,另一个是21:

https://github.com/barbeau/android-maps-utils/commit/a5eecd7e7a4fc899ecd5eaeae6826414fefeae70

编辑

我在这里提出了一个关于这个问题的AOSP问题:

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


@BrianCunnie同意 - 我计划就此事开启一个AOSP问题,只是还没有找到时间。另外,FYI - 显然API Level 22模拟器也出了问题 - https://code.google.com/p/android/issues/detail?id=176348&thanks=176348&ts=1433887196。 - Sean Barbeau
好的,我在这里打开了一个AOSP问题 - https://code.google.com/p/android/issues/detail?id=190200。 - Sean Barbeau
1
我刚刚再次按照步骤操作(在SDK管理器中使用“Google APIs ARM EAMI v7a System Image”版本“Rev. 7”),并且我仍然可以在Windows 7 Enterprise机器上本地复现此问题。从命令行运行gradlew installDebug会失败,并显示com.android.ddmlib.ShellCommandUnresponsiveException。有趣的是,尝试从Android Studio安装会导致模拟器“电源循环”-我以前从未见过这种情况。 - Sean Barbeau
1
抱歉,你是对的,我昨天在本地重现了它,如果可能的话,我现在会尝试解决它。 - albodelu
1
又一个像我们几个月前讨论过的那样硬编码和限制性的超时 lol https://code.google.com/p/android/issues/detail?id=69735 - albodelu
显示剩余3条评论
1个回答

9

简短回答

Android Gradle插件有一个硬编码的超时值,这个值太低了。

Google在2.0.0-beta3版本中修复了这个问题

将在2.0.0-beta3中发布。

那么我们在build.gradle中要设置什么超时时间呢?

目前所有内容都与android.adbOptions.timeOutInMs相关联。

示例:Google项目Increasing ADB timeoutadding Travis-ci support。它有效!。


以前的回答

这是已经报告过的同样问题

在这里阅读unity3开发人员的解决方法关于硬编码和低超时。

并且标记问题

你是对的。这不是Travis-ci的问题,要重现它,您只需要创建一个armeabi-v7a模拟器,并尝试从gradle命令本地安装任何应用程序。

更多信息请参阅此处,我的答案的更新3

更新:

您可以使用adb避免installVariant任务和此问题:

./gradlew clean
./gradlew assembleDebug
./gradlew assembleDebugAndroidTest
adb install app/build/outputs/apk/app-debug.apk
adb install app/build/outputs/apk/app-debug-androidTest-unaligned.apk
adb shell am instrument -w com.google.samples.apps.topeka.test/android.support.test.runner.AndroidJUnitRunner

它能够正常工作:

...
:app:assembleDebugAndroidTest

BUILD SUCCESSFUL
Total time: 19.787 secs
2413 KB/s (4204090 bytes in 1.701s)
    pkg: /data/local/tmp/app-debug.apk
Success
1984 KB/s (1058902 bytes in 0.521s)
    pkg: /data/local/tmp/app-debug-androidTest-unaligned.apk
Success

com.google.samples.apps.topeka.activity.SignInActivityTest:.
com.google.samples.apps.topeka.activity.quiz.EntertainmentQuizTest:.
com.google.samples.apps.topeka.activity.quiz.GeneralKnowledgeQuizTest:..

感谢您提供的地图团队存储库链接,@ardock。非常感谢! - tasomaniac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接