Android 设备未显示为 Unity3d 调试的目标

Tom*_*dek 5 android monodevelop unity-game-engine visual-studio

首先,我确信我已经正确地遵循了将 MonoDevelop 调试器附加到 Android 设备指南中的所有步骤(最重要的是:在构建设置中启用了“开发构建”和“脚本调试”)。

但是,在构建和运行 Unity Android 应用程序时,我的设备(Samsung Galaxy S5、Android 6.0.1)在 MonoDevelop 和 Visual Studio 中都没有显示为可能的调试目标。例如在 Visual Studio 中,单击 Debug -> Attach Unity Debugger 后,在打开的“Select Unity Instance”窗口中,我只看到 Unity3d 编辑器(机器:本地机器,类型:编辑器)。调试在 Unity 编辑器中运行的 Unity 项目工作正常,只有调试在物理 android 设备上运行的项目不起作用。MonoDevelop 也是如此。

执行操作时,我看到设备已连接并在线

adb devices
Run Code Online (Sandbox Code Playgroud)

我还可以ls通过命令行在该设备上调用 adb shell 命令(例如)。当我打开 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和连接设备
  • 手机生根。

我不知道还能尝试什么。我很确定它是设备上的东西。它已经工作过,但我不知道,因为那什么改变。任何提示表示赞赏。

编辑

好的,所以我取得了一些进展。当我检查应用程序的 logcat 输出时,我发现了诸如

Waiting for connection from host on [192.168.2.110:55416]...
Run Code Online (Sandbox Code Playgroud)

(.2.110 是设备的 IP)所以我在“选择 Unity 实例”窗口中的 Visual Studio 中手动输入该 IP 和端口- > 输入 IP,然后,logcat 读取

PlayerConnection accepted from [192.168.2.115] handle:0x1c
Run Code Online (Sandbox Code Playgroud)

(.2.115 是我的开发机器)所以连接在那里。Visual Studio 只是不会“识别”(?)它并且不会切换到调试模式,因此它可以在断点处停止。有谁知道我如何强迫它这样做?

Tom*_*dek 6

好吧,这不是真正的答案,但毕竟我已经找到了调试它的方法。在所有 logcat 输出中,我还发现了这一行:

Using monoOptions --debugger-agent=transport=dt_socket,embedding=1,defer=y,address=0.0.0.0:56785
Run Code Online (Sandbox Code Playgroud)

获取该端口(和实际设备 IP)并将其输入到 Visual Studio 中的“选择 Unity 实例”窗口 -> 输入 IP,调试器最终连接。

问题是,每次运行应用程序时该端口都会更改,因此为了调试它,我总是必须查找它。此外(这可能是一个完全不同的问题),调试器不会捕获 Debug.Log 或 Console.WriteLine 的输出。目前读取日志的唯一方法是在 AndroidStudio 中。

所以是的,问题仍然存在,为什么设备没有在 Visual Studio的Select Unity Instance窗口中显示为 AndroidPlayer(或 MonoDevelop 中的相应位置)?