每当我在android-studio中构建/运行我的android项目时,我会得到一个消息框:Failed to complete Gradle execution.Cause: Broken pipe
,然后应用程序的旧版本开始在我的设备上运行。我试图清理项目,但我得到了相同的消息。我尝试了解决方案here,但它没有帮助。我也尝试了解决方案here。我得到gradlew compileDebug --stacktrace --info
命令的以下输出:
Task 'compileDebug' is ambiguous in root project 'Wifi'. Candidates are: 'compileDebugAidl', 'compileDebugJava', 'compileDebugNdk', 'compileDebugRenderscript', 'compileDebugTestAidl', 'compileDebugTestJava', 'compileDebugTestNdk', 'compileDebugTestRenderscript'.
* Try:
Run gradlew tasks to get a list of available tasks. Run with --debug option to get more log output.
* Exception is:
org.gradle.execution.TaskSelectionException: Task 'compileDebug' is ambiguous in root project 'Wifi'. Candidates are: 'compileDebugAidl', 'compileDebugJava', 'compileDebugNdk', 'compileDebugRenderscript', 'compileDebugTestAidl', 'compileDebugTestJava', 'compileDebugTestNdk', 'compileDebugTestRenderscript'.
at org.gradle.execution.TaskSelector.getSelection(TaskSelector.java:69)
我不断收到同样的错误。有人可以帮忙吗?
修改
我的build.gradle
如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion 15
buildToolsVersion "20.0.0"
defaultConfig {
applicationId "com.example.pervysage.wifi"
minSdkVersion 15
targetSdkVersion 15
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
答案 0 :(得分:4)
我遇到了类似的问题,但发现当我将Linux笔记本电脑配置为路由器时出现问题。这里的用例是我将通过我的笔记本电脑路由我的手机的WiFi流量,并在调试时嗅探HTTP请求。这似乎混淆了gradle和/或android studio。
删除必要的iptables命令,killall -9 java并重启android studio以解决问题。
导致问题的linux命令(这些和其他类似命令会导致问题):
iptables -t nat -A POSTROUTING -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
在linux上,我只是执行以下操作:
iptables -t nat -F
echo 0 > /proc/sys/net/ipv4/ip_forward
请记住,上面的解决方案可能会搞砸你的防火墙,所以除非你知道自己在做什么,否则不要玩这些东西。
答案 1 :(得分:3)
我在Fedora 20上遇到了与ADS相同的问题。
在启用MASQUERADING之前,一切正常。
问题是防火墙规则,它强制在tcp连接到本地主机的SNAT(MASQUERADE)。
# iptables -L POST_public_allow -t nat -v
Chain POST_public_allow (1 references)
pkts bytes target prot opt in out source destination
73446 4498K MASQUERADE all -- !lo any anywhere anywhere
由ADS启动的gradle daemin仅接受来自127.0.0.1(环回地址)的连接。但防火墙规则强制使用公共接口地址。 gradle守护程序拒绝连接并发生“Broken pipe”错误。
该问题有两种解决方案:
1。)完全禁用MASQUERADING:
# sudo firewall-cmd --remove-masquerade
2.)修复nat规则:
# iptables -I POST_public_allow -t nat ! -i lo ! -o lo -j MASQUERADE
答案 2 :(得分:1)
对于第三种解决方案,请参阅comment #2 in this thread。
对我来说唯一的解决方法是使用ipv6而不是ipv4: 在bin / studio.vmoptions或bin / studio64.vmoptions中(取决于你是32位还是64位),通过-Djava.net.preferIPv6Stack = true更改ligne -Djava.net.preferIPv4Stack = true
它有点难看,但它并没有破坏任何现有的IPv4配置。
答案 3 :(得分:0)
因为即使在谷歌搜索后我也找不到任何人有同样的问题,我决定了解“断管”的含义。阅读here之后,我只是觉得我的系统中的某些过程必定会消失。我只是重新启动了我的系统并修复了问题。 : - )
答案 4 :(得分:0)
对于那些从谷歌来这里看一些更新的人来说,这是他们可以尝试的,直到Gradle团队修复它。
问题是Gradle守护程序正在尝试使用IPv4而不是IPv6。
解决方法1:在Linux上,将以下内容放在〜/ .profile或〜/ .bash_profile中:export _JAVA_OPTIONS =“ - Djava.net.preferIPv6Addresses = true”
解决方法2:在Android Studio的vmoptions文件中,将-Djava.net.preferIPv6Addresses = true行更改为-Djava.net.preferIPv6Addresses = true
在官方网站上查看详细信息:http://tools.android.com/knownissues#TOC-Mac-OS-X-Performance
答案 5 :(得分:0)
如果您因为 MASQUERADE 而遇到此问题并且无法禁用它,作为一种解决方法,可以将被视为“远程”(由于伪装)的 IP 添加到环境变量 OPENSHIFT_IP
和然后 gradle 守护进程将允许它 (https://github.com/gradle/gradle/blob/master/subprojects/messaging/src/main/java/org/gradle/internal/remote/internal/inet/InetAddressFactory.java#L136)。
要找到被阻止的 IP,您需要查看 ~/.gradle/daemon/X.X.X/daemon-XXXXXXX.out.log
中的一个守护进程的输出日志