Android ADB原理及經常使用命令

Android調試橋(ADB, Android Debug Bridge)是一個Android命令行工具,包含在SDK 平臺工具包中,adb能夠用於鏈接Android設備,或者模擬器,實現對設備的控制,好比安裝和調試應用。和Appium同樣,adb也是基於C/S架構實現的。linux

1、ADB運行原理

adb分爲三個部分:PC上的adb client,adb server和手機(也多是PC上的模擬器)上的adb daemon。這是一個多多鏈接的設計。即一臺PC能夠鏈接多個手機,一臺手機也能夠鏈接多個PC。android

  1. Client本質上就是Shell,用來發送命令給Server。發送命令時,首先檢測PC上有沒有啓動Server,若是沒有Server,則自動啓動一個Server,綁定 TCP 的 5037 端口,而後將命令發送到Server,並不關心命令發送過去之後會怎樣。
  2. ADB Server:運行在PC上的後臺程序,目的是檢測USB接口什麼時候鏈接或者移除設備。ADB Server維護着一個「已鏈接的設備的鏈表」,而且爲每個設備標記了一個狀態:offline,bootloader,recovery或者online;Server一直在作一些循環和等待,,監遵從 clients 發來的命令,協調client和Server還有daemon之間的通訊。
  3. ADB Daemon:程序「adbd」做爲一個後臺進程在Android設備或模擬器系統中運行。它的做用是鏈接ADB服務器,而且爲運行在主機上的客戶端提供一些服務;

Client和Server之間經過TCP/IP通訊,Server偵聽本機的5037端口,Client試圖去鏈接這個端口。基於ADB的工具備 DDMS 、monkey 測試等git

netstat -nao | findstr 5037

2、ADB經常使用命令

1. adb server啓動和鏈接

  • 啓動 adb server
    adb start-server
  • 中止 adb server
    adb kill-server
  • 指定 adb server 的網絡端口<adb默認端口爲5037>
    adb -P <port> start-server

在發送adb命令時,若是沒有pc沒有啓動Server,則會自動啓動一個Server,而後將命令發送到Server。shell

  • 經過adb usb打開設備上的tcpip服務並綁定一個端口
    adb tcpip 5555
    adb -s 611DKBQC22SH2 tcpip 5555  # 設備在 5555 端口監聽 TCP/IP 鏈接

無線鏈接要將 Android 設備與將運行 adb 的電腦鏈接到同一個局域網windows

  • ADB Client經過命令adb connect ip鏈接遠程的終端api

    adb connect 127.0.0.1:62001 #夜遊神模擬器
    adb connect 127.0.0.1:7555 #網易mumu模擬器
    adb disconnect <device-ip-address> # 斷開鏈接

USB鏈接
開啓Android 設備的開發者選項和 USB 調試模式緩存

2. adb經常使用命令

  • 以 root 權限運行 adbdbash

    adb root 
    adb -s 611DKBQC22SH2 root
  • 查看 adb 版本服務器

    adb version
  • 查看設備名稱網絡

    adb devices
  • 重啓手機

    adb reboot
  • 查看appPackage和appActivity

    # 1
    adb logcat | findstr -i displayed # 打印手機日誌
    # 2
    adb shell dumpsys activity
    # 3
    C:\Users\admin> adb shell
    root@shamu:/ # dumpsys activity | grep kaoyan
    # 4
    adb shell dumpsys activity top
    # 5
    adb shell dumpsys activity|findstr mFocusedActivity # 進入APP,獲得APP名
    # 6
    adb shell dumpsys window windows|findstr "Current"
    # 7
    adb shell pm list packages #全部應用列表
    adb shell pm list packages -s # 系統應用
    adb shell pm list packages -3 # 第三方應用
    adb shell pm list packages smart # 包名包含smart字符串的應用
  • 安裝卸載apk包
    模擬器能夠直接把安裝包拖入模擬器進行安裝

    adb安裝卸載方法:

    # 卸載
    adb uninstall 包名
    # 安裝
    adb install app.apk
    adb install -r app.apk # 強制安裝

3. adb 模擬控制手機

拉起、中止Activity

adb shell am start [options] :調起 Activity
adb shell am force-stop : 強制中止應用

adb shell am start -n com.tenda.smarthome.app/.activity.main.MainActivity # 打開smarthome APP
adb shell am force-stop com.tenda.smarthome.app # 強制中止應用
adb shell pm clear <packagename>  # 清除應用數據與緩存
adb shell am start -a android.intent.action.VIEW -d https://www.baidu.com # 打開網頁

