一、ADB簡介
ADB,即Android Debug Bridge,它是Android提供的一個通用的調試工具。adb.exe在安裝的Android的sdk開發包platform-tools的目錄下。
(一)ADB原理
ADB的結構是一個client-server的結構,包含3個部分:
客戶端部分: 運行在PC上,可以在命令行中運行adb命令來調用該客戶端,像ADB插件和DDMS這樣的Android工具也可以調用adb客戶端。
守護進程 : 運行於模擬器或手機的後臺(也就是一個叫做aabd的東西,運行在Andriod設備的底層,android設備需啓動usb調試)。
服務器部分 :在開發app的PC上後臺運行,用於管理客戶端(client)和守護進程(daemon)的連接。
(二)ADB如何工作的
當啓動adb客戶端時,客戶端首先檢測adb服務端進程是否運行,如果沒有運行,則啓動服務端。當服務端啓動時,它會綁定到本地的TCP5037端口,並且監聽從adb客戶端發來的命令——所有的adb客戶端都使用5037端口與adb服務端通信。(PC上)
服務端與所有正在運行的模擬器或手機連接。它通過掃描5555-5585之間的奇數號端口來搜索模擬器或手機,一旦發現adb守護進程,服務器就通過此端口建立一個連接(客戶端與守護進程的連接)。需要說明的是,每一個模擬器或手機使用一對有序的端口,偶數號端口用於控制檯連接(控制設備的console連接),奇數號端口用於adb連接。
結構圖:
(三)ADB相關指令
1.adb devices:瞭解目前連接的設備或模擬器的狀態的相關信息。
輸出信息包括兩列:第一列爲設備的序列號信息,第二列爲設備的狀態信息(device狀態:表示設備已連接;offline狀態:設備沒有連接到adb服務或無響應;no device狀態:沒有設備或模擬器連接)
2.adb install:完成手機應用的安裝
(1)adb install 安裝包路徑(絕對路徑)
(2)向指定的物理手機或模擬器來安裝指定的手機應用:
adb–s 物理設備序列號或手機模擬器設備序列號 install 安裝包路徑
(3)已安裝該應用,加入-r會覆蓋原來安裝的軟件並保留數據
adb–s 物理設備序列號或手機模擬器設備序列號 install –r 安裝包路徑
3.adb uninstall:完成手機應用的卸載
(1)adb uninstall已安裝應用的包名
(2)adb –s 物理設備序列號或手機模擬器設備序列號 uninstall 已安裝應用的包名
(3)卸載手機應用時保留配置和緩存文件
adb –s 物理設備序列號或手機模擬器設備序列號shell pmuninstall –k 已安裝應用的包名
4.adb pull:實現手機端文件傳至pc端
adb pull 手機端路徑 pc端路徑
例:adb pull /sdcard/tmp/error_fs.dat d:/
如果是針對某個設備需使用“-s”參數來指定設備:adb –s 設備序列號 pull 手機端路徑 pc端路徑
5.adb push:實現pc端文件傳至電腦上
例: adb push d:/ /sdcard/tmp/
6.adb shell:支持linux命令
輸入adb shell 指令後,出現提示符,可直接輸入linux命令,可使用exit來退出“adbshell”提示符
su root 切換爲root用戶(手機需要)
(1) adbshell dumpsys 查看手機相關信息
~ battery 查看電池電量信息
AC powered 是否連接電源供電;USB powered 是否連接USB供電;Status 電池的充電狀態(5表示電池電量是滿的);Health 電池的將康狀態(2表示良好);Present 手機上是否有電池;Level 當前剩餘的電量信息;Scale 電池電量的最大值;Voltage 當前電池的電壓;Temperature 當前電池的溫度;Technology 電池使用技術(鋰電池)。
~wifi 查看無線網絡信息
加入其後“|more”參數,當輸出滿一頁時就會暫停輸出,按空格鍵顯示下頁內容,按Q健停止顯示後續輸出信息
~power 查看電源管理相關信息
adb shell dumpsys power |grep "mScreenOffTimeoutSetting"僅輸出屏幕關閉時間的設置信息,grep(搜索文件命令)只輸出相應信息。
~telephony.registry 查看電話相關信息
(2)adb shell cat /proc/XXX(cat命令查看文件)
android系統下的“/proc”分區保存系統的各種實時信息,如CPU、內存等
adb shell cat /proc/cpuinfo 查看cpu硬件的相關信息
adb shell cat /proc/meminfo 查看內存的相關信息
adb shell cat /proc/iomem 查看I/O內存分區的相關信息
此外,還可以使用相應命令獲取手機型號、手機處理器信息、手機內存信息、手機屏幕分辨率信息、手機系統版本信息、手機內核版本信息、手機運營商信息、手機網絡類型信息、手機串號信息
(3)adb shell df 獲取手機android系統各個分區的相關信息
(4)獲取linux內核的環形緩衝區信息(需root權限)、獲取手機android系統的當前狀態的相關信息
當信息過多時可使用重定向,將輸出的內容放到一個文件中,adb shell dmesg > /sdcard/log.txt,可打開文件查看。
(5)pm指令(package manager),模擬android行爲或查詢設備上的應用
adb shell pm list package 列出手機裝的所有的app包名
adb shell pm list package -3列出除了系統應用外手機裝的第三方的app包名
~-d 查看disabled packages
-e 查看enable package
-s 查看系統package
-i 查看package對應的安裝者
-u 查看曾被卸載過的package
(6)am指令(Activity Manager)模擬各種系統的行爲,如啓動一個Activity、強制停止進程、發送廣播進程、修改設備屏幕屬性等
例:adb shell am start –n com.sankuai.meituan.takeoutnew/(.activity名稱)啓動app
(7)adb shell clear <package> 清除應用數據與緩存
(8)adb shell screencap 手機路徑(截圖)
adb shell screenrecord 手機路徑(視頻)
7.adb get-serialno 獲取設備序列號
8.adb get-state 查看設備或模擬器當前狀態
9.adb logcat 查看和跟蹤系統日誌
adblogcat –v time>logcat.log 獲取log文件
adblogcat –c 清除緩衝池
adblogcat *:W 輸出優先級別大於“警告”級別的日誌信息(警告以及錯誤級別信息)
10.adb connect<host>[:<port>] 與指定端口號連接設備
adb disconnect<host>[:<port>] 與設備斷開連接
例:adb connect172.24.35.16:17501
11.adb start-server 啓動adb服務
12.adb kill-server 關閉adb服務
13.adb forward 將本機端口號重定向到模擬器或設備上
例:adb forwardtcp:2211(本機) tcp: 5566(設備)
14.adb bugreport 查看android啓動過程的日誌信息,以及啓動後的系統狀態,包括進程列表、內存信息、VM信息等。
二、手機模擬器上相關操作
模擬器是如何工作的?
在模擬器啓動後,會打開一個網絡套接字(Socket)端口與其所在的主機進行通信,可以藉助一些工具,通過這個端口與模擬器進行交互。如通過telnet操控模擬器(保證telnet在pc上可用,在終端輸入telnet,查看服務是否可用,使用quit退出命令)
統一在telnet服務下
1.模擬手機來電:gsm call 13800000044
2.模擬發送短信:sms send 13800440000 hi,tester
3.模擬器上模擬網絡相關命令
network status:查看網絡狀態的信息
network speed 14.4:20 :動態的設定模擬器的網速(上行:14.4,下行:20)
network delay 5:網絡延時爲5毫秒
network capture start 文件名 :動態捕獲模擬器的網絡數據包
network capture stop(停止)
4.修改模擬器尺寸
window scale 0.5 尺寸變爲原來的一半