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

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.xdnf.cn/news/15941.html

    相关文章:

  1. Qt/C++源码/监控设备模拟器/支持onvif和gb28181/多路批量模拟/虚拟监控摄像头
  2. RedisJSON 指令精讲JSON.TOGGLE 键翻转布尔值
  3. Python趣味算法:实现任意进制转换算法原理+源码
  4. 【无标题】buuctf-re3
  5. 企业级IIS配置手册:安全加固/负载均衡/性能优化最佳实践
  6. PyQt5—QLabel 学习笔记
  7. 常用 Flutter 命令大全:从开发到发布全流程总结
  8. ELF 文件操作手册
  9. Java 动态导出 Word 登记表:多人员、分页、动态表格的最佳实践
  10. C++11--锁分析
  11. ospf技术
  12. 【SpringAI实战】实现仿DeepSeek页面对话机器人
  13. Jiasou TideFlow AIGC SEO Agent:全自动外链构建技术重构智能营销新标准
  14. 技术与情感交织的一生 (十)
  15. Spring处理器和Bean的生命周期
  16. LinkedList与链表(单向)(Java实现)
  17. 【2025/07/21】GitHub 今日热门项目
  18. WinForm-免费,可商用的WinForm UI框架推荐
  19. Linux 命令大全
  20. Three.js实现银河流光粒子星空特效原理与实践
  21. 【Android】交叉编译faiss库 | 问题解决
  22. 【HarmonyOS】ArkTS语法详细解析
  23. C++ <继承> 详解
  24. Java IO流体系详解:字节流、字符流与NIO/BIO对比及文件拷贝实践
  25. kafka 生产和消费 性能测试工具 kafka-producer-perf-test.sh kafka-consumer-perf-test.sh
  26. 安装docker可视化工具 Portainer中文版(ubuntu上演示,所有docker通用) 支持控制各种容器,容器操作简单化 降低容器门槛
  27. 2025最新版IntelliJ IDEA Ultimate for Mac专业版安装使用指南
  28. C#最佳实践:为何应尽量减少静态类的使用
  29. 【PTA数据结构 | C语言版】旅游规划
  30. WSL如何安装docker?