網(wǎng)站訪問者qq山東工藝美術(shù)學(xué)院網(wǎng)站建設(shè)公司
手機(jī)app如何跳過無障礙權(quán)限實(shí)現(xiàn)彈框自動(dòng)點(diǎn)擊
--ADB連接專題
- 一、前言
我們?cè)谇捌诘臅r(shí)候,在雙SIM卡進(jìn)行協(xié)同外呼和SIM卡切換時(shí),對(duì)如何在手機(jī)中“執(zhí)行批處理腳本做自動(dòng)點(diǎn)擊”的內(nèi)容進(jìn)行預(yù)研,力圖使用事件觸發(fā)和坐標(biāo)點(diǎn)擊等方式來實(shí)現(xiàn)手機(jī)安裝的App對(duì)手機(jī)運(yùn)行過程的其它應(yīng)用或系統(tǒng)彈出框等預(yù)設(shè)界面進(jìn)行自動(dòng)確認(rèn)操作。
詳情可以會(huì)看筆者之前編寫的上述三篇文章,如下:
《藍(lán)牙電話-如何自動(dòng)切換手機(jī)SIM卡》
《藍(lán)牙電話-如何設(shè)置雙SIM卡自動(dòng)切換策略》
《手機(jī)實(shí)時(shí)提取SIM卡打電話的信令聲音-智能撥號(hào)器的雙SIM卡切換方案》
對(duì)于【智能撥號(hào)器App】而言,在應(yīng)用運(yùn)行過程中會(huì)涉及藍(lán)牙配對(duì)、應(yīng)用彈出權(quán)限授權(quán)框、插入U(xiǎn)SB藍(lán)牙時(shí)需要手動(dòng)點(diǎn)擊確認(rèn)等系統(tǒng)內(nèi)置的界面彈出框。其實(shí)一直以來,我們都在思考,有沒有什么辦法能不需要認(rèn)為進(jìn)行操作,系統(tǒng)或應(yīng)用App能夠自動(dòng)檢測(cè)出彈出的系統(tǒng)界面,并自動(dòng)點(diǎn)擊進(jìn)行授權(quán)和確認(rèn)?
在之前的方案中,我們發(fā)現(xiàn)可以在應(yīng)用中通過開啟【無障礙功能】的方式,來實(shí)現(xiàn)自動(dòng)觸發(fā)點(diǎn)擊坐標(biāo)的事件。這樣的話,可以在應(yīng)用運(yùn)行過程中,根據(jù)業(yè)務(wù)場景和實(shí)際需要,預(yù)先錄制一個(gè)腳本,獲取對(duì)應(yīng)事件觸發(fā)的界面,并點(diǎn)擊界面的某些坐標(biāo)或某些按鈕,使應(yīng)用的業(yè)務(wù)能夠自動(dòng)化的進(jìn)行操作。
但是由于【無障礙功能】開啟和授權(quán)的方式,要求應(yīng)用每次啟動(dòng)運(yùn)行的時(shí)候,都要手動(dòng)再次彈一遍框然后再授一次無障礙的權(quán)限,有些還要倒計(jì)時(shí)8秒才能點(diǎn)擊確認(rèn)。非常的繁瑣和反人類,簡直就無法作為應(yīng)用的正常附屬功能來使用。(只能用于專有設(shè)備的專有功能進(jìn)行特定場景下使用)
在做這個(gè)功能和業(yè)務(wù)探索時(shí),我們也在這個(gè)范圍之外思考:到底有沒有辦法,不使用無障礙這種雞肋的功能,卻又能實(shí)現(xiàn)手機(jī)彈框自動(dòng)點(diǎn)擊呢?
這個(gè)就是本篇章內(nèi)容編寫的由來,也是本系列《ADB連接專題》中的第四個(gè)篇章,關(guān)注過我的讀者應(yīng)該也能猜到,我們這么寫那肯定是有辦法的,在這里我們將花費(fèi)幾個(gè)章節(jié)的內(nèi)容,對(duì)“手機(jī)app如何繞過無障礙權(quán)限實(shí)現(xiàn)彈框自動(dòng)點(diǎn)擊”的能力進(jìn)行詳細(xì)的闡述。
- 二、重新了解ADB連接
ADB(Android Debug Bridge)是一個(gè)命令行工具,它允許您與連接的Android設(shè)備或模擬器進(jìn)行通信。通過ADB,您可以安裝和調(diào)試應(yīng)用,提供對(duì)各種設(shè)備操作的訪問,如安裝和調(diào)試應(yīng)用,并提供了對(duì)各種設(shè)備操作的訪問。
adb協(xié)議是一種基于文本的通信協(xié)議,它使用Socket進(jìn)行數(shù)據(jù)傳輸,通過USB連接或網(wǎng)絡(luò)連接(如TCP/IP)在客戶端(通常是計(jì)算機(jī))和服務(wù)端(Android設(shè)備上的adb守護(hù)進(jìn)程)之間建立連接。adb協(xié)議提供了一套豐富的命令,使開發(fā)者能夠方便地執(zhí)行各種操作,如安裝應(yīng)用、調(diào)試、查看日志等。
adb協(xié)議的主要功能
?設(shè)備連接與管理?:列出已連接的Android設(shè)備,進(jìn)行設(shè)備識(shí)別和管理。
?應(yīng)用安裝與卸載?:通過adb命令可以安裝和卸載Android設(shè)備上的應(yīng)用。
?文件傳輸?:實(shí)現(xiàn)計(jì)算機(jī)與Android設(shè)備之間的文件傳輸,包括上傳和下載。
?設(shè)備調(diào)試?:提供對(duì)Android設(shè)備的實(shí)時(shí)調(diào)試功能,如查看日志、執(zhí)行shell命令等。
?性能測(cè)試?:獲取Android設(shè)備的性能數(shù)據(jù),如CPU占用率、內(nèi)存占用率等,用于性能分析和優(yōu)化。
adb協(xié)議的工作流程大致如下:
?啟動(dòng)ADB Server?:在PC端啟動(dòng)ADB Server,它監(jiān)聽5037端口等待Client連接。
?Client發(fā)起請(qǐng)求?:開發(fā)者通過ADB Client(命令行工具或腳本)向ADB Server發(fā)起請(qǐng)求。
?Server處理請(qǐng)求?:ADB Server接收請(qǐng)求后,根據(jù)請(qǐng)求類型(Host Service或Local Service)進(jìn)行處理。
對(duì)于Host Service,如adb devices,ADB Server直接返回結(jié)果。
對(duì)于Local Service,如adb shell,ADB Server將請(qǐng)求轉(zhuǎn)發(fā)到目標(biāo)設(shè)備的ADB Daemon。
?Daemon執(zhí)行操作?:ADB Daemon在Android設(shè)備上執(zhí)行具體的操作,并將結(jié)果返回給ADB Server。
?返回結(jié)果給Client?:ADB Server將執(zhí)行結(jié)果返回給ADB Client,開發(fā)者在命令行界面查看結(jié)果。
(以上內(nèi)容,摘選自某搜索引擎中檢索的結(jié)果)
- 三、應(yīng)用App如何連接手機(jī)自身的ADB
從前面的篇章《ADB連接專題-本地手機(jī)如何被遠(yuǎn)程訪問和文件上傳下載操作》中,我們獲知到:所有的ADB連接數(shù)據(jù),都是通過TCP來傳輸?shù)?#xff0c;并且都在一個(gè)TCP連接中進(jìn)行傳輸。
那么問題來了,我不做遠(yuǎn)程傳輸,能不能由手機(jī)內(nèi)的App做ADB客戶端,自己連接ADB-Server的5555端口呢?當(dāng)然可以。
(遠(yuǎn)程ADB橋接本質(zhì)上就是把App自己當(dāng)做ADB客戶端的遠(yuǎn)程代理來中繼遠(yuǎn)程ADB客戶端的TCP數(shù)據(jù)。既然遠(yuǎn)程ADB中繼能正常工作,那么本地自己實(shí)現(xiàn)ADB客戶端也完全沒問題)
這樣,我們就通過Java層的Android應(yīng)用,簡單的實(shí)現(xiàn)了ADB協(xié)議中客戶端的內(nèi)容,就可以直接通過ADB向手機(jī)發(fā)送操作指令,用來實(shí)現(xiàn)本篇章中預(yù)期的“手機(jī)app如何繞過無障礙權(quán)限實(shí)現(xiàn)彈框自動(dòng)點(diǎn)擊”的能力,根本不需要什么【無障礙功能】的權(quán)限。
- 四、ADB客戶端常見的界面操作方式
通常,使用ADB自動(dòng)化操作Android設(shè)備常用的有兩種做法:
1)使用uiautomatorviewer工具(在Android SDK的tools文件夾中)來查看和獲取界面元素的UI層級(jí)信息。示例代碼如下:
adb shell uiautomator text "ButtonText" click
2)使用input tap坐標(biāo)來對(duì)界面坐標(biāo)所在位置進(jìn)行點(diǎn)擊。示例代碼如下:
adb shell input tap x y
界面坐標(biāo)所在的位置,可通過截圖后用【畫圖】工具打開后移動(dòng)到對(duì)于按鈕位置來查看坐標(biāo)X和Y的值,填寫替換【adb shell input tap x y】的x和y的值即可。如下圖所示:
圖中,若想使用input tap來點(diǎn)擊“乘車碼”這個(gè)圖標(biāo),只需要在界面截圖中找到其相對(duì)于屏幕左上角的坐標(biāo)位置(602, 1300)像素,然后在ADB命令中觸發(fā)下述命令即可:
adb shell input tap 602?1300
- 五、應(yīng)用App需要做什么
與遠(yuǎn)程ADB中繼的做法類似,操作人員需要開啟開發(fā)者模式并插入U(xiǎn)SB調(diào)試線后運(yùn)行adb tcpip 5555,將ADB端口映射為本地的5555端口。
應(yīng)用App需要在本地建立一個(gè)TCP客戶端并連接到該5555端口上,并實(shí)現(xiàn)ADB協(xié)議的客戶端部分的邏輯。
實(shí)現(xiàn)完成了之后,即可在應(yīng)用App中執(zhí)行上面章節(jié)中列舉的ADB命令,來對(duì)手機(jī)進(jìn)行界面和數(shù)據(jù)操作。這些內(nèi)容不會(huì)像【無障礙功能】這種,需要額外的彈框授權(quán)就可以正常運(yùn)行,甚至我們開拓這個(gè)自動(dòng)化點(diǎn)擊的功能,有些時(shí)候就是為了去自動(dòng)點(diǎn)擊系統(tǒng)彈出的授權(quán)框而開發(fā)的。
一切操作的初始,僅僅只需要在手機(jī)重啟了之后,做一下adb tcpip 5555而已,操作復(fù)雜度完全可以接受。
- 六、小結(jié)
我們?cè)凇禔DB連接專題》系列文章中,對(duì)手機(jī)本身的ADB功能進(jìn)行了一系列深入的挖掘,在本篇章中,我們著重的探討了“手機(jī)app如何繞過無障礙權(quán)限實(shí)現(xiàn)彈框自動(dòng)點(diǎn)擊”的能力。
實(shí)踐發(fā)現(xiàn),只要換個(gè)思路,世界的打開方式就完全不同,我們所有的操作和預(yù)期功能都能夠有非常簡潔清晰的途徑去實(shí)現(xiàn)。
上一篇:如何跨互聯(lián)網(wǎng)adb連接到遠(yuǎn)程手機(jī)
下一篇:編寫中。