这两天研究了下Profiler进行远程调试Android, 查看内存和CPU使用情况等. 原来其实就研究过, 只是很久不用又忘了, 所以写文章记录一下, 避免下次又重复采坑.
网上有些文章写得比较明白, 比如这篇, 基本上照着做问题不大. 我这篇文章主要是做一个记录, 还有加上一些自己的总结. 同时也怕别人的文章不见了, 而且总归自己过一遍也是好的.
原理其实很简单, 如果有同学平时使用过AndroidStudio应该对adb命令不陌生才对. 整个调试过程其实就是基于adb, 然后监听固定端口而已.
adb相当于一个调试服务器, 它接收和分析app的处理过程, 详细可以参考谷歌官方文档.
Unity的Profiler只是在adb接收和分析完毕后在固定端口分发的消息而已.
个人觉得理解这个原理比较重要, 如果只是按照网上的文章或者Unity官方文档来照着做, 在具体实践的时候有些莫名其妙的问题无法自己独立解决, 特别是端口占用之类的问题.
详细的过程可以参考上面那篇文章, 我这里只是简单做一个记录.
随便创建一个工程后进入BuildingSetting, 然后切换到Android平台, 之后按照图示勾选即可.
有几点说明一下:
导出之后通过AndroidStudio直接在模拟器上(比如雷电模拟器)运行就行了, 不需要在真机上跑, 当然你想在真机上跑也没毛病不是.
只要导出完成后打开Profiler, 就会出现AndroidPlayer([email protected]:34999)
, 运行游戏(模拟器上), 这里选择后既可以看到运行状态了. 如下所示:
最后就可以按照平时在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之类的)端口貌似是固定的, 我试过换成其它端口, 一直没成功, 希望懂行的同学能够指点下我.
好了, 今天就是这些, 希望对大家有所帮助.