模擬按鍵

adb shell input keyevent  模擬按鍵

adb shell input keyevent 3 # 按下HOME 鍵
adb shell input keyevent 4 # 按下返回鍵

adb shell input keyevent 26 # 按下電源鍵
adb shell input keyevent 82 # 按下菜單鍵

adb shell input keyevent 223 # 熄滅屏幕
adb shell input keyevent 224 # 點亮屏幕

adb shell input keyevent 67 # 刪除

文本框輸入

adb shell input text "text" # 向文本框中輸入文字,不支持中文

點擊

adb shell input tap 458 573 根據座標點擊

滑動

adb shell input swipe  x:屏幕左到右 y:從上到下     左上角爲0點- 圖像座標系

adb shell input swipe 550 1200 550 375 # 滑動解鎖
adb shell input swipe 700 200 100 200 # 左翻頁
adb shell input swipe 100 200 1000 200 # 右翻頁

4. adb文件管理(同Linux)

目錄操做

C:\Users\DELL>adb shell
root@M5:/data # su  提取到root權限,顯示井號便可
su
root@M5:/ # ls
ls
@btmtk
acdapi
adb
agps_supl
...
root@M5:/data # ls -l
ls -l
drwxrwx--- bluetooth net_bt            2019-03-01 14:26 @btmtk
drwxrwx--- system   system            2019-03-01 14:26 acdapi
drwx------ root     root              2019-03-01 14:26 adb
drwxrwx--x gps      system            2019-07-19 10:49 agps_supl
drwxrwx--- system   system            2019-03-01 14:26 amit
drwxrwxr-x system   system            2019-07-22 09:13 anr
drwxrwx--x system   system            2019-08-01 09:00 app
drwx------ root     root              2019-03-01 14:26 app-asec

root@M5:/data # pwd   當前路徑
pwd
/data

root@M5:/data/system # cd - 切換到上次目錄
cd -
/data
root@M5:/data # cd .. 切換到上級目錄
cd ..
2|root@M5:/ # cd d*a 
cd d*a
root@M5:/data # cd s*m 目錄名較長時建議使用通配符"*",如cd到system目錄
cd s*m
root@M5:/data/system #

文件操做(同Linux)

rm -r crash # 刪除文件夾及內容
rmdir # 文件夾 刪文件夾
rm # 文件 刪文件
cat filename # cat,more less顯示文件內容
cp /data/data/com.android.contacts/databases/contacts_app.db /mnt/sdcard/ # 複製
mkdir # 建立目錄
du # 顯示目錄空間大小
df # 顯示磁盤空間大小
touch test.txt # 建立文件
ps # 顯示進程
top # 動態顯示進程狀態
chmod 644 # 改變權限

退出

CTRL+C 退出shell模式

root@M5:/mnt/sdcard # ^C
C:\Users\DELL>d:

手機和電腦文件傳輸

  • 將手機文件pull到電腦

    D:\>adb pull sdcard/cmcc_sso_config.dat  # 將手機sdcard中的cmcc_sso_config.dat 文件copy到電腦D:根目錄下
    D:\>adb pull sdcard/cmcc_sso_config.dat D:\adbtest
    D:\>

    • 將電腦文件push到手機目錄下D
    D:\>adb push D:/adbtest/cmcc_sso_config111.dat /sdcard/ # 將D:中的cmcc_sso_config111.dat copy到手機sdcard 文件夾下
    D:\>adb shell
    root@M5:/ # cd /mnt/sdcard
    cd /mnt/sdcard
    
    root@M5:/mnt/sdcard # ls *cmcc_sso_config*
    ls *cmcc_sso_config*
    cmcc_sso_config.dat
    cmcc_sso_config111.dat
    
    root@M5:/mnt/sdcard # find /data -name "cmcc_sso_config*"
    find /data -name "cmcc_sso_config*"
    /data/media/0/cmcc_sso_config.dat
    /data/media/0/cmcc_sso_config111.dat

5. 其它實用功能

屏幕截圖-截圖保存到SD卡里再導出

D:\>adb shell screencap -p /sdcard/screen.png
D:\>adb pull /sdcard/screen.png
D:\>adb shell rm /sdcard/screen.png

錄製屏幕

