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.pswp.cn/news/917258.shtml
    繁体地址,请注明出处:http://hk.pswp.cn/news/917258.shtml
    英文地址,请注明出处:http://en.pswp.cn/news/917258.shtml

    如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    重学JS-001 --- JavaScript算法与数据结构(一)JavaScript 基础知识

    文章目录 变量 变量命名规则 变量命名 let vs const 变量使用范围 赋值 = 控制台输出 运算符 ++ -- == === !== 注释 转义字符 数据类型 7种 原始数据类型 1. string​​ 2. number​​ 3. ​​boolean​​ 4. null​​ 5. undefined​​ 6. ​​symbol​​(ES6 新增) 7. big…

    MySQL数据闪回工具my2sql的使用

    场景&#xff1a; 当你或者其它人员误操作数据库不小心删除或者更新了一批数据&#xff0c;但是是当时又没事先备份时&#xff0c;你可以 用这个 my2sql工具快速帮你找回数据。就是如此的丝滑。但是要注意的是只限于dml语句&#xff0c;所以我们在操作数据库前必需先备份哦&…

    9.1无法恢复的错误与 panic!

    无法恢复的错误与 panic! 有时你的代码中会发生严重问题&#xff0c;而你无能为力。在这些情况下&#xff0c;Rust 提供了 panic! 宏。实际上&#xff0c;有两种方式会导致 panic&#xff1a;一种是执行某个操作使代码产生 panic&#xff08;例如访问数组越界&#xff09;&…

    分享低功耗单火线开关语音识别方案

    在众多老旧建筑和常规家居环境里&#xff0c;单火线布线是主流方式。单火线语音识别芯片方案通过研发和应用特殊的单火线语音识别芯片&#xff0c;实现设备在单火线供电条件下稳定运行&#xff0c;并精准识别语音指令&#xff0c;为智能家居、智能照明等领域带来便捷的语音控制…

    如何在Windows操作系统上通过conda 安装 MDAnalysis

    MDAnalysis 是一个开源的 Python 库,旨在提供一个高效且灵活的方式来分析和处理分子动力学(MD)模拟数据。它可以从不同的文件格式中读取模拟轨迹和结构数据,进行复杂的数据处理和分析,广泛应用于生物物理学、化学、材料科学等领域。 一、创建虚拟环境 为了能够顺利安装,减…

    实用PDF演示解决方案

    它打破了传统阅 读模式&#xff0c;让PDF文档也能像PPT一样流畅播放&#xff0c;特别适合汇报、讲解等展示场景。它是绿色单文件版&#xff0c;无需安装&#xff0c;双击红色图标即点即用。运行后第一件事&#xff0c;建议把界面语言切换成中文&#xff0c;操作更顺手。导入PDF…

    VS Code中如何关闭Github Copilot

    点击顶部搜索栏后面的Copilot图标&#xff0c;在下拉菜单中选择Hide Copilot。在弹出的提示框中&#xff0c;点击Hide Copilot按钮就可以了。

    MySQL学习从零开始--第六部分

    Binlog是什么&#xff1f;有哪几种格式&#xff1f;推荐使用哪种&#xff0c;为什么 Binlog是什么 Binlog二进制日志是MySQL Server层记录所有更改数据库内容的操作日志的二进制文件&#xff0c;如操作UPDATE,DELETE,INSERTBinlog不记录SELECT&#xff0c;SHOW等查询操作使主从…

    走进computed,了解computed的前世今生

    computed&#xff08;计算属性&#xff09;并不是vue独创的&#xff0c;而是源自计算机科学和响应式编程的长期发展 计算理论的奠基&#xff1a; 函数式编程的纯函数思想&#xff1a;计算属性的核心特征&#xff08;无副作用、依赖输入确定输出&#xff09;直接来源于函数式编程…

    Java 23 新特性解析与代码示例

    Java 23 新特性解析与代码示例 文章目录Java 23 新特性解析与代码示例1. 引言2. 正式特性2.1. Markdown文档注释 (JEP 467)2.2. 废弃sun.misc.Unsafe的内存访问方法以移除 (JEP 471)2.3. ZGC&#xff1a;默认启用代际模式 (JEP 474)3. 预览特性3.1. 原始类型在模式、instanceof…

    spring boot + mybatis + mysql 只有一个实体类的demo

    使用MyBatis进行数据库操作&#xff0c;配置简单。主要演示了mybatis可以不用只使用方法名来对应mapper.java和mapper.xml。 目录结构 pom.xml src/ ├── main/ │ ├── java/ │ │ └── com/ │ │ └── springbootjdbcweb/ │ │ └── …

    iRemovalPro完美绕iCloud插卡打电话,A12+支持iOS 18.1.1

    iRemovalPro 专业工具全解析与操作指南 &#xff08;支持iOS 14.0 - 16.6.1&#xff0c;A7-A15芯片设备&#xff09; &#x1f449;下载地址见文末 iRemoval Pro iRemoval 专业版是一款来自外国安全研究员的工具&#xff0c;用来帮助一些人因为忘记自己的ID或者密码&#xff0c…

    安卓SELinux策略语法

    目录前言一、 通用AV规则语法1.1 allow source target:class permissions;1.2 neverallow source target:class permissions;二、type三、attribute四、typeattribute五、alias六、typealias七、init_daemon_domain7.1 init_daemon_domain 宏概述7.2 宏展开与实现7.2.1 展开后规…

    vscode cursor配置php的debug,docker里面debug

    VSCode PHP调试配置指南 概述 本文介绍如何在VSCode中配置PHP调试环境&#xff0c;包括本地和Docker环境。 前置要求 VSCodePHP 7.0Xdebug扩展PHP Debug VSCode扩展 本地调试配置 1. 安装Xdebug # Ubuntu/Debian sudo apt-get install php-xdebug# MacOS brew install p…

    elk部署加日志收集

    清华大学镜像源地址&#xff1a;Index of /elasticstack/8.x/yum/8.13.2/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 一、elasticsearch 1.安装 rpm -ivh elastic-agent-8.13.2-x86_64.rpm 2.修改配置 vim /etc/elasticsearch/elasticsearch.yml 修改如下&…

    dify 升级1.7.1 插件无法下载依赖

    dify 升级1.7.1 插件无法下载依赖 1. 安装通义千问插件&#xff0c;各种报错&#xff1b; 使用下面命令查看docker 镜像日志 docker logs -f --tail100 docker-plugin_daemon-1 2025/08/01 07:42:21 full_duplex.go:59: [INFO]init environment for plugin langgenius/tongyi…

    linux中简易云盘系统项目实战:基于 TCP协议的 Socket 通信、json数据交换、MD5文件区别与多用户文件管理实现

    &#x1f4cb; 项目介绍 本项目是一个基于Linux环境的简易云盘系统&#xff0c;采用C/S&#xff08;客户端/服务器&#xff09;架构&#xff0c;实现了类似百度网盘的基本功能。系统通过TCP Socket进行网络通信&#xff0c;使用JSON格式进行数据交换&#xff0c;利用SQLite3数据…

    linux中posix消息队列的使用记录

    在linux中使用posix中的消息队列时遇到了一个问题&#xff0c;就是在发送消息时&#xff0c;如果队列满了&#xff0c;mq_send接口会一直阻塞&#xff0c;经过查找资料后才发现&#xff0c;该接口默认是阻塞的&#xff0c;也就是说&#xff0c;当队列满了以后&#xff0c;接口会…

    01 基于sklearn的机械学习-机械学习的分类、sklearn的安装、sklearn数据集及数据集的划分、特征工程(特征提取与无量纲化、特征降维)

    文章目录机械学习机械学习分类1. 监督学习2. 半监督学习3. 无监督学习4. 强化学习机械学习的项目开发步骤scikit-learn1 scikit-learn安装2 sklearn数据集1. sklearn 玩具数据集鸢尾花数据集糖尿病数据集葡萄酒数据集2. sklearn现实世界数据集20 新闻组数据集3. 数据集的划分特…

    n8n】n8n的基础概念

    以下是为初学者整理的 n8n 基本概念总结&#xff0c;帮助快速理解核心功能和使用逻辑&#xff1a;1. 工作流&#xff08;Workflow&#xff09;核心单元&#xff1a;n8n的一切操作基于工作流&#xff0c;代表一个自动化流程。组成&#xff1a;由多个节点&#xff08;Nodes&#…