ADB命令筆記

Android調試橋介紹

  • ADB,即Android Debug Bridge,它是Android提供的一個通用的調試工具,adb.exe存放在SDK開發包platform-tools目錄下。
    ADB
  • ADB,它是一個客戶端/服務器架構的命令行工具,主要由三部分組成。
  • 1) adb客戶端:一個在用戶用於開發程序的電腦上運行的客戶端。可以通過命令行控制檯(cmd)使用adb命令來啓動客戶端。其他一些基於Android系統的工具,如ADT插件和DDMS同樣可以產生adb客戶端。
  • 2) adb服務器:一個在用戶用於開發的機器上作爲後臺進程運行的服務器,該服務器負責管理客戶端與運行在模擬器或設備上的adb守護程序(deamon)之間的通信。
  • 3) adb deamon(守護進程):一個以後臺進程的形式運行於模擬器或設備上的守護程序(deamon)。
  • 當服務器運行,adb服務器就會綁定本地TCP端口5037並監聽adb客戶端發來的命令。接着服務器將所有運行中的模擬器或設備實例建立連接,它通過掃描所有5555到5585範圍內的奇數端口來定位所有的模擬器或設備。
  • 任何模擬器或設備實例都會取得兩個連接端口,一個偶數端口用來控制與控制檯的連接,和一個奇數端口用來控制與adb連接。例如:
    Emulator 1,console:5554
    Emulator 1,adb:5555
  • 使用adb控制、調試android設備,準備前提:需要使用USB數據線連接PC和android設備、開啓設備的USB調試模式(“開發者選項”菜單項內)
  • 建議將adb.exe放到系統的“PATH”環境變量中,如下:D:\adt\sdk\platform-tools;

ADB相關指令實例

adb devices

  • adb devices,通過該指令用戶可以瞭解到目前連接的設備/模擬器的狀態相關信息。
  • 輸出信息主要包括2列內容,第一列內容爲設備的序列號,第二列爲設備的狀態信息。設備序列號是用來唯一表示一個模擬器或者設備的一串字符串,通常模擬器是以“<設備類型-<端口號>”的形式表示序列號。
  • 狀態信息可能包含以下3種不同狀態:
  • 1) device狀態:表示設備或模擬器已經連接到adb服務器上。但這個狀態並不代表設備或模擬器已經啓動完畢並可以進行操作,因爲Android系統在啓動時會先連接到adb服務器上。
  • 2) offline狀態:表示設備或模擬器沒有連接到adb服務器上或者沒有響應。
  • 3) no device 狀態:表示無設備或模擬器連接。

adb intsall

  • adb install 安裝包路徑(c:…\test.apk),完成將手機應用安裝到設備或模擬器的操作。
  • 連接多個設備或模擬器,指定針對哪臺設備進行安裝:加入’-s’參數:adb -s 設備序列號(Emulator 1-5554) install 安裝包路徑(c:…\test.apk)如若不指定設備,會提示:more than one device and emulator。
  • 已經安裝了該應用,覆蓋原來安裝軟件並保留數據:加入’-r’參數:adb -s 設備序列號(Emulator 1-5554) install -r 安裝包路徑(c:…\test.apk)。

adb uninstall

  • adb -s 設備序列號(Emulator 1-5554) uninstall 已安裝應用包名(com.test.cn),完成卸載指定設備或模擬器的手機應用。
  • 卸載應用時希望保留配置和緩存文件,輸入’shell pm uninstall -k’:: adb -s 設備序列號(Emulator 1-5554) shell pm uninstall -k 已安裝應用包名(com.test.cn)

adb pull

  • 場景:將手機SD卡“tmp”目錄下的“test.txt”下載到我的電腦“D:”盤根目錄下:adb pull /sdcard/tmp/test.txt d:/
  • 同樣,也可以使用參數’-s’指定哪臺設備或模擬器的文件下載到電腦上:adb -s 設備序列號(Emulator 1-5554) pull /sdcard/tmp/test.txt d:/
  • 在Eclipse集成開發環境中也可以實現文件的傳輸,通過“Devices”標籤選擇設備與文件,點擊“Pull a file from the device”,選擇文件下載保存路徑就可以了。

