APP怎么抓取原生日志 - Android篇
文章目录
- 前言
- 为什么要抓原生页面的日志
- 举一个抓取原生日志的例子
- Android Debug Bridge (ADB)
- 安装ADB
- 连接设备
- 验证连接
- 抓取日志
- 注意点
- 总结
前言
好困 ~😴 写点我觉得重要的吧,IOS和HarmonyOS NEXT这周写
为什么要抓原生页面的日志
- 原生日志能够捕捉到与操作系统和应用框架交互的关键信息,包括性能瓶颈、崩溃报告和安全事件等,而这些是纯 H5 日志无法提供的,确保了对应用行为的全面监控和精准调试
- Charles等抓包工具抓不到原生的请求
- VConsole主要用于捕获和显示 H5 页面中的 JavaScript 日志信息和其他控制台输出
- 面试时会问adb命令
举一个抓取原生日志的例子
混合应用中的支付功能异常
-
问题描述:在一个电商的混合应用中,用户在尝试完成支付时遇到了问题。具体表现为:当用户点击“确认支付”按钮后,页面没有响应,既没有跳转到支付成功页面,也没有任何提示信息。这种情况只发生在部分用户的设备上,且复现率较低,使得问题难以捉摸。
-
抓取日志前的初步排查:
- 重现问题:测试团队尝试在多种设备和操作系统版本上重现该问题,但未能稳定复现
- 用户反馈:从用户反馈中得知,问题似乎与特定银行的支付网关有关
- 代码审查:开发人员检查了最近的代码更改,未发现明显的逻辑错误或潜在问题
- 使用日志进行深入分析:集成日志收集工具 ADB 实时捕获日志,重点监控支付流程
- 分析日志发现线索
[DEBUG] PaymentActivity: Initiating payment request to Bank XYZ...
[INFO] NetworkManager: Sending POST request to https://api.bankxyz.com/v1/payments
[WARN] NetworkManager: Received HTTP 500 Internal Server Error from server
[ERROR] PaymentHandler: Failed to process payment response due to unexpected status code 500
这段日志揭示了一个重要的细节——支付请求返回了 HTTP 500 错误,这意味着服务器端发生了内部错误。这解释了为什么页面没有响应,因为客户端接收到的是一个非预期的状态码,导致支付流程中断。
- 定位并解决问题
- 联系支付网关提供商:向 Bank XYZ 的技术支持团队报告问题,并提供详细的日志片段以协助他们查找服务器端的问题
- 改进错误处理机制:在客户端代码中增加对 HTTP 500 状态码的处理逻辑,给用户提供友好的提示信息(例如“支付处理失败,请稍后再试”),而不是简单地让页面无响应
Android Debug Bridge (ADB)
安装ADB
参考这篇文章👉windows下载安装adb(极其简单)
不需要安装 Android SDK Platform Tools。
连接设备
- 使用 USB 数据线将安卓设备连接到电脑
- 在设备上启用开发者选项
- 启用 USB 调试模式(在开发者选项中找到)
验证连接
打开命令行工具(Windows 上的 CMD 或 PowerShell,macOS/Linux 上的终端),输入以下命令以确认设备已正确连接:
adb devices
如果一切正常,你会看到列出的设备序列号
抓取日志
使用 adb logcat 命令来捕获日志输出。可以将日志保存到文件中以便后续分析:
adb logcat > logcat.txt
PS
:要查看这里的 logcat.txt文件的位置:
Windows:cd
PowerShell:gl
macOS 和 Linux:pwd
如果你想过滤特定应用的日志(例如包名为 com.taobao.taobao 的应用),可以这样做:
adb logcat package:com.taobao.taobao:* *:S > taobao_log.txt
- adb logcat:
- 这是 Android Debug Bridge (ADB) 的一部分,用于从安卓设备或模拟器捕获日志信息。logcat 是 ADB 提供的一个工具,专门用来查看和过滤系统日志
- package:com.taobao.taobao:*
package
:指定按包名过滤日志com.taobao.taobao
:这是应用的包名,表示你只想捕获与该应用相关的日志*
:设置该包名下所有日志标签的日志级别为最高(即全部捕获)。这意味着无论日志的严重性如何(调试、信息、警告、错误等),都将被捕获。
*:S
*
:表示所有其他来源的日志标签S
:将这些来源的日志级别设置为静默(Silent)。这意味着除了 com.taobao.taobao 应用的日志外,其他所有日志都不会显示。
> taobao_log.txt
:所有符合条件的日志将被写入此文件
确定包名用以下的语句,列出设备上所有用户安装的应用的包名:
adb shell pm list packages -3
停止日志记录:按下 Ctrl+C 来停止日志捕获
注意点
权限问题:确保你有足够的权限来读取设备上的日志。对于某些定制 ROM 或者企业级设备,可能需要额外的配置。(我目前还没遇到过,等我后面遇到了再分享)
总结
文章介绍了抓取原生页面日志的重要性,举了混合应用中支付异常的案例,展示了如何利用日志定位并解决问题。文中还简要说明了 ADB 的安装、设备连接和日志捕获的具体命令及操作步骤。