首先,我确定我已按照 Attaching MonoDevelop Debugger To An Android Device 中的所有步骤进行操作正确引导(最重要的是:在build设置中启用“开发构建”和“脚本调试”)。
但是,在构建和运行 Unity Android 应用程序时,我的设备(Samsung Galaxy S5、Android 6.0.1)在 MonoDevelop 和 Visual Studio 中都没有显示为可能的调试目标。例如在 Visual Studio 中,单击“调试”->“附加 Unity 调试器”后,在打开的“选择 Unity 实例”窗口中我只看到 Unity3d 编辑器(机器:本地机器,类型:编辑器)。调试在 Unity 编辑器中运行的 Unity 项目工作正常,仅调试在物理 android 设备上运行的项目不起作用。 MonoDevelop 也是如此。
我看到设备已连接并在线
adb devices
我还可以通过命令行在该设备上调用 adb shell 命令(例如 ls
)。当我打开 Android Studio 时,我还会将设备视为 Logcat 的目标,甚至将刚才提到的 Unity Android 应用程序视为可调试进程(选择它时,会看到正在运行的应用程序所期望的所有正确日志)。
我认为排除调试器方面的故障是安全的,因为我试过了
- 两台不同的开发人员机器(均装有 Windows 10 且没有防火墙),
- 两个不同的网络(家庭和大学)
- MonoDevelop、Visual Studio Community 2015、Visual Studio Professional 2017 RC(以及相应的 Unity 工具),
- 重新安装 Unity3d,
- 不同的 Unity3d 项目(标准示例项目以及自己的最小示例,仅包含一个文本和一个按钮),
- 手动添加
android:debuggable="true"
到项目的 AndroidManifest 和 - 在 Visual Studio 中通过 deviceip:5555 手动将调试器连接到设备(在“选择 Unity 实例”窗口 -> 输入 IP 中)。
在设备上,我尝试了
- 将手机关机再开机,
- 关闭和打开 USB 调试,
- 选择 Unity 应用作为“调试应用”(在开发者选项中)并启用/禁用“等待调试器”(也在开发者选项中),
- 通过 USB 数据线或通过
adb connect deviceip:5555
连接设备 - root 手机。
我不知道还能尝试什么。我很确定这是设备上的东西。它曾经曾经工作过,但是我不知道从那以后发生了什么变化。任何提示表示赞赏。
编辑
好的,所以我取得了一些进展。当我检查应用程序的 logcat 输出时,我发现了诸如
Waiting for connection from host on [192.168.2.110:55416]...
(.2.110 是设备的 IP) 因此,我在 Visual Studio 的 “选择 Unity 实例”窗口 -> 输入 IP 中手动输入了该 IP 和端口,之后,logcat 读取
PlayerConnection accepted from [192.168.2.115] handle:0x1c
(.2.115 是我的开发机器) 所以连接是。 Visual Studio 只是不“识别”(?)它并且不切换到 Debug模式,因此它可以在断点处停止。有谁知道我如何强制它这样做?
最佳答案
好吧,这不是真正的答案,但我毕竟找到了调试它的方法。在所有 logcat 输出中,我还发现了这一行:
Using monoOptions --debugger-agent=transport=dt_socket,embedding=1,defer=y,address=0.0.0.0:56785
获取该端口(和实际设备 IP)并在“选择 Unity 实例”窗口的 Visual Studio 中输入它 -> 输入 IP,调试器最终连接。
问题是,每次运行应用程序时该端口都会更改,因此为了调试它,我将始终需要查找它。此外(这可能完全是一个不同的问题),Debug.Log 或 Console.WriteLine 的输出未被调试器捕获。目前读取日志的唯一方法是在 AndroidStudio 中。
是的,问题仍然存在,为什么设备没有在 Visual Studio 的 Select Unity Instance 窗口中显示为 AndroidPlayer(或根据位置MonoDevelop)?
关于Android 设备未显示为 Unity3d 调试的目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42392522/