UM1L8——Android Logcat

Android Logcat

Android Logcat 是 Unity 提供的一个拓展包,引入该拓展包后,我们可以在Unity当中对Android应用程序进行调试
我们可以通过该工具获取到:

  1. 安卓日志打印信息
  2. 安卓应用程序内存统计
  3. 安卓屏幕截图
  4. 安卓屏幕录像
  5. 堆栈跟踪

Unity2019.4及以上版本都可以引入Android Logcat来帮助我们进行调试

Android Logcat工具可以帮助我们进行Android相关调试,我们可以通过查看相关打印信息,来排查问题

如何使用Android Logcat工具

  1. 在Unity工程中引入Android Logcat包

    image

  2. 连接Android设备

  3. 将Android Logcat连接到Android设备上点的应用程序,便可以查看相关信息

    在 Window ——> Analysis ——> Android Logcat 开启窗口

    image

窗口基础知识

image

工具栏

image

  • Auto Run:自动运行 启用后,当你构建和运行应用程序时Android Logcat窗口会连接到应用程序,显示对应的相关信息

  • No device(或设备消息):设备选择器,当没有Android设备连接电脑是,显示No Device,有设备时可以在这选择连接的Android设备

  • No Filter:过滤选择器,可以指定Android设备上显示消息的应用程序,此处显示的是应用程序的包名

  • 过滤输入框:用于过滤搜索消息日志,可以输入内容搜索信息

    • 消息正文过滤:在输入框输入内容,则会自动筛选消息中存在输入字符的内容

      image

    • 优先级过滤:在下方点击 Priority 优先级,选择过滤的内容

      • Verbose:冗长的,所有
      • Debug:调试信息
      • Info:信息
      • Warn:警告
      • Error:错误
      • Fatal:致命的

      image

    • 按标签过滤:在下方点击Tag标签,选择过滤的内容

      image

  • Filter Options:过滤器选项,决定如何使用选项过滤器输入过滤消息日志中的消息

    • Use Regular Expressions:使用正则表达式
    • Match Case:区分大小写

    image

  • Reconnect:重新连接

    重新连接到应用程序和设备,如果程序不再运行则重新连接到设备

  • Disconnect:断开和设备的连接

  • Clear:清除消息列表中的消息日志

  • Tools:工具相关

    • Screen Capture:屏幕捕获

      从连接的Android设备上捕捉屏幕截图和视频

    • Open Terminal:开放终端 在Windows上打开命令调试符窗口,在macOS和Linux上打开终端

    • Stacktrace Utility:堆栈跟踪应用程序 解析自定义堆栈跟踪

    • Memory Window:内存窗口 跟踪为应用程序分配的内存

    image

消息日志

image

  • Time:消息产生的时间

  • Pid:生成消息的进程ID

  • Tid:生成消息的线程ID

  • Priority:消息的优先级

  • Tag:消息相关联的标签

  • Message:消息文本

  • 消息日志处点击右键 可以自己设置显示内容

    image

屏幕捕获工具 Device Screen Capture

屏幕捕获工具主要可以帮助我们进行游戏内截图,录屏,该工具可以帮助我们:

  1. 测试人员用来录制bug表现,反馈给程序人员进行解决
  2. 获取截屏、录屏信息,获取宣传资料

优缺点如下:

  • 优点:直接PC端远程获取,方便快捷,便于记录bug表现效果
  • 缺点:录制的视频不会捕获声音,录屏功能可以部分设备不支持

屏幕捕获工具主要是提供给测试人员使用
他们在真机上测试项目时,可以通过该工具进行截图或录屏
将遇到的bug反馈给程序员方便排查解决bug

注:录屏可能是不可使用的,如果点击录屏后报错 screenrecord: inaccessible or not found​,则证明此手机不允许你通过adb命令来执行录屏操作

image

工具栏

image

  • No Device:设备列表,选择和电脑相连的安卓设备进行操作

  • 捕获模式

    • Screenshot:截屏
    • Video:录屏

    image

  • Capture:捕获,如果是录屏,点击后会变成stop停止按钮

  • Open:打开屏幕截图或者录屏文件

  • Save As:另存到计算机上的文件

摄像机设置

主要是视频录制相关设置,各个控件的左侧的文字是可以点击的,点击即可解锁相关内容的调整
一般只需要设置前三个参数即可

