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.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&#…