【问题标题】:How to fix Android Studio not being able to connect to Gradle daemon?如何修复 Android Studio 无法连接到 Gradle 守护进程?
【发布时间】:2015-01-25 23:49:40
【问题描述】:

我正在尝试启动 Android Studio 并不断收到 Gradle 错误。查看守护程序日志,守护程序似乎只接受来自 IPv6 连接或 127.0.0.1 的连接。

但是,我不知道如何让它接受其他连接或使用 IPv6。我尝试在各个地方添加 IPv6 标志无济于事。

请注意,代码会遍历我的网络接口,但仍然只接受 127.0.0.1 连接。

错误本身来自 Gradle 代码的这一部分:

https://code-review.gradle.org/browse/Gradle/subprojects/messaging/src/main/java/org/gradle/messaging/remote/internal/inet/TcpIncomingConnector.java?r=6264564978680860f88e7a43659459f778546fe8#to104

这是日志文件:

17:49:57.451 [INFO] [org.gradle.launcher.daemon.server.Daemon] start() called on daemon - DefaultDaemonContext[uid=f2ffb085-b7ad-446a-983d-d6d47a3ae4c0,javaHome=/usr/lib/jvm/java-7-oracle,daemonRegistryDir=/home/whistlepig/.gradle/daemon,pid=7040,idleTimeout=10800000,daemonOpts=-XX:MaxPermSize=256m,-XX:+HeapDumpOnOutOfMemoryError,-Xmx1024m,-Dfile.encoding=UTF-8,-Duser.country=US,-Duser.language=en,-Duser.variant]
17:49:57.466 [DEBUG] [org.gradle.launcher.daemon.server.DaemonStateCoordinator] updating lastActivityAt to 1422226197466
17:49:57.477 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding IP addresses for network interface vboxnet0
17:49:57.478 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Is this a loopback interface? false
17:49:57.479 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Is this a multicast interface? true
17:49:57.481 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding remote address /fe80:0:0:0:800:27ff:fe00:0%4
17:49:57.483 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding remote address /192.168.56.1
17:49:57.487 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding remote multicast interface vboxnet0
17:49:57.488 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding IP addresses for network interface p10p1
17:49:57.489 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Is this a loopback interface? false
17:49:57.491 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Is this a multicast interface? true
17:49:57.492 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding remote address /169.254.8.98
17:49:57.493 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding remote multicast interface p10p1
17:49:57.494 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding IP addresses for network interface p9p1
17:49:57.496 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Is this a loopback interface? false
17:49:57.497 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Is this a multicast interface? true
17:49:57.499 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding remote address /fe80:0:0:0:12c3:7bff:fe46:5caf%2
17:49:57.500 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding remote address /10.0.0.45
17:49:57.501 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding remote multicast interface p9p1
17:49:57.503 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding IP addresses for network interface lo
17:49:57.504 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Is this a loopback interface? true
17:49:57.505 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Is this a multicast interface? false
17:49:57.507 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding loopback address /0:0:0:0:0:0:0:1%1
17:49:57.508 [DEBUG] [org.gradle.messaging.remote.internal.inet.InetAddressFactory] Adding loopback address /127.0.0.1
17:49:57.515 [DEBUG] [org.gradle.messaging.remote.internal.inet.TcpIncomingConnector] Listening on [73551d2b-fa6b-4f37-8520-8694106b50e7 port:49792, addresses:[/0:0:0:0:0:0:0:1%1, /127.0.0.1]].
17:49:57.521 [DEBUG] [org.gradle.launcher.daemon.server.Daemon] Daemon starting at: Sun Jan 25 17:49:57 EST 2015, with address: [73551d2b-fa6b-4f37-8520-8694106b50e7 port:49792, addresses:[/0:0:0:0:0:0:0:1%1, /127.0.0.1]]
17:49:57.523 [INFO] [org.gradle.launcher.daemon.server.DomainRegistryUpdater] Advertising the daemon address to the clients: [73551d2b-fa6b-4f37-8520-8694106b50e7 port:49792, addresses:[/0:0:0:0:0:0:0:1%1, /127.0.0.1]]
...
[org.gradle.messaging.remote.internal.inet.TcpIncomingConnector] Cannot accept connection from remote address /10.0.0.45.

【问题讨论】:

  • 被防火墙阻止了? VirtualBox 配置问题?
  • 我在本地主机和裸机上运行。它只是从 10.0.0.45 设置连接源,而不是 127.0.0.1。
  • 如果您可以使用 allowRemote=true 初始化该接收器实例,则将允许这些连接。 gradle.org/docs/current/userguide/… 提到了一些守护进程属性。

标签: android gradle android-studio


【解决方案1】:

我在安装新的 Android Studio 时遇到了非常相似的问题。过去 42 小时用谷歌搜索并尝试各种修复。我很高兴我没有像一些建议的那样删除我的防火墙 - 因为防火墙日志实际上帮助我诊断了这个问题的根本原因 - 即 Android Studio 正在将消息从 IPv4 套接字发送到 Gradle Java 上的 IPv6 套接字.exe进程!

诊断出问题后,只需通过谷歌搜索即可找到正确答案 - 在这篇文章中:https://superuser.com/questions/453298/how-to-force-java-to-use-ipv4-instead-ipv6

这为我解决了问题。

【讨论】:

    【解决方案2】:

    如果您碰巧在装有 Killer Wireless 1535 的游戏笔记本电脑上编写代码,我建议您在 Killer Command Center 中关闭 Killer Double Shot Pro。这对我有用!!

    【讨论】:

      【解决方案3】:

      如日志所示,gradle daemon 监听环回接口(ipv4 和 ipv6):ipv4/ipv6

      17:49:57.523 [INFO] [org.gradle.launcher.daemon.server.DomainRegistryUpdater] Advertising the daemon address to the clients: [73551d2b-fa6b-4f37-8520-8694106b50e7 port:49792, addresses:[/0:0:0:0:0:0:0:1%1, /127.0.0.1]]
      

      错误信息显示,连接来自地址 10.0.0.45,不允许连接:

      [org.gradle.messaging.remote.internal.inet.TcpIncomingConnector] Cannot accept connection from remote address /10.0.0.45.
      

      请参阅https://stackoverflow.com/a/32777685/982303 了解可能的解决方案。

      【讨论】:

        【解决方案4】:

        这似乎是一个已知的错误,根据https://code.google.com/p/android/issues/detail?id=82347

        它提供了一种适用于某些人的解决方法:

        The only workaround for me is to use ipv6 instead of ipv4 : in bin/studio.vmoptions or bin/studio64.vmoptions (depending on if you are in 32 or 64 bits), change the line -Djava.net.preferIPv4Stack=true by -Djava.net.preferIPv6Stack=true
        

        还有一种方法可以将守护进程配置为允许远程连接。

        【讨论】:

        • 我实际上是在评论 #7 关于那个错误,说它对我不起作用:)
        • 或者更确切地说,我不知道如何让它在我的机器上工作。
        【解决方案5】:

        卸载 Killer Control Center 和驱动程序是解决方案。

        【讨论】:

          猜你喜欢
          • 2021-11-08
          • 2021-10-01
          • 2023-04-04
          • 1970-01-01
          • 2017-02-28
          • 2022-07-01
          • 1970-01-01
          • 2017-06-14
          相关资源
          最近更新 更多