自从版本0.6.1以来,我已经在Android Studio的调试器下成功运行了Robolectric单元测试
现在我无法得到以下错误
ERROR: transport error 202: connect failed: Connection refused
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [../../../src/share/back/debugInit.c:750]
Could not write standard input into: Gradle Test Executor 1.
java.io.IOException: Broken pipe
我总是在编译设置中未设置使用in-process build
标志,虽然我目前使用的是AS 0.8-14,但我已经回过头来尝试0.8-11,0.8-9和0.6-1而且没有他们现在工作。我正在使用Android构建工具版本19.1.0(已经有一段时间了,它确实可以使用它们。)
可能是Mac OS X下的某些本地安全设置吗?我们将非常感激地提供任何帮助。
**更新**
我发现问题是由运行单元测试任务之前运行额外的JavaExec任务引起的。似乎gradle正在为第一个任务运行JVM并将调试参数传递给它,例如-agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=49807
任务完成,JVM退出。 Gradle然后运行实际的单元测试,并期望新的JVM在同一个端口上监听调试器连接 - 它没有连接,因此连接失败。
如何阻止先前任务(ormlite数据库编译任务)在调试器下运行或强制gradle识别单元测试任务将使用新JVM运行,因此更改单元测试的jvmArgs以反映新的调试端口?
答案 0 :(得分:0)
我通过将数据库编译任务更改为Exec
任务而不是JavaExec
任务来解决此问题。 exec任务定义如下,因此将数据库编译作为外部java进程执行,而不是作为gradle调用的进程执行。这阻止了调试JVM的消耗。通过数据库编译任务。
task (taskName type: Exec) {
def mainClass = "com.some.class"
def classPath = "${buildDir}/intermediates/classes/${flavorName}/${buildType.name}" + ":" + configurations.databaseCompile.asPath
commandLine "java", "-cp", classPath, mainClass, configDirName
}