image

  • Time Limit:时间限制 录屏的时间限制(单位:秒)
  • 视频尺寸:宽高,默认为设备主显示器分辨率
  • Bit Rate:比特率 视频录制的比特率。
    (比特率:位时间内传送的比特(bit)数,俗称码率)

预览区域

image

堆栈跟踪实用工具 Stacktrace Utility

image

使用堆栈跟踪实用工具的作用是可以翻译自己获取到的安卓日志信息,使用流程是:

  1. 设置项目的 so 文件路径
  2. 将日志信息复制到 Original(初始)页签中
  3. 点击 Resolve Stacktraces(解析堆栈跟踪)
  4. 在 Resolved(已解析的日志) 页签中查看翻译结果

注意:我们在电脑连接安卓设备通过Android Logcat进行调试时一般不使用该功能,只有当非连接调试时,获取了安卓崩溃日志后才会使用该功能

目前我们使用Android Logcat连接真机进行测试时,打印、警告、报错等等信息都会直接在主窗口中打印出来让我们进行分析
相当于它帮助我们进行了自动的堆栈跟踪解析

什么是自动堆栈跟踪解析呢?就是我们可以在打印窗口看到具体是哪个脚本的哪行代码,出现了打印、警告、报错等等信息

image

例如上图就输出了点击按钮时打印信息时,可以看到调用堆栈消息,我们因此可以定位到这是哪里执行的输出消息语句

而 Tools(工具) 中的 Stacktrace Utility(堆栈跟踪实用工具) 的作用是,允许我们复制粘贴自定义日志并解析堆栈跟踪

主要用于没有真机连接设备调试时,或者之后正式发布版本后,我们可以获取应用程序日志信息,将这些日志信息复制到该工具中用于翻译
(一般项目会在崩溃后,在本地存储一份崩溃日志,我们可以获取该日志)

因为这种情况下的日志信息中,不会明确指明是哪个脚本哪行代码,往往是一堆看不懂的符号,我们可以使用该工具进行翻译

比如:下面这个打印信息就是安卓的原始日志

1
2
E CRASH   :      #01  pc 01c65330  /data/app/com.CrashComp.Crash-J2Z_L0XSsSAZPkt9lab2rQ==/lib/arm/libunity.so
(DiagnosticsUtils_Bindings::ForceCrash(DiagnosticsUtils_Bindings::ForcedCrashCategory, ScriptingExceptionPtr*)+48)

这里面都是一堆特殊符号,并没有明确告诉你哪个脚本哪行代码
通过翻译后堆栈跟踪实用工具翻译后,我们就能够获取到哪个脚本哪行代码打印了输出了该信息

总而言之它该工具就是用来翻译发布后安卓应用程序的日志信息的

堆栈跟踪显示相关

image

  • Original:初始日志

    想要被翻译的日志内容 可以将内容粘贴到下方的输入区域

  • Resolved:已解析的日志

    翻译后的内容将会显示在该页签下方的区域

堆栈跟踪实用程序设置相关

image

  • Resolve Stacktraces:解析堆栈跟踪

    点击后,将会翻译初始日志,会自动跳转到Resolved已解析的日志页签

  • Configure Regex:配置正则表达式

    堆栈解析实用工具使用正则表达式来解析内容
    默认是包含解析内容的地址、库名的正则表达式的,不需要我们设置
    除非有特殊需求才会添加自定义正则表达式

  • Configure Symbol Paths:配置符号路径

    我们需要指定安卓包文件的路径,3个重要包文件为:

    so文件相当于就是windows下的dll库文件,里面包含所有代码信息
    想要进行翻译就必须设置so文件的路径
    我们可以使用默认的,也可以自己导出选择导出的so文件

    可以配合设置了 Create symbols.zip 的打包的symbols.zip 使用,
    其中的.so文件就是该工具可以使用的三个库

    image

    注意:必须设置了so路径后,才能正常进行翻译

内存窗口工具 Memory Window

首先了解 RAM(运行时内存)对于我们的意义:

如果应用程序出现闪退情况,往往都是因为应用程序运行时内存的使用超出了设备允许的最大内存量,而被手机系统强行关闭

注意:
不同品牌、型号的手机配置都是不同的,手机后台运行的程序数量也是不同的
所以要根据实际情况进行测试获取目标设备的内存极限值,可以选取市面上的主流机型来进行测试

今天我们要学习的内存窗口工具,是用于跟踪应用程序RAM(运行时内存)的分配情况的

