2014-02-13 121 views
47

试图调试在Android Studio中的Android应用程式(v.0.4.4),当我得到这个错误:无法打开调试端口:java.net.SocketException异常“套接字关闭”

Error running <appname> [assembleDebug]: 
Unable to open debugger port : java.net.SocketException "Socket closed" 

该应用程序编译,并可以使用adb推送到手机。 adb没有问题;我可以完美地安装/监视logcat等。我可以加载另一个项目,并可以调试它就好了。我切换回到这一个,它仍然是坏的。所以这似乎排除了与PC(实际上是在Windows下运行的Linux虚拟机),Android Studio安装等问题。我已经重新启动了这个虚拟机和主机电脑。

去年我去年有这个问题,我的“固定它”,然后通过卸载的Eclipse(我怀疑也许它正试图获得相同的插座)。

我花了一些时间谷歌搜索和尝试建议,但他们没有任何区别。

问题出现在我制作经过签名的编译发布版本的时候。在那之前,我只能运行调试版本。不过,我相信我所做的只是编辑build.gradle并将Android Studio配置为自动签署apks。我已经恢复了对build.gradle的更改,但问题仍然存在。

我在任何Android Studio日志文件中都看不到相关的错误;就好像这个异常被捕获,在屏幕上报告,但没有记录到任何地方。

希望有人读这可以在这里提出一些事情来改变,我已经忽视。

回答

44

在Android工作室的桌面,点击“选择运行/调试配置”按钮(一个与Android的图标),你应该能够选择正确的选项。

+2

你知道吗,我想通了这一点,昨晚版本比较workspace.xml(相当大的文件),直到它的工作进行更改后!每次我做一个发布版本(点击Gradle,然后双击assembleRelease),它会更改我的运行/调试配置以运行assembleRelease选项。这是什么意思?你如何调试assembleRelease任务?这是Android Studio中的错误吗? –

+2

这不是正确的答案。请参阅http://stackoverflow.com/a/21188221/1459573 –

+0

这不帮助我。无论我选择什么,我都会收到同样的错误。 – parvus

31

我有这个“套接字关闭”错误的几个星期,这是推动我疯了轻微。今天,我发现,虽然通过调试图标启动仍然给我一个“套接字关闭”,如果我以后连接调试器它工作(在屏幕截图)。希望它可以节省别人的时间。

Screenshot highlighting the attach debugger icon

+0

另外一个解决方案,但太做作。选择用下拉菜单(一个在你的屏幕截图标记为[InstallDebug])的Android应用程式会轻松做到这一点。 – Sven

+0

这是这对我来说是一个间歇性的问题,有些时候socket是关闭的,有些时候它没有问题。以后连接到调试是一个解决方法,但为什么在世界上调试端口首先被阻塞? – chubbsondubs

+0

只为我!!!谢谢你做了很多的解决方案!!!! –

25

我可以通过选择“应用程序”的配置来解决这个问题。在上面的屏幕截图中,运行按钮左侧的下拉菜单允许您选择配置。选择一个不带括号的配置。

+4

我想这应该是公认的答案! – Triztian

+3

其他@Triztian有人告诉我该回答接受!不,它指的是屏幕截图“上面”(其中“高于”对于允许用户按3种不同标准对答案进行排序的网站没有任何意义),并且仅仅是在7个月之前发布的接受答案(应用配置)上的另一种变体 –

+0

这也是帮助我最好的答案。上面的屏幕截图在qix的答案中,10月9日,14日。在Android Studio中选择正确的配置是通过“选择运行/调试配置”完成的,该配置通过左键单击菜单栏中的下拉菜单访问运行按钮左侧(绿色的右指向三角形)。必须选择Android应用程序,无论其名称如何。其他人是Gradle构建目标,无法调试,因此出现错误。 – Sven

3

为了避免这个问题,并从Android Studio中实际启动,我不得不明确地切换我正在运行的构建变体(通过在左边选择“构建变体”时弹出的面板)。然后,当实际上按下调试按钮时,我的Android应用程序配置(通过运行/调试图标左侧的下拉菜单选择),它会正确部署我所在的构建变体模式。(如果可以,我会很好设置不同的Android应用程序的配置,从下拉菜单中,而不必更多的手动切换变种部署不同的构建类型,但我不明白现在怎么正确。)

enter image description here

而且在buildTypes节在你的build.gradle文件中,你可能想要debuggable true,否则如果你尝试手动附加调试器,你的进程将不会显示在对话框中。

+0

伟大的提示添加'debuggable true'到build.gradle文件!仍然无法从调试器直接调试,但现在我可以附加到我的过程。谢谢! – Litome

2

我遇到了相同的行为,上述解决方案并没有为我工作,但我有一点角落情况:我的应用程序扩展android.app.Application。我发现我的作品是编辑运行/调试配置(“编辑配置...”),并选择“不启动活动”而不是“启动默认活动”。

3

我在linux上遇到了这个错误,问题在于另一个先前的进程占用了端口并挂起了。因此,该解决方案是一个netstat来定位阻塞该端口的进程,然后终止该进程,或者可以重新启动计算机。

+0

可以请你在答案中分享快照。 – Raulp

-2

确保您的Android手机连接良好。

2

我刚才遇到这个问题,简单的解决办法:如果你有多个实例在运行,请确保你的运行配置指定了不同的JMX端口。 refer to Image

1

我得到这个错误是因为我在“运行/调试配置”对话框中设置为“全部包装”而不是“测试类”中的“测试种类”选项。当我将它设置为“Test Class”时,调试器完美无缺地工作。

enter image description here

1

我有一个Java程序类似的问题。我重新启动IDE并更改了JMX端口号。然后程序以调试模式运行,没有任何问题。

+0

将此置于评论中。这不是一个答案。 –

+0

如果这解决了问题,那么它应该留作答案。 – Jon

+0

为什么这是一个新的quesiton @BatuhanCoşkun?我同意@Jonathan。如果这解决了这个问题,那么这是一个非常有效的答案。仅仅因为它很短暂并不能评论。 – Joe

相关问题