adb push

  • 場景:將電腦端的“test.txt”文件傳送到手機的SD卡上:adb push d:/test.txt /sdcard。
  • 同樣,也可以使用參數’-s’指定傳送到哪臺設備或模擬器上:adb -s 設備序 列號(Emulator 1-5554) push d:/test.txt /sdcard。
  • “adb push”指令不僅能夠傳送文件,也能傳送文件夾。
  • 在Eclipse集成開發環境中也可以實現文件的傳輸,通過“File Explorer”標籤選擇傳送的文件,點擊“Push a file onto the device”,選擇文件保存路徑就可以了。

adb shell

  • Android系統是基於Linux系統開發的,支持常見的Linux命令,這些命令均保存在手機的“system/bin”文件下,如:ls、cat、df、uptime、ps、kill。我們可以通過“adb shell”指令後直接加上相關的指令及其參數來執行。
  • 在操作過程中,需要切換爲“root”用戶。

adb shell dumpsys battery

  • adb shell dumpsys battery,查看電池電量的相關信息。
  • 部分輸出信息的含義:
  • 1) AC powered:false,表示是否連接電源供電,false表示沒有使用電源供電。
  • 2) USB powered:true,表示是否使用USB供電,true表示使用USB供電。
  • 3) status:5,表示電池充電狀態,5表示電池電量是滿的(對應“BATTERY_STATUS_FULL”:5)
  • 4) health:2,表示電池的健康狀況,2表示電池的狀態爲良好(對應“BATTERY_HEALTH_GOOD”:2)
  • 5) present:true,表示手機上是否有電池,true 表示有電池。
  • 6) level:100,表示當前剩餘的電量信息。如果使用的是模擬器則永遠是50,表示剩餘電量爲50%。
  • 7) scale:100,表示當前電池電量的最大值,通常該值爲100。這裏裏的電池電量是按百分比顯示的。
  • 8) voltage:4332,表示當前電池的電壓,模擬器上的電壓爲0,這裏電壓單位爲毫伏(mv)。
  • 9) temperature:314,表示當前電池的溫度,314表示31.4度,其單位爲0.1度。
  • 10) technology:LI-ion,表示電池使用的技術,Li-ion表示鋰電池。

adb shell dumpsys WiFi

  • adb shell dumpsys WiFi,查看無線網絡的信息。由於輸出內容很多,可以加入“|more”控制輸出內容,按空格繼續顯示下頁。
  • 部分輸出信息的含義:
  • 1) Wi-Fi:enable,表示wifi的連接狀態信息,共包含5中狀態:
    • WIFI_STATE_DISABLED:Wifi已關閉。
    • WIFI_STATE_DISBLING:Wifi正在關閉中。
    • WIFI_STATE_ENABLED:Wifi已啓用。
    • WIFI_STATE_ENABLING:Wifi正在啓動中。
    • WIFI_STATE_UNKNOWN:未知wifi狀態。
  • 2) Internal stats,在該部分羅列了一些關於wifi的設備名稱、wifi的名稱、狀態、IP地址、MAc地址、網絡加密方式等信息。

adb shell dumpsys power

  • adb shell dumpsys power,查看電源管理的相關信息。
  • 可以輸入“findstr”或“grep”只輸出我們想要查看的內容:adb shell dumpsys power findstr “mScreenOffTimeoutSetting”

adb shell dumpsys telephony.registry

  • adb shell dumpsys telephony.registry,查看電話相關信息
  • 部分輸出信息的含義:
  • 1) mCallState,表示呼叫狀態。0:表示待機狀態,1:表示來電尚未接聽狀態,2:表示電話佔線。
  • 2) mCallncomingNumber,表示最近一次來電的電話號碼。
  • 3) mServiceState,表示服務狀態。0:表示正常使用狀態,1:表示電話沒有連接到任何電信運營網絡,2:表示電話只能撥打緊急呼叫號碼,3:表示電話已關機。
  • 4) mSignalStrength,表示信號強度信息。
  • 5) mMessageWaiting,表示是否在等待無線電消息。
  • 6) mCallForwarding,表示是否啓用了呼叫轉移。
  • 7) mDataActivty,表示無線數據通話情況。0:表示沒有通話,1:表示正在接收IP PPP信號,2:表示正在發送IP PPP信號,3:表示正在接收和發送IP PPP信號。
  • 8) mDataConnectionState,表示無線數據連接情況。0:表示無數據連接,1:表示正在創建數據連接,2:表示正在發送IP PPP信號,3:表示電話已關機。
  • 9) mDataConnectionPossible,表示是否有數據連接。
  • 10) mDataConnectionReason,表示數據連接的原因。
  • 11) mDataConnectionApn,表示Access Point Name,接入點名稱。
  • 12) mDataConnectionLinkproperties,表示數據連接的鏈路屬性。
  • 13) mDataConnectionCapbilities,表示數據鏈路連接的能力。
  • 14) mCellLocation,表示基站相關信息。
  • 15) registrations,表示等級記錄計數。

