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

Android常用的adb和logcat命令

ADB

        ADB,即 Android Debug Bridge 是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问。

adb简单命令

//查看版本
adb version
//查看已经连接的设备和开始连接设备命令
adb devices
adb connect

adb应用命令 

//查看所有应用
adb shell pm list packages
//查看系统应用
adb shell pm list packages -s
// 查看第三方应用
adb shell pm list packages -3
// 查看前台 Activity 
adb shell dumpsys activity activities | grep mFocusedActivity//查看正在运行的 Services
adb shell dumpsys activity services [<package-name>]
//  查看应用详细信息
adb shell dumpsys package <package-name>
// 查看应用安装路径
adb shell pm path <package-name>

1.WLAN 连接
借助 USB 通过 WiFi 连接来正常使用 adb 需要以下步骤:
操作步骤:

  1.         将 Android 设备与要运行 adb 的电脑连接到同一个 WiFi。
  2.         将设备与电脑通过 USB 线连接(可通过 adb devices 命令查看设备连接情况)。
  3.         通过 adb tcpip 5555 命令让设备在 5555 端口监听 TCP/IP 连接。
  4.         断开 USB 连接。
  5.         找到设备的 IP 地址(可以在「设置」-「关于手机」-「状态信息」-「IP地址」查看 IP 地址)。
  6.         通过 adb connect <device-ip-address> 命令使用 IP 地址将 Android 设备与电脑连接。
  7.         通过 adb devices 命令查看设备连接情况。
  8.         使用完毕后可通过 adb disconnect <device-ip-address> 命令断开无线连接。

2.adb抓取ANR日志

1. 复现 ANR 并获取错误报告

        当应用出现 ANR 时,系统会生成错误报告并存储在设备中。可通过以下方式获取:

        方法一:从设备直接导出

        使用 ADB 拉取 ANR 日志

