当我使用Android Studio时,我正在努力寻找一些方法来处理我的项目中的两个永久性错误。
Emulator: emulator: ERROR: AdbHostServer.cpp:102: Unable to connect to adb daemon on port: 5037
Emulator: socketTcpLoopbackClientFor: error: fd 56668 above FD_SETSIZE (32768)
无论我使用哪个 AndroidAPI 版本,这两个错误都不会消失。我发现这个端口的模拟器连接数有点奇怪。也许它被设计成这样,也许我搞砸了一些事情,但我找不到是什么原因(我从头开始卸载并重新安装了Android Studio,但同样的问题依然存在
以下是事件日志
01/06/2020
00:08 Gradle sync started
00:08 * daemon not running; starting now at tcp:5037
00:08 * daemon started successfully
00:08 Gradle sync finished in 2 s 418 ms (from cached state)
00:08 Executing tasks: [:app:assembleDebug] in project C:\WSs\FireStoreDemos\AppFirestore
00:08 Emulator: socketTcpLoopbackClientFor: error: fd 56296 above FD_SETSIZE (32768)
00:08 Emulator: socketTcpLoopbackClientFor: error: fd 56296 above FD_SETSIZE (32768)
00:08 Emulator: emulator: ERROR: AdbHostServer.cpp:102: Unable to connect to adb daemon on port: 5037
00:08 Emulator: socketTcpLoopbackClientFor: error: fd 56668 above FD_SETSIZE (32768)
00:08 Emulator: socketTcpLoopbackClientFor: error: fd 56668 above FD_SETSIZE (32768)
00:08 Emulator: socketTcpLoopbackClientFor: error: fd 56928 above FD_SETSIZE (32768)
00:08 Emulator: socketTcpLoopbackClientFor: error: fd 56928 above FD_SETSIZE (32768)
00:08 Gradle build finished in 19 s 659 ms
00:08 Install successfully finished in 584 ms.: App restart successful without requiring a re-install.
而且当我运行应用程序时,错误 "Emulator: socketTcpLoopbackClientFor: error: fd 60252 above FD_SETSIZE (32768) "每分钟都会弹出很多。
这里是我认为奇怪的地方
C:\Users>netstat -ano | findstr "5037"
TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 11880
TCP 127.0.0.1:5037 127.0.0.1:54602 ESTABLISHED 11880
TCP 127.0.0.1:5037 127.0.0.1:54631 ESTABLISHED 11880
TCP 127.0.0.1:5037 127.0.0.1:54643 ESTABLISHED 11880
TCP 127.0.0.1:5037 127.0.0.1:54647 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:54648 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:54649 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:54650 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:54662 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:54663 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:54665 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:54666 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:54667 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:54668 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:54669 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:54670 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:54671 ESTABLISHED 11880
TCP 127.0.0.1:5037 127.0.0.1:54672 TIME_WAIT 0
TCP 127.0.0.1:5037 127.0.0.1:54673 ESTABLISHED 11880
TCP 127.0.0.1:5037 127.0.0.1:54674 TIME_WAIT 0
TCP 127.0.0.1:54602 127.0.0.1:5037 ESTABLISHED 348
TCP 127.0.0.1:54631 127.0.0.1:5037 ESTABLISHED 5224
TCP 127.0.0.1:54634 127.0.0.1:5037 TIME_WAIT 0
TCP 127.0.0.1:54636 127.0.0.1:5037 TIME_WAIT 0
TCP 127.0.0.1:54639 127.0.0.1:5037 TIME_WAIT 0
TCP 127.0.0.1:54641 127.0.0.1:5037 TIME_WAIT 0
TCP 127.0.0.1:54643 127.0.0.1:5037 ESTABLISHED 348
TCP 127.0.0.1:54671 127.0.0.1:5037 ESTABLISHED 348
TCP 127.0.0.1:54673 127.0.0.1:5037 ESTABLISHED 348
C:\Users>
所以我的直截了当的问题是:为什么这么多ESTABLISHED和TIME_WAIT连接到5037?
一些有用的评论可能会帮助我继续前进:Android Studio真的需要在启动过程中和在我调试应用程序之前使用这样的端口吗?有什么技巧可以让Daemon只在调试时启动(作为一个拙劣的比喻,我们在Spring Boot中编码时不会让TomCat一直运行)。我不明白为什么我在启动Android Studio后立即收到 "daemon not running; starting now at tcp:5037 "的消息,因为我还没有开始有效地使用模拟器,既没有通过运行也没有通过调试。
作为到目前为止我找到的唯一合理的答案,我回答我自己的问题部分基于 其他建议
这似乎是某种程度上与仿真器的多核CPU的问题。所以只要取消勾选多核CPU,如下Avd Manager -> Select emulator -> edit -> Advanced Settings -> Multi-core CPU -> UNCHECK this option。
也许以后有人能在这边补充一个更好的解释。