adb shell cat /proc/cpuinfo

  • Anddroid系統中的“/proc”分區保存系統各種實時信息,如:CPU、內存 等。
  • adb shell cat /proc/cpuinfo,查看CPU硬件的相關信息。

adb shell cat /proc/meminfo

  • adb shell cat /proc/meminfo,查看內存的相關信息。

adb shell cat /proc/iomem

  • adb shell cat /proc/meminfo,查看I/O內存分區的相關信息。

獲取手機型號

  • adb shell cat /system/build.prop | findstr “ro.product.model”

獲取手機處理器信息

  • adb shell cat /proc/cpuinfo | findstr “Processor”

獲取手機內存信息

  • adb shell cat /proc/meminfo | findstr “MemTotal”

獲取手機屏幕分辨率信息

  • adb shell dumpsys window | findstr “Display”

獲取手機系統版本信息

  • adb shell getprop ro.build.version.release

獲取手機內核信息

  • adb shell cat /proc/version

獲取手機運營商信息

  • adb shell getprop gsm.operator.alpha

獲取手機網絡類型信息

  • adb shell getprop gsm.network.type

獲取手機串號信息

  • adb shell dumpsys iphonesubinfo | findstr “Device ID”

獲取手機Android系統各個分區的相關信息

  • adb shell df

獲取Linux內核的環形緩衝區信息

  • adb shell –》su root –》 dmesg
  • 輸出內容較多,可以將輸出內容放入到SD卡的log.txt文件中:dmesg > /sdcard/log.txt

獲取手機Android系統當前狀態的相關信息

  • adb shell dumpstate
  • 輸出內容大概包括:
  • 1) 系統構建的版本細心
  • 2) 網絡相關信息
  • 3) 系統內核的相關信息
  • 4) 正常運行時間信息
  • 5) 內存使用情況信息
  • 6) CPU使用情況信息
  • 7) 進程相關情況信息
  • 8) 正在運行的應用列表相關信息
  • 9) 長在運行的服務列表相關信息
  • 10) 系統中已安裝的應用包相關信息
  • ……

獲取設備序列號

  • adb get-serialno
  • IMEI:International Mobile Equipment Identify,國際移動設備識別碼的縮寫,俗稱:手機串號、手機串碼、手機序列號,用於GSM移動wang落中識別每一步獨立的手機。

獲取模擬器/設備的當前狀態

  • adb get-state
  • 狀態信息:device、offline、on device

adb logcat

  • 查看和跟蹤系統日誌緩衝區信息,每一條日誌消息都有一個標記和優先級與其關聯。標記是一個極短的字符串,用於表示原始消息的來源。日誌的優先級爲每一行的首字符,其可能爲:V、D、I、W、E。
  • 1) V:代表冗餘級別的日誌信息
  • 2) D:代表調試級別的日誌信息
  • 3) I:代表信息級別的日誌信息
  • 4) W:代表警告級別的日誌信息
  • 5) E:代表錯誤級別的日誌信息
  • 只想輸出優先級別大於“警告”級別的日誌信息:adb logcat *:W
  • Android日誌系統爲日誌消息保持了多個循環緩衝區,而且不是所有的消息都被髮送到默認緩衝區,可以使用”-b”參數,查看附加的緩衝區
  • 1) radio:查看包含無線/電話相關的緩衝區消息
  • 2) events:查看事件相關消息
  • 3) main:查看主緩衝區相關的消息
  • 以查看主緩衝區爲例:adb logcat -b main

