Unity中使用Profiler进行Android远程调试

Unity中使用Profiler进行Android远程调试

这两天研究了下Profiler进行远程调试Android, 查看内存和CPU使用情况等. 原来其实就研究过, 只是很久不用又忘了, 所以写文章记录一下, 避免下次又重复采坑.

网上有些文章写得比较明白, 比如这篇, 基本上照着做问题不大. 我这篇文章主要是做一个记录, 还有加上一些自己的总结. 同时也怕别人的文章不见了, 而且总归自己过一遍也是好的.

实现原理剖析

原理其实很简单, 如果有同学平时使用过AndroidStudio应该对adb命令不陌生才对. 整个调试过程其实就是基于adb, 然后监听固定端口而已.

adb相当于一个调试服务器, 它接收和分析app的处理过程, 详细可以参考谷歌官方文档.

Unity的Profiler只是在adb接收和分析完毕后在固定端口分发的消息而已.

个人觉得理解这个原理比较重要, 如果只是按照网上的文章或者Unity官方文档来照着做, 在具体实践的时候有些莫名其妙的问题无法自己独立解决, 特别是端口占用之类的问题.

实践过程

详细的过程可以参考上面那篇文章, 我这里只是简单做一个记录.

随便创建一个工程后进入BuildingSetting, 然后切换到Android平台, 之后按照图示勾选即可.

Unity中使用Profiler进行Android远程调试_第1张图片

有几点说明一下:

  • 需要预先在Unity Preference中设置好SDK, JDK之类的路径
  • 在PlayerSetting中设置好Package Name, 这个后面要用到
  • 我这里没有勾选的是Export Project而不是官方建议的Build And Run, 因为直接构建容易出问题, 特别是国内的网被墙了之后会导致Gradle各种问题, 所以这里推荐导出项目之后, 单独使用AndroidStudio来构建
  • 这里也没有勾选Autoconnect Profiler, 因为让它自己来连也容易出问题, 但是如果后面在Profiler中没有出现adb通道, 那么可以先勾选上, 影响不大

导出之后通过AndroidStudio直接在模拟器上(比如雷电模拟器)运行就行了, 不需要在真机上跑, 当然你想在真机上跑也没毛病不是.

只要导出完成后打开Profiler, 就会出现AndroidPlayer([email protected]:34999), 运行游戏(模拟器上), 这里选择后既可以看到运行状态了. 如下所示:

Unity中使用Profiler进行Android远程调试_第2张图片

最后就可以按照平时在Editor下使用Profiler来调试游戏的方式进行开心的调试了.

当然, 以上的过程是官网推荐, 大部分情况下, 按照这个流程来跑是无法真正收到调试信息的. 一般你只会看到它毫无动静, 而你却一脸懵.

所以我们还需要一些小操作, 打开命令行(或者powershell), 执行以下命令:

adb kill-server # 关闭adb调试服务器
adb start-server # 开启adb调试服务器
# * daemon not running; starting now at tcp:5037
# * daemon started successfully
# 看到上面的打印代表调试服务器启动成功了
adb forward tcp:34999 localabstract:Unity-com.ilclpj.remote # 监听adb的34999端口, 并把app绑定到该端口, 前面都是固定的, 这里com.ilclpj.remote是你的Package Name, 就是PlayerSetting里面设置的那个
# 这条命令只要没报错, 就代表监听成功了, 一般在上面直接重启了服务器, 这里应该不会报错
# 如果真的报错了, 那么就参考上面那篇文章, 主体思路就是解开adb调试服务器的端口占用, 然后重启服务器而已
# 我原先按照上面文章去做的, 后面发现直接重启服务器就行了, 如果各位同学出现其它问题, 就按照这个思路去探索吧

然后重启Unity, 再打开Profiler, 选择AndroidPlayer就可以看到信息了. 有些Unity版本不需要重启, 这里我用的是2017, 比较老, 所以需要重启, 大家可以打开Profiler看看, 如果没有信息再重启也行.

最后提一下, 这里的34999(Unity5.x是54998之类的)端口貌似是固定的, 我试过换成其它端口, 一直没成功, 希望懂行的同学能够指点下我.

好了, 今天就是这些, 希望对大家有所帮助.

你可能感兴趣的:(工程方法,Unity技巧,Unity,unity,游戏引擎)