1. 程式人生 > >Python 指令碼利用adb 進行手機控制

Python 指令碼利用adb 進行手機控制

一.  adb 相關命令:

  1. 關閉adb服務:adb kill-server
  2. 啟動adb服務  adb start-server
  3. 查詢當前執行的所有裝置  adb devices
  4. 可能在adb中存在多個虛擬裝置執行 可以指定虛擬裝置執行  -s 虛擬裝置名稱 
  5. 重啟裝置 adb reboot  --指定虛擬裝置   adb -s 裝置名稱 reboot
  6. 檢視日誌  adb logcat  清除日誌 adb logcat -c
  7. 進入linux shell下  adb shell 其中常用的linux命令  cd  cat 等等 輸入su可以獲取超級管理員名稱了 要確定是否有哪些命令 進入 system/bin目錄 就知道了
  8. 傳入檔案到裝置中 adb push 本地檔案 遠端目錄   

  9. 從裝置中拷貝檔案到本地  adb -s emulator-5556 pull /data/config.ini d:/

  10. 顯示當前執行的全部模擬器:
      adb devices

  11. 安裝應用程式:
      adb install -r 123.apk

  12. 獲取模擬器中的檔案:
      adb pull <remote> <local>

  13. 向模擬器中寫檔案:
      adb push <local> <remote>

  14. 進入模擬器的shell模式:
      adb shell

  15. 解除安裝apk包:
        adb shell
        cd data/app
        rm 123.apk
       exit
        adb uninstall 123.apk
        adb install -r 123.apk

  16. 檢視adb命令幫助資訊:
        adb help
  17. 刪除系統應用:
        adb remount (重新掛載系統分割槽,使系統分割槽重新可寫)。
        adb shell
        cd system/app
        rm 123.apk

  18. 獲取管理員許可權:
        adb root

  19、複製檔案:
       複製一個檔案或目錄到裝置:
       adb push <source> <destination></destination></source>
        如:adb push update.zip /sdcard/ 

       從裝置上覆制一個檔案或目錄:
       adb pull <source> <destination></destination></source>
       如:adb pull /sdcard/update.zip.

  20、取得當前執行裝置的例項的列表及每個例項的狀態:
      adb devices

  21:adb shell input tap

       這條命令模擬Android手機在螢幕座標(X,Y)處進行了點選操作。

  22adb shell input swipe  

      這條命令模擬Android手機從螢幕座標(X1,Y1)滑動到座標(X2,Y2)的操作。

  23、uiautomator dump   dump: creates an XML dump of current UI hierarchy 這個命令是用來成成當前介面的UI層次,並用XML格式進行展示 。這樣就可以獲取各個元件的位置了

  注:如果PC要想同時控制多臺Android手機,必須在adb 後面新增-s

  例如:adb -s 13b6e4c4 shell input tap 400 400

  表示對13b6e4c4這臺Android手機進行在螢幕上(400,400)座標位置進行模擬的點選事件。

  ***  adb shell uiautomator dump /mnt/sdcard/window_dump.xml  獲得手機當前介面的UI資訊,生成window_dump.xml

  ***  adb shell input text “123”  輸入text

  舉例:

    1、開啟cmd,進入到當前資料夾中,輸入命令 adb devices 檢視當前與電腦連線的裝置(前提是,手機開啟usb除錯模式),可以檢視已連線成功的手機。

    2、 若手機成功連線,輸入命令 adb shell input tap 100 100 , 表示點選螢幕上座標為(100,100)的點,如果不知道需要點選的點的具體位置的話可以在手機開發者模式中設定。

二. adb 模擬按鍵:

  1. 比如使用 adb shell input keyevent <keycode> 命令,不同的 keycode 能實現不同的功能,完整的 keycode 列表詳見 KeyEvent,摘引部分我覺得有意思的如下:

