unity-Profiler调试 Android 、ios 的正确姿势

使用 unity 自带的 Profiler 调试 打出来的 Android 、ios 包

Android 使用 夜神模拟器 作为安卓设备,当然你也可以用真机

ios 使用真机

官网文档 - https://docs.unity3d.com/2018.4/Documentation/Manual/profiler-profiling-applications.html


Android 平台

1. 前置条件

  1. 安卓的相关环境
  • java、ant、sdk、ndk 什么的都装好(其实这里只需要 sdk 里面的 adb),配好 adb 工具的环境变量(意思就是 cmd 里直接输 adb 命令即可)
  1. 打包 Android 包是,勾选 如下几个选项

    • Developmemnt Build

    • Autoconnect Profiler

      ![这里写图片描述](https://pic01.wilker.cn/20180421_150405_248.png)
      
    • 代码中则是

      1
      2
      BuildOptions opts = BuildOptions.Development | BuildOptions.ConnectWithProfiler;
      BuildPipeline.BuildPlayer(GetBuildScenes(), path, mPackArg.target, opts);

2. 步骤

  1. unity编辑器设置为 Android 平台,如上图所示(这里被坑了有点久,一直在 PC平台 上写代码,忘了设置这个导致一直连不上 Profiler)
  • File -> Build settings -> Switch Platform(Android)
  1. 运行游戏

  2. adb 调试设备

    • (这里使用 夜神模拟器,所以需要使用 命令连接端口,真机的话需要安装对应的驱动,并打开 Android设备的 调试模式 - 传输照片模式-PTP )
      1. adb连接模拟器: adb connect 127.0.0.1:62001
      2. 连接unity和游戏:adb forward tcp:34999 localabstract:Unity-com.xxxx.yyy,com.xxxx.yyy 为游戏的包名,也就是 Bundle Identifier ( unity2018.3.11f1 端口换成了 34999 )
    • 下面是py偷懒脚本,双击一下就好了,相关命令也在里面
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      #!/usr/bin/env python
      import os
      import sys

      Cmd_kill = "adb kill-server"
      Cmd_start = "adb start-server"
      Cmd_connect = "adb connect 127.0.0.1:62001"
      Cmd_devices = "adb devices"
      Cmd_profiler = "adb forward tcp:34999 localabstract:Unity-com.xxxx.yyy"

      def conn2Nox():
      os.system(Cmd_kill)
      os.system(Cmd_start)
      os.system(Cmd_connect)
      os.system(Cmd_devices)
      os.system(Cmd_profiler)
      os.system("pause")
      pass

      def main():
      conn2Nox()
      pass

      if __name__ == "__main__":
      main()
  3. unity编辑器打开Profiler, Windows -> Profiler(ctrl + 7)


3. 顺便看看数据

  • 看这个 SerializedFile,其实就是 AssetBundle 的序列化文件在内存的占用,当前有 107 个AB, 107 * 512 也超不多就是 50m+ 了
    这里写图片描述

    这里写图片描述

常见问题

Q: 连不上夜神模拟器?

现在(20180523)链接使用输入ip 127.0.0.1 才能链接

Q: adb 连不上 夜神模拟器, 报错: could not read ok from ADB Server

杀掉adb进程, 命令: taskkill /f /im adb.exe

参考: adb socket not working and daemon - https://stackoverflow.com/questions/38845579/adb-socket-not-working-and-daemon


IOS 平台

相比 Android 简单很多

1. 前置条件

  1. mac 操作系统环境(打包及profile都在该环境下)

  2. 勾选以下选项 及 debug 模式

    • Symlink Unity libraries 可以不勾选

    这里写图片描述

2. 打包

  • 直接打出包就可以链接profile调试

    这里写图片描述