adb pull /data/anr/traces.txt ~/Desktop/anr_traces.txt

            ANR 日志通常存储在 /data/anr/traces.txt,包含应用卡死时的线程堆栈信息。

            查看日志时间戳

            日志中会按时间顺序记录多个 ANR 事件,找到最新的时间戳(通常在文件末尾),确认与复现的问题匹配。

    2.ADB 调试分析设备尺寸和分辨率

    • 查看当前分辨率5:

            使用命令adb shell wm size,执行后会输出设备当前的屏幕分辨率,如Physical size: 1080x1920,若设备支持双分辨率,可能会显示Override size:2610x1920等信息。

    • 设置分辨率5:

            若要修改分辨率,可使用命令adb shell wm size <宽度>x<高度>,例如将分辨率设置为 720x1280,可输入adb shell wm size 720x1280

            设置完成后,通常需要重启设备以使设置生效,可使用命令adb reboot。若要恢复原始分辨率,执行adb shell wm size reset即可。

    • 获取屏幕像素密度4:

            使用命令adb shell wm density,可查看屏幕的像素密度,单位为 dpi(dots per inch)。也可通过adb shell wm density <数值>来设置像素密度,如adb shell wm density 160,并使用adb shell wm density reset恢复默认像素密度。

    • 获取有效显示区域6:

            获取到设备的物理分辨率后,还可进一步计算有效显示区域。

            首先使用adb shell dumpsys window | grep -i 'statusbar'获取状态栏高度,使用adb shell dumpsys window | grep -i 'navigation'获取导航栏高度。

            假设状态栏高度为statusBarHeight,导航栏高度为navigationBarHeight,屏幕宽度为screenWidth,屏幕高度为screenHeight,则有效显示区域宽度为screenWidth,有效高度为screenHeight - statusBarHeight - navigationBarHeight

    3. 分析 ANR 日志内容

            ANR 日志包含关键信息,重点关注以下部分:

            (1)基本信息

            Reason:ANR 原因,常见类型:

            Input dispatching timed out:输入事件(如点击、触摸)处理超时

            Service timeout:Service 在主线程执行耗时操作(超过 20 秒)。

            ContentProvider timeout:ContentProvider 初始化超时(超过 10 秒)。

    (2)主线程堆栈

            日志中会显示 main 线程的调用栈,查看正在执行的方法:

    "main" prio=5 tid=1 Blocked| group="main" sCount=1 dsCount=0 flags=1 obj=0x73b2c3c0 self=0x7f8a1c0000| sysTid=12345 nice=0 cgrp=default sched=0/0 handle=0x7f8a3009e0| state=S schedstat=( 0 0 0 ) utm=12 stm=3 core=0 HZ=100| stack=0x7fe5d1c000-0x7fe5d1e000 stackSize=8MB| held mutexes=at android.os.MessageQueue.nativePollOnce(Native method)- waiting to lock <0x12345678> (a android.os.MessageQueue) held by thread 2at android.os.MessageQueue.next(MessageQueue.java:326)at android.os.Looper.loop(Looper.java:181)at android.app.ActivityThread.main(ActivityThread.java:7050)...

    重点排查

            是否在主线程执行网络请求、文件读写等耗时操作。

            是否存在死锁(多个线程互相等待锁释放)。

    (3)CPU 使用率

            日志会显示系统和应用的 CPU 使用情况,判断是否因资源耗尽导致 ANR:

    CPU usage from 0ms to 5000ms later:100% 12345/com.example.app: 90% user + 10% kernel20% 12346/RenderThread: 15% user + 5% kernel

    Logcat

            Android Studio 中的 Logcat 窗口是调试应用的重要工具,其核心功能在于实时显示来自设备或模拟器的日志信息,包括应用通过Log类添加的自定义消息、系统服务运行记录(如垃圾回收),以及应用抛出异常时带代码行链接的堆栈跟踪,能高效帮助开发者定位问题。

            默认情况下日志会自动滚动到末尾,点击或滚动鼠标可暂停该功能,如需恢复,可点击工具栏的 “Scroll to the End” 图标;同时,工具栏还提供清除、暂停、重启日志等基础操作选项。

            每条日志条目包含丰富信息,涵盖日期、时间戳、进程及线程 ID、标签、包名称、优先级(如FATAL ERROR WARNING等)和具体消息,不同标签有独特颜色,便于区分日志类型。

    1.优先级,日志优先级从低到高分以下几种

    v -verbose 最低级别,开发调试中的一些详细信息,仅在开发中使用,不可出现在发布的产品中

    D- debug 用于调试的信息,可以在与发布中关闭,比较常见

    I -info 一般提示性的消息

    W- warming 警告日志

    E- error 错误:已经出现可影响运行的错误,比如crash时候输出的日志

            首先是基础的键值筛选逻辑,Logcat 支持多种关键键名,每种键对应特定的筛选维度。

            比如tag键用于匹配日志条目的标签字段,package键针对日志所属应用的包名,level键可筛选出优先级大于或等于指定级别的日志(如level:INFO会包含INFO WARNING ERROR等更高优先级的日志,且级别不区分大小写),age键则根据时间戳筛选,格式为age:<数字><单位>s秒、m分钟、h小时、d天),像age:30s就是筛选过去 30 秒的日志,不过需注意时间对比以主机时间为准,设备时间错误可能影响结果。此外,还有is:crash(匹配应用崩溃日志)、is:stacktrace(匹配 Java 堆栈跟踪)等特殊键,进一步拓展筛选场景。

    2.查询中使用的常用键:

    tag:与日志条目的 tag 字段匹配。

    package:与日志记录应用的软件包名称匹配。

    process:与日志记录应用的进程名称匹配。

    message:与日志条目的消息部分匹配。

    level:与指定或更高严重级别的日志匹配,例如 DEBUG

    age:如果条目时间戳是最近的,则匹配。值要指定为数字,后跟表示时间单位的字母:s 表示秒,m 表示分钟,h 表示小时,d 表示天。例如,age: 5m 只会过滤过去 5 分钟内记录的消息。

            其次是高级筛选语法,让筛选更精准灵活。否定筛选通过在键名前加-实现,例如-tag:MyTag可排除所有标签为MyTag的日志;正则表达式匹配则在键名后加~,如tag~:My.*Tag能匹配标签以My开头、Tag结尾的日志,且否定与正则可组合,如-tag~:My.*Tag表示排除符合该正则的标签日志。

            逻辑运算符方面,&代表 “与”、|代表 “或”,且支持括号改变优先级,比如(tag:foo | level:ERROR) & package:mine表示筛选标签为foo或级别为ERROR,且包名为mine的日志;若未显式使用运算符,多个非否定条件默认按 “或” 处理(如tag:foo tag:bar等价于tag:foo | tag:bar),含否定条件则默认按 “与” 处理(如tag:foo -tag:bar等价于tag:foo & -tag:bar)。

            最后是查询的管理与优化,查询历史可通过点击查询字段旁的 “Show history” 查看,方便复用之前的筛选条件;点击历史记录旁的星号可将查询收藏,使其在所有项目中保留;使用name:键为查询命名(如name:MyFilter tag:foo),能在历史记录中快速识别,提升筛选效率。这些功能结合起来,让开发者能根据具体调试需求,快速定位所需日志信息。

    整体总结:

            ADB(Android Debug Bridge)是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,可提供安装和调试应用、访问 Unix shell 等设备操作便利,其简单命令包括查看版本(adb version)、查看和连接设备(adb devices、adb connect)等,应用命令有查看所有 / 系统 / 第三方应用(adb shell pm list packages 及带 - s、-3 参数)、查看前台 Activity、正在运行的 Services、应用详细信息和安装路径等;

            借助 USB 通过 WiFi 连接 ADB 需将设备与电脑连同一 WiFi、用 USB 线连接后通过 adb tcpip 5555 让设备在 5555 端口监听 TCP/IP 连接,断开 USB 后找到设备 IP,用 adb connect <device-ip-address>连接,结束后用 adb disconnect 断开;抓取 ANR 日志可通过 adb pull /data/anr/traces.txt ~/Desktop/anr_traces.txt 拉取,日志包含基本信息(如 ANR 原因)、主线程堆栈和 CPU 使用率等关键内容;

            Logcat 是 Android Studio 中调试应用的重要工具,可实时显示设备或模拟器日志,包含日期、时间戳等丰富信息,日志优先级从低到高为 v(verbose)、D(debug)、I(info)、W(warming)、E(error),支持通过 tag、package 等键进行筛选,还有否定筛选、正则表达式匹配、逻辑运算符等高级筛选语法,以及查询历史管理、收藏等功能,助力开发者快速定位所需日志信息。

    http://www.dtcms.com/a/291884.html

    相关文章:

  1. 【bug】ubuntu20.04 orin nx Temporary failure resolving ‘ports.ubuntu.com‘
  2. 【测试开发】---Bug篇
  3. kafka主题管理详解 - kafka-topics.sh
  4. Claude Code Kimi K2 环境配置指南 (Windows/macOS/Ubuntu)
  5. 热点leetCode题
  6. AI助力临床医学科研创新与效率双提升丨临床医学日常工作、论文高效撰写与项目申报、数据分析与可视化、机器学习建模等
  7. Vercel AI SDK 3.0 学习入门指南
  8. Java设计模式揭秘:深入理解模板方法模式
  9. 一个简单实用的 WinForm 通用开发框架
  10. 替代Oracle?金仓数据库用「敢替力」重新定义国产数据库
  11. Pygame开源--谷歌小恐龙游戏(附彩蛋)
  12. Custom SRP - Draw Calls
  13. 从零构建智能对话助手:LangGraph + ReAct 实现具备记忆功能的 AI 智能体
  14. Spring Boot 整合 Redis 实现发布/订阅(含ACK机制 - 事件驱动方案)
  15. 【Autosar】RTE(Runtime Environment)层详解
  16. lspci/setpci用法小结
  17. Day 18:推断聚类后簇的类型
  18. 支付网关系统前后端鉴权方案
  19. LLaMA-Mesh:语言模型驱动的3D内容生成革命
  20. LLaMA-Factory相关参数说明
  21. VRRP-虚拟路由器冗余协议
  22. 微调LLaMA 7B
  23. Python通关秘籍(五)数据结构——元组
  24. Apache Ignite扫描查询
  25. 【机器学习深度学习】微调量化与模型导出量化:区分与应用
  26. 苹果app应用ipa文件程序开发后如何运行到苹果iOS真机上测试?
  27. 深度学习-算子
  28. TI DLP3010光机与相机触发使用指南
  29. halcon手眼标定z方向实操矫正
  30. CAN基础知识