当前位置: 首页 > article >正文

APP怎么抓取原生日志 - Android篇

文章目录

    • 前言
    • 为什么要抓原生页面的日志
      • 举一个抓取原生日志的例子
    • Android Debug Bridge (ADB)
      • 安装ADB
      • 连接设备
      • 验证连接
      • 抓取日志
    • 注意点
    • 总结

前言

好困 ~😴 写点我觉得重要的吧,IOS和HarmonyOS NEXT这周写

为什么要抓原生页面的日志

  • 原生日志能够捕捉到与操作系统和应用框架交互的关键信息,包括性能瓶颈、崩溃报告和安全事件等,而这些是纯 H5 日志无法提供的,确保了对应用行为的全面监控和精准调试
  • Charles等抓包工具抓不到原生的请求
  • VConsole主要用于捕获和显示 H5 页面中的 JavaScript 日志信息和其他控制台输出
  • 面试时会问adb命令

举一个抓取原生日志的例子

混合应用中的支付功能异常

  1. 问题描述:在一个电商的混合应用中,用户在尝试完成支付时遇到了问题。具体表现为:当用户点击“确认支付”按钮后,页面没有响应,既没有跳转到支付成功页面,也没有任何提示信息。这种情况只发生在部分用户的设备上,且复现率较低,使得问题难以捉摸。

  2. 抓取日志前的初步排查:

  • 重现问题:测试团队尝试在多种设备和操作系统版本上重现该问题,但未能稳定复现
  • 用户反馈:从用户反馈中得知,问题似乎与特定银行的支付网关有关
  • 代码审查:开发人员检查了最近的代码更改,未发现明显的逻辑错误或潜在问题
  1. 使用日志进行深入分析:集成日志收集工具 ADB 实时捕获日志,重点监控支付流程
  2. 分析日志发现线索
[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 错误,这意味着服务器端发生了内部错误。这解释了为什么页面没有响应,因为客户端接收到的是一个非预期的状态码,导致支付流程中断。

  1. 定位并解决问题
  • 联系支付网关提供商:向 Bank XYZ 的技术支持团队报告问题,并提供详细的日志片段以协助他们查找服务器端的问题
  • 改进错误处理机制:在客户端代码中增加对 HTTP 500 状态码的处理逻辑,给用户提供友好的提示信息(例如“支付处理失败,请稍后再试”),而不是简单地让页面无响应

Android Debug Bridge (ADB)

安装ADB

参考这篇文章👉windows下载安装adb(极其简单)
不需要安装 Android SDK Platform Tools。

连接设备

  1. 使用 USB 数据线将安卓设备连接到电脑
  2. 在设备上启用开发者选项
  3. 启用 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
  1. adb logcat:
  • 这是 Android Debug Bridge (ADB) 的一部分,用于从安卓设备或模拟器捕获日志信息。logcat 是 ADB 提供的一个工具,专门用来查看和过滤系统日志
  1. package:com.taobao.taobao:*
  • package:指定按包名过滤日志
  • com.taobao.taobao:这是应用的包名,表示你只想捕获与该应用相关的日志
  • *:设置该包名下所有日志标签的日志级别为最高(即全部捕获)。这意味着无论日志的严重性如何(调试、信息、警告、错误等),都将被捕获。
  1. *:S
  • *:表示所有其他来源的日志标签
  • S:将这些来源的日志级别设置为静默(Silent)。这意味着除了 com.taobao.taobao 应用的日志外,其他所有日志都不会显示。
  1. > taobao_log.txt:所有符合条件的日志将被写入此文件

确定包名用以下的语句,列出设备上所有用户安装的应用的包名:

adb shell pm list packages -3

停止日志记录:按下 Ctrl+C 来停止日志捕获

注意点

权限问题:确保你有足够的权限来读取设备上的日志。对于某些定制 ROM 或者企业级设备,可能需要额外的配置。(我目前还没遇到过,等我后面遇到了再分享)

总结

文章介绍了抓取原生页面日志的重要性,举了混合应用中支付异常的案例,展示了如何利用日志定位并解决问题。文中还简要说明了 ADB 的安装、设备连接和日志捕获的具体命令及操作步骤。


http://www.kler.cn/a/463683.html

相关文章:

  • 现代光学基础4
  • 二维码文件在线管理系统-收费版
  • 【C语言程序设计——循环程序设计】枚举法换硬币(头歌实践教学平台习题)【合集】
  • 生成对抗网络 (Generative Adversarial Network, GAN) 算法MNIST图像生成任务及CelebA图像超分辨率任务
  • 【Rust练习】26.Package and Crate
  • GXUOJ-算法-补题:22级《算法设计与分析》第一次课堂练习
  • springboot3.X 无法解析parameter参数问题
  • vue.js scoped样式冲突
  • 【mediapipe】实现卷腹运动识别(视频或摄像头)并计数
  • html 音频和视频组件
  • Kubernetes Gateway API-3-TLS配置
  • CES Asia 2025:助力新型城市基础设施建设,展现智慧城市科技魅力
  • Modbus知识详解
  • 单片机--51- RAM
  • @colyseus/loadtest 插件详解
  • 代码随想录算法训练营第十七天-二叉树-654.最大二叉树
  • STM32-笔记19-串口打印功能
  • arm rk3588 升级glibc2.31到2.33
  • AIGC与未来的通用人工智能(AGI):从生成内容到智能革命
  • 华为云Welink数据怎么连接到小满CRM?
  • gesp(C++一级)(12)洛谷:B3953:[GESP202403 一级] 找因数
  • 电脑与手机
  • GPT分区 使用parted标准分区划分,以及相邻分区扩容
  • 苍穹外卖04——Redis初入门 在店铺打烊or营业状态管理功能中的使用
  • 条款35:考虑虚函数以外的其它选择(Consider alternatives to virtual functions)
  • 元宇宙金融新纪元:CZ协议全球启航