我们可以使用它来分析应用程序可能存在的内存问题,我们可以使用它 定期自动的 或者 手动的 捕获内存快照
这里的内存快照就是捕获的这一瞬间应用程序的运行时内存使用情况

根据内存快照我们可以分析内存问题,比如:

  1. 切换场景前和切换场景后的内存快照比较,判断是否存在内存泄露
  2. 比如闪退前的内存快照,来分析设备占用多少内存时造成了闪退,确定内存瓶颈

等等

内存窗口工具可以帮助我们调试分析应用程序的内存问题,它是非常重要的调试工具

内存捕获窗口的开启

image

  • Auto Capture:自动捕获,Unity会定期捕获应用程序的内存快照

    image

    注意:自动捕获,可能会影响性能表现,可能会造成卡顿,
    如果严重影响测试,建议使用手动捕获

  • Manual Capture:手动捕获,通过点击按钮,自己手动捕获内存快照

    image

  • Disabled:不启用

内存详细信息面板

显示每种内存类型分配的内存量

image

左侧面板

image

  • Group:内存组

    • Resident Set Size:常驻集大小

      应用程序在运行时内存中分配的内存总量,
      只会显示 NativeHeap 本地堆 和 JavaHeap Java分配器堆

    • Proportional Set Size:比例集大小

      应用程序主动使用的运行时内存总量,可以看到很详细的内存分布

    • Heap Alloc:堆分配

      应用程序使用Java分配器和本机堆分配的内存总量
      当检查内存泄露时,通过它可以进行很好的分析

    • Heap Size:堆大小

      应用程序保留的总内存,总是大于堆分配

  • NativeHeap 本地堆

  • JavaHeap Java分配器堆

  • Code 代码

  • Stack 栈

  • Graphics 图形相关

  • PrivateOther 其它私有的

  • System 系统

  • Total 总共的

  • Capture:选择手动捕获时,需要点击该按钮才能获取当前的内存快照

右侧面板

内存图表,包含一段时间内连接的应用程序分配的内存图表,点击可以查看某一时刻的内存占用

image

ADB

ADB是 Android Debug Brige(安卓调试桥)的简称,它是我们调试Android设备的一套指令集
它可以让我们通过指令来进行一些操作,来获取日志信息,比如:

  1. 关机、重启
  2. 安装、启动、卸载应用程序
  3. 删除、移动、复制文件
  4. 查看日志信息

我们最常使用的就是查看日志信息的功能,之前学习的Android Logcat工具其实就是利用了ADB来获取的信息

由于Android Logcat工具只能在Unity 2019.4及其以上版本才能使用,所以对于老版本的Unity来说,我们一般使用ADB来帮助我们进行调试

注意:使用ADB工具的前提是 电脑和安卓设备处于USB调试连接

如何使用ADB

在Android SDK的路径中,寻找platform-tools文件夹,在其中可以找到adb.exe文件
我们需要配合命令调试符窗口(Windows)使用adb指令集

  • 方法一:
    直接在 Android Logcat 窗口中使用 Tools中的Open Terminal(打开终端)
    Window系统会自动打开命令调试符窗口,MacOS系统会自动打开终端窗口
    且终端会直接来到SDK文件夹中的platform-tools(平台工具)文件夹
    然后在后面直接输入指令即可,输入内容是:adb 指令

    image

    image

  • 方法二:(适用于低版本)
    自己打开命令调试符窗口或Powershell,输入adb.exe所在文件夹路径
    比如:D:\Android\android-sdk\platform-tools\adb 指令

    image

关键的ADB指令

  • 常用指令

    1. 显示日志信息:adb logcat
    2. 获取Unity相关日志信息:adb logcat -s Unity
  • 做了解的指令

    1. 查看abb相关信息,比如版本号、常用命令等:adb help
    2. 查看adb版本:adb version
    3. 安装apk:adb install apk路径
    4. 覆盖安装:adb install -r apk路径
    5. 卸载应用程序:adb uninstall 应用程序包名
    6. 保留数据卸载应用程序:adb uninstall -k 应用程序包名
    7. 查看连接的主机设备:adb devices
    8. 从电脑上复制文件到手机:adb push 电脑上文件路径 需要复制到的手机路径
    9. 从手机上复制文件到电脑:adb pull 手机上文件路径 需要复制到的电脑路径
    10. 查看手机上安装的所有应用程序包名:adb shell pm list packages
    11. 截图:adb shell screencap 保存到的手机路径
    12. 录屏:adb shell screenrecord 保存到的手机路径

等等

更多信息: