【问题标题】:Unable to open debugger port : java.net.SocketException "Socket closed"无法打开调试器端口:java.net.SocketException "Socket closed"
【发布时间】:2014-02-13 21:48:32
【问题描述】:

尝试在 Android Studio (v.0.4.4) 上调试 Android 应用时出现此错误:

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

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

去年我遇到了这个问题,然后我通过卸载 Eclipse “修复了它”(我怀疑它可能正在尝试获取相同的套接字)。

我花了一些时间在谷歌上搜索并尝试提出建议,但它们没有任何区别。

这个问题发生在我制作一个签名的、经过保护的发布版本的时候。在那之前,我只运行调试版本。但是,我相信我为创建此版本所做的只是编辑 build.gradle 并将 Android Studio 配置为自动签署 apk。我已经恢复了对 build.gradle 的更改,但问题仍然存在。

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

希望阅读本文的人可以在这里提出一些我忽略的改变。

【问题讨论】:

    标签: android-studio


    【解决方案1】:

    在 Android Studio 桌面上,点击“选择运行/调试配置”按钮(带有 android 图标的按钮),您应该能够选择正确的选项。

    【讨论】:

    • 你知道吗,我昨晚发现了这一点,在对 workspace.xml(相当大的文件)进行了比较并进行了更改,直到它起作用为止!每次我进行发布构建(单击 Gradle,然后双击 assembleRelease)时,它都会更改我的运行/调试配置以运行 assembleRelease 选项。这有什么意义?您如何调试 assembleRelease 任务?这是 Android Studio 中的错误吗?
    • 这对我没有帮助。无论我选择什么,都会收到同样的错误。
    • 在哪里可以找到这个按钮?抱歉,我对 Android Studio 很陌生 :(
    【解决方案2】:

    我在使用 Java 程序时遇到了类似的问题。我重新启动了 IDE 并更改了 JMX 端口号。然后程序在调试模式下运行没有任何问题。

    【讨论】:

    • 将此放在评论中。这不是答案。
    • 如果这解决了问题,那么它应该作为一个答案。
    • 为什么这是一个新问题@BatuhanCoşkun?我同意@Jonathan。如果这解决了问题,这是一个完全有效的答案。仅仅因为它很短并不能成为评论。
    【解决方案3】:

    我在 linux 上遇到此错误,问题是另一个先前的进程占用了端口并挂起。所以,解决方法是通过netstat定位阻塞端口的进程,然后kill掉这个进程,或者重启机器。

    【讨论】:

    • 你能在你的答案中分享快照吗?
    【解决方案4】:

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

    【讨论】:

    • 也是一种解决方案,但是太做作了。使用下拉菜单(屏幕截图中标有 [InstallDebug] 的那个)选择 Android 应用程序会很轻松。
    • 这对我来说是一个间歇性问题。套接字有时会关闭,而其他时候它可以正常工作。附加到调试后是一种解决方法,但为什么调试端口首先被阻止?
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

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

      【讨论】:

      • @Triztian 其他人告诉我接受哪个答案!不。它指的是“上方”的屏幕截图(其中“上方”在允许用户按 3 个不同标准对答案进行排序的网站上没有任何意义),只是已发布的已接受答案(应用程序配置)的另一种变体7 个多月前。
      • 这也是对我帮助最大的答案。上面的截图是 qix 14 年 10 月 9 日的回答。在 Android Studio 中选择正确的配置是通过“选择运行/调试配置”完成的,通过左键单击菜单栏中的下拉菜单到运行按钮的左侧(绿色的向右三角形)。必须选择 Android 应用程序,无论其名称如何。其他是无法调试的 Gradle 构建目标,因此出现错误。
      • 这个答案只是如何学习如何正确使用Android Studio,如果它只是告诉您在调试之前选择“应用程序”运行配置。这不是实际问题的答案。
      【解决方案7】:

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

      同样在 build.gradle 文件的 buildTypes 部分中,您可能需要debuggable true,否则如果您尝试手动附加调试器,您的进程将不会显示在对话框中。

      【讨论】:

      • debuggable true 添加到build.gradle 文件的好技巧!仍然无法直接从调试器调试,但现在我可以附加到我的进程。谢谢!
      【解决方案8】:

      我遇到了同样的行为,上述解决方案对我不起作用,但我有一个极端情况:我的应用扩展了 android.app.Application。我发现对我有用的是编辑运行/调试配置(“编辑配置...”),然后选择“不启动活动”而不是“启动默认活动”。

      【讨论】:

        【解决方案9】:

        我收到此错误是因为我将“运行/调试配置”对话框中的“测试种类”选项设置为“包中的所有内容”而不是“测试类”。当我将其设置为“测试类”时,调试器完美运行。

        【讨论】:

          【解决方案10】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-06-06
            • 1970-01-01
            • 1970-01-01
            • 2015-07-22
            • 2020-03-02
            • 1970-01-01
            相关资源
            最近更新 更多