D:\>adb shell screenrecord /sdcard/filename22.mp4
D:\>adb pull /sdcard/filename22.mp4
D:\>adb shell rm /sdcard/filename22.mp4

D:\>adb shell screenrecord  --time-limit 10 /sdcard/demo.mp4
adb shell screenrecord --size 1280*720 /sdcard/demo.mp4
adb shell screenrecord --bit-rate 6000000 /sdcard/demo.mp4

聯網

D:\>adb shell svc wifi disable # 關閉WiFi
D:\>adb shell svc wifi enable  # 開啓WiFi

D:\>adb shell ping -w 3 8.8.8.8  #  查看是否能聯網
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms   
D:\>adb shell cat /data/misc/wifi/*.conf  # 查看鏈接過的 WiFi 密碼
.....
device_name=meizu_M5
manufacturer=Meizu
model_name=M611D
model_number=M611D
serial_number=611DKBQC22SH2
device_type=10-0050F204-5
os_version=01020300
config_methods=physical_display virtual_push_button
p2p_no_group_iface=1
external_sim=1
wowlan_triggers=disconnect


network={
        ssid="Plug_C415"
        key_mgmt=NONE
        priority=1
        flag=1
}

network={
        ssid="                                "
        key_mgmt=NONE
        priority=2
        flag=1
}

network={
        ssid="test"
        psk="12345678"
        key_mgmt=WPA-PSK
        priority=3
        flag=1
}

切換飛行模式

經過adb shell,輸入命令,能夠切換飛行模式
開啓飛行模式

adb shell settings put global airplane_mode_on 1
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true

關閉飛行模式

adb shell settings put global airplane_mode_on 0
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false

svc命令

這個腳本在/system/bin目錄下,能夠用來控制電源管理,wifi開關,數據開關(就是上網流量)
控制usb插入的時候屏幕是否常亮

svc power stayon [true|false|usb|ac]

關閉數據鏈接(上網流量),這個命令不會更改app的任何設置,直接在底層關閉數據鏈接。

svc data disable

打開上網數據鏈接

svc data enable

控制3g數據鏈接比wifi優先。

svc data prefer

關閉wifi 鏈接

svc wifi disable

開啓wifi鏈接

svc wifi enable

設置wifi優先

svc wifi prefer

上面的命令都要在shell中執行,須要root。能夠用script ,而後輸入這些命令作成在快捷方式放在桌面,跟那些開關軟件同樣方便使用。

安卓busybox

android busybox解決adbshell命令不全

安卓雖然是基於linux,可是精簡了不少linux工具,不少經常使用的linux指令不能使用。busybox至關於一個打包的工具箱,打包了不少的經常使用的linux可執行文件和其依賴。安裝了busybox你就能夠在安卓下下載一個模擬終端而後在裏面運行一些以前不能運行的指令。

wpa_spplicant

wpa_supplicant本是開源項目源碼,被谷歌修改後加入Android移動平臺,它主要是用來支持WEP,WPA/WPA2和WAPI無線協議和加密認證的,控制漫遊和無線驅動的IEEE 802.11 驗證和關聯。經過socket(無論是wpa_supplicant與上層仍是wpa_supplicant與驅動都採用socket通信)與驅動交互上報數據給用戶,而用戶能夠經過socket發送命令給wpa_supplicant調動驅動來對WiFi芯片操做。 簡單的說,wpa_supplicant就是WiFi驅動和用戶的中轉站外加對協議和加密認證的支持。

wpa_supplicant工具主要包含wpa_supplicant(命令行模式,屬於服務端)與wpa_cli(交互模式,屬於客戶端)兩個程序來達到無線認證鏈接。經過wpa_cli來進行WiFi的配置和鏈接,也能夠直接調用wpa_supplicant接口實現網絡控制。
部分命令:

wpa_cli -i wlan0 scan   \\掃描熱點
wpa_cli -i wlan0 scan_result   \\打印熱點信息
wpa_cli -i wlan0 set_network 0 ssid  "wifi_name" \\配置WiFi熱點的名稱ssid
wpa_cli -i wlan0 set_network 0 psk '"12345678"' \\配置WiFi熱點的密碼psk
--THE END--

文章標題:Android ADB原理及經常使用命令
本文做者:hiyo
本文連接:https://hiyong.gitee.io/posts/appium-adb/ 歡迎關注公衆號:「測試開發小記」及時接收最新技術文章!

相關文章
相關標籤/搜索