keycode含義
3 HOME 鍵
4 返回鍵
5 開啟撥號應用
6 結束通話電話
24 增加音量
25 降低音量
26 電源鍵
27 拍照(需要在相機應用裡)
64 開啟瀏覽器
82 選單鍵
85 播放/暫停
86 停止播放
87 播放下一首
88 播放上一首
122 移動游標到行首或列表頂部
123 移動游標到行末或列表底部
126 恢復播放
127 暫停播放
164 靜音
176 開啟系統設定
187 切換應用
207 開啟聯絡人
208 開啟日曆
209 開啟音樂
210 開啟計算器
220 降低螢幕亮度
221 提高螢幕亮度
223 系統休眠
224 點亮螢幕
231 開啟語音助手
276 如果沒有 wakelock 則讓系統休眠

2. input 命令的一些用法舉例

電源鍵
命令:

adb shell input keyevent 26

執行效果相當於按電源鍵。

選單鍵
命令:

  1. adb shell input keyevent 82

HOME 鍵
命令:

  1. adb shell input keyevent 3

返回鍵
命令:

  1. adb shell input keyevent 4

音量控制
增加音量:

  1. adb shell input keyevent 24

降低音量:

  1. adb shell input keyevent 25

靜音:

  1. adb shell input keyevent 164

媒體控制

播放/暫停:

  1. adb shell input keyevent 85

停止播放:

  1. adb shell input keyevent 86

播放下一首:

  1. adb shell input keyevent 87

播放上一首:

  1. adb shell input keyevent 88

恢復播放:

  1. adb shell input keyevent 126

暫停播放:

  1. adb shell input keyevent 127

點亮/熄滅螢幕

可以通過上文講述過的模擬電源鍵來切換點亮和熄滅螢幕,但如果明確地想要點亮或者熄滅螢幕,那可以使用如下方法。

點亮螢幕:

  1. adb shell input keyevent 224

熄滅螢幕:

  1. adb shell input keyevent 223

、使用python指令碼自動執行cmd 命令

1. 在adb資料夾下建立一個python檔案

  1. import os
  2. os.system('adb shell input tap 100 100');
執行指令碼,發現與在命令列輸入相同語句有同樣的效果。 2、也可以使用subprocess.Popen,最簡單使用方式如下,設定shell=True,就不會彈出cmd框 process = subprocess.Popen('adb shell input tap 14 1402',shell=True) 程式例項: #coding:utf-8 #程式功能:可以實現抖音個人頁面視訊的自動點選,從而自動增加訪問量 #思路:抖音主頁中兩個視訊切換點選,可以實現訪問量的增加 #使用ADB程式,視訊的螢幕座標可以使用adb shell uiautomator dump命令,獲取該頁面xml原始碼後查得 #下述是小米MIX2抖音主頁第一個視訊和第二個視訊的座標位置 #缺點:執行時不能移動螢幕,後續可以採用獲取模組ID號的方式去點選相應的位置 import time import subprocess i = 0 #每次操作的間隔時間取決於手機配置,配置越高時間越短 sleep_time = 0.5  while 1:         #用popen設定shell=True不會彈出cmd框         process = subprocess.Popen('adb shell input tap 14 1402',shell=True)         time.sleep(sleep_time)         process = subprocess.Popen('adb shell input keyevent KEYCODE_BACK', shell=True)         time.sleep(sleep_time)         process = subprocess.Popen('adb shell input tap 375 1402', shell=True)         time.sleep(sleep_time)         process = subprocess.Popen('adb shell input keyevent KEYCODE_BACK', shell=True)         time.sleep(sleep_time)        #os.system('adb shell input tap 14 1402')         #os.system('adb shell input keyevent KEYCODE_BACK')         #os.system('adb shell input tap 375 1402')         i+=1         print  str(i) + 'clicks have been completed'

實現原理

Hierarchy Viewer:獲得當前手機實時的UI資訊,方便用於手機的自動化測試;

python中的subprocess.Popen() 或 Python os模組:呼叫系統命令;

uiautomator工具:獲取介面控制元件資訊;

adb命令:對手機進行操作;

參考連結:https://github.com/mzlogin/awesome-adb