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