ADB服务器在macOS上没有响应确认(ACK)

19

自从我将Android Studio更新到最新的稳定版本2.3以来,两天前我就一直遇到这个错误;我从Gradle控制台中得到的完整错误消息如下:

07:59:59 E/adb: error: could not install *smartsocket* listener: Address already in use
07:59:59 E/adb: ADB server didn't ACK
07:59:59 E/adb: * failed to start daemon *
07:59:59 E/adb: error: cannot connect to daemon
07:59:59 E/ddms: '/Users/USER_NAME/Library/Android/sdk/platform-tools/adb start
server' failed -- run manually if necessary

我的解决问题的尝试:

  • 杀掉所有 adb 进程,并确保没有进程占用端口5037,adb kill-server(即使adb正在运行也会显示* server not running *),关闭Android Studio,删除~/.android目录,运行adb start-server(显示* daemon not running. starting it now at tcp:5037 *; * daemon started successfully *),启动Android Studio并运行应用程序,在MAC上会抛出错误adb quit unexpectedly,gradle控制台显示与我上面发布的相同的错误。

  • 卸载并删除所有Android Studio相关内容(除了项目目录),重新启动MAC,安装最新的Android Studio。

  • 在项目gradle.properties中增加gradle vm ramorg.gradle.jvmargs=-Xmx1536M

  • 卸载杀毒软件并重启MAC

环境:

  • 操作系统:MacOS Sierra 10.12.3
  • Android Studio:2.3
  • buildToolsVersion:'25.0.0'
  • Android Debug Bridge版本:1.0.39

尝试从Android Studio SDK Manager中重新安装(即卸载并重新安装)platform-tools。在这些操作之间,您可以在shell中运行adb命令,以确保ADB未在系统中重复安装。 - Onik
嗨@Onik,我卸载了platform-tool然后在终端上运行了adb。它说找不到命令。所以我认为没有重复。 - PeaceDefener
5个回答

12

Address already in use 表示您有另一个 adb 实例正在运行。 检查您的系统变量 $PATH$ANDROID_HOME,以及您项目的 local.properties 文件和您的 .bash_profile。确保所有这些都具有相同的 Android SDK 路径。然后尝试重新启动 adb 服务器。 adb kill-serveradb start-server


谢谢Jithin,我一直在Activity Monitor中看到一个adb实例。然后我在我的MAC上创建了一个新用户并安装了Android Studio,它就可以工作了。我发现这与$PATH有关,并深入研究了.bash_profile.bashrc.profile.zshrc.zlogin,清理了重复项,现在它可以工作了。再次感谢。 - PeaceDefener

2

嗨@Jaco,第一个链接在我的MAC上没有解决问题;请参见日志。至于第二个链接,SDK路径已经设置好了,并且我创建并导出了自定义路径,安装了工具,并在Android Studio中进行了更改,但仍然没有运气。 - PeaceDefener

1
在我的情况下,我安装了一个旧版本的adb,使用brew cask。虽然我将Android Studio更新到最新版本,但adb仍然指向安装较旧版本的brew。
因此,在使用以下命令更新该版本后:
brew cask install android-platform-tools

并确保adb本身指向新版本,错误消失了。

1
我通常发现这个问题发生在我有两个ADB实例同时工作时,即当我同时运行Eclipse和Android Studio,并且它们指向系统上不同的SDK管理器(platform-tools文件夹)时。尝试搜索其他使用ADB的IDE,通过Activity Monitor结束它,并只运行一个实例。或者我的解决方法是只有一个SDK管理器,并将我的两个IDE都指向一个platform-tools文件夹。希望能有所帮助。

-1
只需将platform-tools路径(/Users/USER_NAME/Library/Android/sdk/platform-tools)写入.bash_profile文件中,位于(/Users/USER_NAME/.bash_profile),如下所示:
export PATH="$PATH:/Users/USER_NAME/Library/Android/sdk/platform-tools"

1
请详细阐述你的答案,以帮助其他人了解这个问题。 - lprakashv

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