adb bugreport

  • 查看Android啓動過程的日誌信息,以及啓動後的系統狀態,包括進程列表、內存信息、VM信息等。
  • 針對輸出信息簡單的介紹:
  • 1) MEMORY INFO:讀取文件/proc/meminfo,查看系統內存使用狀態信息。
  • 2) CPU INFO:執行”/system/bin/top -n 1 -d 1 -m 30 -t”命令,查看系統CPU使用狀態信息。
  • 3) PROCARNK:執行”/system/bin/procrank”命令,查看內容使用狀態。
  • 4) VIRTUAL MEMORY STATS:讀取文件/proc/vmstat,查看虛擬內存分配情況,vmalloc申請的內存位於vmalloc_start~vmalloc_end之間,雖然邏輯上它們是連續的,但是物理上它們不要求連續。
  • 5) VMALLOC INFO:讀取文件/proc/wmallocinfo,查看虛擬內存分配情況。
  • 6) SLAB INFO:讀取文件/proc/slabinfo,查看分配器SLAB的一些信息。
  • 7) ZONEINFO:讀取文件/proc/zoneinfo,查看區域信息。
  • 8) SYSTEM LOG:執行”/system/bin/logcat -v time -f *:v”命令,輸出LOG,用於分析系統的當前狀態。
  • 9) VM TRACES:讀取文件/data/anr/traces.txt。因爲每個程序都是在各自的VM中運行的,這個LOG顯示各自VM的一些traces。
  • 10) EVENT LOG TAGS:讀取文件/etc/event-log-tags。
  • 11) EVENT LOG:執行”/stystem/bin/logcat -b events -v time -d *:v”,輸出一些event的log信息。
  • 12) RADIO LOG:執行”/stystem/bin/logcat -b radio -v time -d *:v”,輸出一些無線設備的連接狀態,如GSM、PHONE等信息。
  • 13) NETWORK STATE:獲取網絡接狀態和路由相關信息。
  • 14) SYSTEM PROPERTIES:獲取一系系統屬性,如Version、Services、netwok等消息。
  • 15) KERNEL LOG:顯示Android內核輸出的日誌信息。
  • 16) KERNEL WAKELOCKS:內核對一些程式和服務喚醒與休眠的信息。
  • 17) PROCESSES:顯示當前進程信息。
  • 18) PROCESSES AND THREADS:執行”ps -t -p P”命令,顯示當前進程和線程。
  • 19) LIBRANK:執行/system/bin/librank,提出不必要的library。
  • 20) BINDER FAILED TRANSACTION LOG:讀取文件/proc/binder/failed_transaction_log信息。
  • 21) BINDER TRANSACTION LOG:讀取文件/proc/binder/transaction_log信息。
  • 22) BINDER STATS:讀取文件/proc/binder/stats信息。
  • 23) BINDER PROCESS STATE:讀取文件/proc/binder/proc/*,獲取一些進程的狀態信息。
  • 24) FILESYSTES:執行/system/bin/df,獲取主要文件的一些容量使用狀態信息。
  • 25) PACKAGE SETINGS:讀取文件/data/system/packages.xml,獲取系統中package的一些狀態信息。
  • 26) PACKAGE UID ERRORS:讀取文件/data/system/uiderrors.txt,獲取錯誤信息。
  • 27) KERNEL LAST KMSG LOG:獲取最新內核消息日誌信息。

adb jdwp

  • 查看指定設備的JDWP相關進程ID。
  • JDWP,全稱爲Java Debug Wire Protocol,即Java調試器無線協議,它定義了調試器和被調試的Java虛擬機(Target VM)之間的通信協議。JDWP與其他協議不同,它僅僅定義了數據傳輸的格式,並沒有具體的傳輸方式。

adb start-server

  • 重啓adb服務

adb kill-server

  • 關閉adb服務

adb forward

  • 將本機的端口重定向到模擬器或者設備端口上。
  • 例如:將本機的2211端口重定向到設備上的5566端口:adb forward tcp:2211 tcp:5566,將所有發往2211端口的數據轉發到5566端口上。

am

  • am,全稱Activty Manager,可以利用am去模擬各種系統的行爲,如:啓動一個Activity、強制停止進程、發生廣播進程、修改屏幕屬性等。
  • 例如:啓動照相功能:adb shell am start -n com.sec.android.app.camera/.Camera
  • 例如:向手機發送低電量環境的信息:adb shell am boardcast -a android.intent.action.BATTERY_CHANGED –ei “level” 5 –ei “scale” 100

pm

  • pm,全稱Package Manager,可以去模擬android行爲或者查詢設備上的應用等。
  • 例如:打印所有包列表信息:adb shell pm list packages
  • 參數:
  • 1) -f:查看其關聯的文件,即應用apk的位置對應包名
  • 2) -d:查看disabled package
  • 3) -e:查看enable package
  • 4) -s:查看系統package
  • 5) -3:查看第三方package
  • 6) -i:查看package的對應安裝者
  • 7) -u:查看曾被卸載過的package
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章