Unity3D 秘籍之 为何你无法使用ADB USB Profiling Android Player

Unity3D 秘籍之 为何你无法使用ADB USB Profiling Android Player

对于Android平台,Unity3D提供了两种原生的性能分析方法:Wi-Fi 与 ADB。

最为常见的是勾上Development Build 以及 Autoconnect Profiler。只要保证手机连接的Wi-Fi与正在Profiling的桌面电脑在同一网段,大多数情况下,游戏启动后Profiler都能正常找到手机。


通过Wi-Fi连接有很大局限性,例如:

  • 有时运行几十秒到几分钟后编辑器就收不到数据了
  • 数据严重延迟,并随着时间的推移延迟越来越大
  • 信号干扰大出现卡顿
  • 连接的Wi-Fi与电脑不在一个网段

遇到这些问题的时候你就需要通过ADB的方式来连接手机了


ADB的方式

你按照文档所说,勾了Development Build 与 Autoconnect Profiler,端口映射也做了

adb forward tcp:34999 localabstract:Unity-包名

接着,你选择了AndroidPlayer(ADB@127.0.0.1:34999)

注:不同版本默认端口有所不同

可Unity一点反应也没有

接着,你又会尝试映射一个其他端口号,然后

这回,Unity有反应了

你开始四处问人,别人告你,他也没成功过


你搜索、爬论坛,回复中都是文档的机器翻译了贴给你


终于有一天,你发现了这篇文章!!!

终于有一天,你发现了这篇文章!!!

终于有一天,你发现了这篇文章!!!


让我来告诉你,让人又气又好笑的真相

首先

对不起,输入的不是IP:Port,这里输入的得是IP,ADB USB连接时显然应该是127.0.0.1


然后使用默认的端口映射34999或54999是为什么还是不行?


因为官方文档没写完整

文档并不是要告诉你,手机上装好了APK,启动后如何通过ADB连接

根据反编译,可以知道Unity的执行流程

ConnectToPlayer() 的流程概括如下

  1. 从55000端口开始尝试连接
  2. 直至55511端口
  3. 尝试4600端口
  4. 若没有成功的,返回第1步,最多重复三次这样的行为


说到这,想必已经知道该怎么做了


  1. IP填写127.0.0.1
  2. adb forward 端口号选用55000 ~ 55511范围,或者4600 (5.x ~ 2017)
  3. 4.X版本,引擎代码中写死了常量55000


如果觉得这篇文章帮到了您,请不要吝啬点击“关注”...

如果觉得感激之情无以言表,请点击“赞赏”... O(∩_∩)O

编辑于 2017-10-20

文章被以下专栏收录