Python腳本利用adb進(jìn)行手機(jī)控制的方法
一. adb 相關(guān)命令:
1. 關(guān)閉adb服務(wù):adb kill-server
2. 啟動(dòng)adb服務(wù) adb start-server
3. 查詢當(dāng)前運(yùn)行的所有設(shè)備 adb devices
4. 可能在adb中存在多個(gè)虛擬設(shè)備運(yùn)行 可以指定虛擬設(shè)備運(yùn)行 -s 虛擬設(shè)備名稱
5. 重啟設(shè)備 adb reboot --指定虛擬設(shè)備 adb -s 設(shè)備名稱 reboot
6. 查看日志 adb logcat 清除日志 adb logcat -c
7. 進(jìn)入linux shell下 adb shell 其中常用的linux命令 cd cat 等等 輸入su可以獲取超級(jí)管理員名稱了 要確定是否有哪些命令 進(jìn)入 system/bin目錄 就知道了
8. 傳入文件到設(shè)備中 adb push 本地文件 遠(yuǎn)程目錄
9. 從設(shè)備中拷貝文件到本地 adb -s emulator-5556 pull /data/config.ini d:/
10. 顯示當(dāng)前運(yùn)行的全部模擬器:
adb devices
1 安裝應(yīng)用程序:
adb install -r 123.apk
12. 獲取模擬器中的文件:
adb pull <remote> <local>
13. 向模擬器中寫(xiě)文件:
adb push <local> <remote>
14. 進(jìn)入模擬器的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. 刪除系統(tǒng)應(yīng)用:
adb remount (重新掛載系統(tǒng)分區(qū),使系統(tǒng)分區(qū)重新可寫(xiě))。
adb shell
cd system/app
rm 123.apk
18. 獲取管理員權(quán)限:
adb root
19、復(fù)制文件:
復(fù)制一個(gè)文件或目錄到設(shè)備:
adb push <source> <destination></destination></source>
如:adb push update.zip /sdcard/
從設(shè)備上復(fù)制一個(gè)文件或目錄:
adb pull <source> <destination></destination></source>
如:adb pull /sdcard/update.zip.
20、取得當(dāng)前運(yùn)行設(shè)備的實(shí)例的列表及每個(gè)實(shí)例的狀態(tài):
adb devices
21:adb shell input tap
這條命令模擬Android手機(jī)在屏幕坐標(biāo)(X,Y)處進(jìn)行了點(diǎn)擊操作。
22:adb shell input swipe
這條命令模擬Android手機(jī)從屏幕坐標(biāo)(X1,Y1)滑動(dòng)到坐標(biāo)(X2,Y2)的操作。
23、uiautomator dump dump: creates an XML dump of current UI hierarchy 這個(gè)命令是用來(lái)成成當(dāng)前界面的UI層次,并用XML格式進(jìn)行展示 。這樣就可以獲取各個(gè)組件的位置了
注:如果PC要想同時(shí)控制多臺(tái)Android手機(jī),必須在adb 后面添加-s
例如:adb -s 13b6e4c4 shell input tap 400 400
表示對(duì)13b6e4c4這臺(tái)Android手機(jī)進(jìn)行在屏幕上(400,400)坐標(biāo)位置進(jìn)行模擬的點(diǎn)擊事件。
24. 能看到設(shè)備信息就代表設(shè)備已經(jīng)連接成功了,接下來(lái)的命令就是adb install 路徑+包名.apk
例如我的安裝包放在桌面,那么命令就是adb install C:\Users\hyh\Desktop\XXX.apk
*** adb shell uiautomator dump /mnt/sdcard/window_dump.xml 獲得手機(jī)當(dāng)前界面的UI信息,生成window_dump.xml
*** adb shell input text “123” 輸入text
舉例:
1、打開(kāi)cmd,進(jìn)入到當(dāng)前文件夾中,輸入命令 adb devices 查看當(dāng)前與電腦連接的設(shè)備(前提是,手機(jī)打開(kāi)usb調(diào)試模式),可以查看已連接成功的手機(jī)。
2、 若手機(jī)成功連接,輸入命令 adb shell input tap 100 100 , 表示點(diǎn)擊屏幕上坐標(biāo)為(100,100)的點(diǎn),如果不知道需要點(diǎn)擊的點(diǎn)的具體位置的話可以在手機(jī)開(kāi)發(fā)者模式中設(shè)置。
二. adb 模擬按鍵:
1. 比如使用 adb shell input keyevent <keycode> 命令,不同的 keycode 能實(shí)現(xiàn)不同的功能,完整的 keycode 列表詳見(jiàn) KeyEvent,摘引部分我覺(jué)得有意思的如下:
keycode | 含義 |
---|---|
3 | HOME 鍵 |
4 | 返回鍵 |
5 | 打開(kāi)撥號(hào)應(yīng)用 |
6 | 掛斷電話 |
24 | 增加音量 |
25 | 降低音量 |
26 | 電源鍵 |
27 | 拍照(需要在相機(jī)應(yīng)用里) |
64 | 打開(kāi)瀏覽器 |
82 | 菜單鍵 |
85 | 播放/暫停 |
86 | 停止播放 |
87 | 播放下一首 |
88 | 播放上一首 |
122 | 移動(dòng)光標(biāo)到行首或列表頂部 |
123 | 移動(dòng)光標(biāo)到行末或列表底部 |
126 | 恢復(fù)播放 |
127 | 暫停播放 |
164 | 靜音 |
176 | 打開(kāi)系統(tǒng)設(shè)置 |
187 | 切換應(yīng)用 |
207 | 打開(kāi)聯(lián)系人 |
208 | 打開(kāi)日歷 |
209 | 打開(kāi)音樂(lè) |
210 | 打開(kāi)計(jì)算器 |
220 | 降低屏幕亮度 |
221 | 提高屏幕亮度 |
223 | 系統(tǒng)休眠 |
224 | 點(diǎn)亮屏幕 |
231 | 打開(kāi)語(yǔ)音助手 |
276 | 如果沒(méi)有 wakelock 則讓系統(tǒng)休眠 |
2. input 命令的一些用法舉例
電源鍵
命令:
adb shell input keyevent 26
執(zhí)行效果相當(dāng)于按電源鍵。
菜單鍵
命令:
adb shell input keyevent 82
HOME 鍵
命令:
adb shell input keyevent 3
返回鍵
命令:
adb shell input keyevent 4
音量控制
增加音量:
adb shell input keyevent 24
降低音量:
adb shell input keyevent 25
靜音:
adb shell input keyevent 164
媒體控制
播放/暫停:
adb shell input keyevent 85
停止播放:
adb shell input keyevent 86
播放下一首:
adb shell input keyevent 87
播放上一首:
adb shell input keyevent 88
恢復(fù)播放:
adb shell input keyevent 126
暫停播放:
adb shell input keyevent 127
點(diǎn)亮/熄滅屏幕
可以通過(guò)上文講述過(guò)的模擬電源鍵來(lái)切換點(diǎn)亮和熄滅屏幕,但如果明確地想要點(diǎn)亮或者熄滅屏幕,那可以使用如下方法。
點(diǎn)亮屏幕:
adb shell input keyevent 224
熄滅屏幕:
adb shell input keyevent 223
三、使用python腳本自動(dòng)運(yùn)行cmd 命令
在adb文件夾下建立一個(gè)python文件
import os os.system('adb shell input tap 100 100');
運(yùn)行腳本,發(fā)現(xiàn)與在命令行輸入相同語(yǔ)句有同樣的效果。
2、也可以使用subprocess.Popen,最簡(jiǎn)單使用方式如下,設(shè)置shell=True,就不會(huì)彈出cmd框
process = subprocess.Popen('adb shell input tap 14 1402',shell=True)
程序?qū)嵗?nbsp;
#coding:utf-8 #程序功能:可以實(shí)現(xiàn)抖音個(gè)人頁(yè)面視頻的自動(dòng)點(diǎn)擊,從而自動(dòng)增加訪問(wèn)量 #思路:抖音主頁(yè)中兩個(gè)視頻切換點(diǎn)擊,可以實(shí)現(xiàn)訪問(wèn)量的增加 #使用ADB程序,視頻的屏幕坐標(biāo)可以使用adb shell uiautomator dump命令,獲取該頁(yè)面xml源碼后查得 #下述是小米MIX2抖音主頁(yè)第一個(gè)視頻和第二個(gè)視頻的坐標(biāo)位置 #缺點(diǎn):運(yùn)行時(shí)不能移動(dòng)屏幕,后續(xù)可以采用獲取模塊ID號(hào)的方式去點(diǎn)擊相應(yīng)的位置 import time import subprocess i = 0 #每次操作的間隔時(shí)間取決于手機(jī)配置,配置越高時(shí)間越短 sleep_time = 0.5 while 1: #用popen設(shè)置shell=True不會(huì)彈出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'
實(shí)現(xiàn)原理
Hierarchy Viewer:獲得當(dāng)前手機(jī)實(shí)時(shí)的UI信息,方便用于手機(jī)的自動(dòng)化測(cè)試;
python中的subprocess.Popen() 或 Python os模塊:調(diào)用系統(tǒng)命令;
uiautomator工具:獲取界面控件信息;
adb命令:對(duì)手機(jī)進(jìn)行操作;
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Pytorch測(cè)試神經(jīng)網(wǎng)絡(luò)時(shí)出現(xiàn) RuntimeError:的解決方案
這篇文章主要介紹了Pytorch測(cè)試神經(jīng)網(wǎng)絡(luò)時(shí)出現(xiàn) RuntimeError:的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05python下載文件時(shí)顯示下載進(jìn)度的方法
這篇文章主要介紹了python下載文件時(shí)顯示下載進(jìn)度的方法,涉及Python文件操作的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04Python內(nèi)置數(shù)據(jù)類型list各方法的性能測(cè)試過(guò)程解析
這篇文章主要介紹了Python內(nèi)置數(shù)據(jù)類型list各方法的性能測(cè)試過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01Pandas時(shí)間序列:時(shí)期(period)及其算術(shù)運(yùn)算詳解
今天小編就為大家分享一篇Pandas時(shí)間序列:時(shí)期(period)及其算術(shù)運(yùn)算詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02Python實(shí)現(xiàn)快速查找并替換Excel中的數(shù)據(jù)
Excel中的查找替換是一個(gè)非常實(shí)用的功能,能夠幫助用戶快速完成大量數(shù)據(jù)的整理和處理工作,避免手動(dòng)逐一修改數(shù)據(jù)的麻煩,提高工作效率,所以本文給大家介紹了Python實(shí)現(xiàn)快速查找并替換Excel中的數(shù)據(jù),需要的朋友可以參考下2024-06-06python GUI實(shí)現(xiàn)小球滿屏亂跑效果
這篇文章主要為大家詳細(xì)介紹了python GUI實(shí)現(xiàn)小球滿屏亂跑效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05關(guān)于Python下的Matlab函數(shù)對(duì)應(yīng)關(guān)系(Numpy)
這篇文章主要介紹了關(guān)于Python下的Matlab函數(shù)對(duì)應(yīng)關(guān)系(Numpy),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07pytorch MSELoss計(jì)算平均的實(shí)現(xiàn)方法
這篇文章主要介紹了pytorch MSELoss計(jì)算平均的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-05-05