Android Studio:Gradle执行失败。原因:管道破裂。

3
每当我在Android Studio中构建/运行我的Android项目时,都会弹出一个消息框,显示:Failed to complete Gradle execution.Cause: Broken pipe然后旧版本的应用程序就在我的设备上开始运行。我尝试过清理该项目,但是仍然收到同样的消息。我尝试了这里的解决方法,但没有帮助。我还尝试了这里的解决方法。我得到了以下输出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'])
}

你是在模拟器上还是真机上尝试? - Orhan Obut
请在应用程序文件夹中分享您的 build.gradle。 - Dheeraj Bhaskar
@nr4bt - 我正在设备上尝试。这有关系吗? - Pervy Sage
@DheerajBhaskar - 请查看编辑。 - Pervy Sage
看起来是正确的,我记得在AndroidStudio发布页面上看到过这个错误。你使用的是最新版本吗?如果不是,请更新。使用金丝雀通道。 - Dheeraj Bhaskar
我该如何检查我是否使用的是最新的版本?如果没有,我该如何设置到金丝雀频道? - Pervy Sage
6个回答

5
我遇到了类似的问题,但是当我把我的Linux笔记本电脑配置为路由器时出现了问题。使用情况是我会通过笔记本电脑路由我的手机的WiFi流量,并在调试时嗅探HTTP请求。这似乎会让gradle和/或android studio感到困惑。
要解决这个问题,请删除必要的iptables命令,killall -9 java并重新启动android studio。
导致问题的Linux命令(这些和其它类似的命令会引起问题):
1. iptables -t nat -A POSTROUTING -j MASQUERADE 2. echo 1 > /proc/sys/net/ipv4/ip_forward
在Linux上,我只需要做以下几步:
1. iptables -t nat -F 2. echo 0 > /proc/sys/net/ipv4/ip_forward
请注意,上述解决方案可能会破坏您的防火墙,所以不要在不知道自己在做什么的情况下玩弄这些东西。

4

我在 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  

Gradle守护进程由ADS启动,仅接受来自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

1

对于第三种解决方案,请参见此线程中的评论#2

对我来说,唯一的解决方法是使用IPv6而不是IPv4: 在bin / studio.vmoptions或bin / studio64.vmoptions中(取决于您是否为32位或64位),将行-Djava.net.preferIPv4Stack = true更改为-Djava.net.preferIPv6Stack = true

这有点丑陋,但不会破坏任何现有的IPv4配置。


1

对于那些从Google过来查看更新的人,以下是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


0

因为在谷歌上搜索后,我发现没有人遇到同样的问题,所以我决定学习一下"Broken pipe"是什么意思。在阅读了这里之后,我突然想到可能是系统中的某个进程挂掉了。于是我重启了系统,问题就解决了。:-)


0

如果您因MASQUERADE而遇到此问题并且无法禁用它,可以使用以下解决方法:将被视为“远程”的IP地址(因为masquerading)添加到环境变量OPENSHIFT_IP中,gradle daemons将允许它(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中一个daemons的输出日志。


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