乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      一篇清晰易懂的Python操控手機APP攻略!

       測試開發(fā)技術 2022-06-18 發(fā)布于廣東

      優(yōu)質(zhì)文章,第一時間送達!

      近期推文:

      獻給即將35歲的初學者,焦慮 or 出路?

      互聯(lián)網(wǎng)人必備:推薦4款爬蟲抓包神器

      閱讀全文大概需要 9 分鐘。

      最近由于一直處于在家遠程辦公狀態(tài),新的一年,很多公司、部門事情要處理,比較忙,公號原創(chuàng)文的創(chuàng)作速度明顯減慢!親愛的讀者們,你們都等著急了吧。

      最近經(jīng)??吹皆S多公號在推一些Python操作手機App自動化的文章,例如自動刷抖音、玩釣魚之類的。而這些Android自動化項目無一例外都需要部署ADB環(huán)境。至于什么是ADB,網(wǎng)上很容易可以檢索一堆介紹(包括在我即將上市的新書中也會單獨有一小節(jié)介紹ADB原理和常用操作),如果正在文的你,是自動化新手,對ADB還不了解。

      不妨可以先通過官方的介紹,了解一下ADB是什么,這里我就不過多介紹了。

      https://developer.android.google.cn/studio/command-line/adb

      為了使沒有安卓開發(fā)經(jīng)驗的人也能快速學會用Python操作手機App,我從Android SDK部署、ADB基礎應用、Python操作手機等方面入手寫了這篇文章,當然也不會寫的太詳細,重點還是使大家對ADB的使用有一個直觀的認識,這樣大家在玩Android App自動化項目時也會更輕松一些。

      PS: 本文涉及的各類操作可能有多種實現(xiàn)方法,我只會提及其中一種,而且采取的方法可能并不是最優(yōu)的方法。

      1. Android SDK下載和配置

      說起Android SDK工具,那還真是不少,有SDK Tools、SDK、Platform-tools等等,這里我推薦SDK Tools,進入https://www./這個網(wǎng)站點擊Android SDK工具菜單,找到下圖中的界面,選擇自己對應的系統(tǒng)版本(zip版)下載。(比如此處我的是使用Mac版)

      將下載后的文件解壓縮,如下圖所示。

      接著就是配置環(huán)境變量了,把android-sdk目錄下的platform-tools和tools文件夾添加到系統(tǒng)變量中,這一步屬于常規(guī)操作,我就不再演示了。

      執(zhí)行完以上步驟,ADB環(huán)境就算配置完畢了,之后如果手機是通過USB連接電腦的,需要先開啟手機的開發(fā)者選項、開啟USB調(diào)試、然后用USB線將手機跟電腦連接。當然,也可以通過WIFI連接。

      ADB WIFI連接方法:

      • 手機與電腦用數(shù)據(jù)線連接,打開命令行窗口,執(zhí)行:

      adb tcpid 5555
      • 斷開數(shù)據(jù)線連接,執(zhí)行:

       adb connect xxx.xxx.xxx.xxx(手機ip)

      PS: 至于如何查看手機IP,我相信我公號讀者都知道的,就不再介紹了。

      本文以夜神模擬器作為被操作設備,啟動夜神模擬器后,如下所示。

      輸入adb devices查看設備列表。如果提示類似這種的錯誤信息:

      adb server version (36) doesn't match this client (40); killing...,

      說明當前adb server與adb client版本不匹配所致。解決方法也很簡單:統(tǒng)一adb版本號即可,如將sdk下面的adb拷貝一份到夜神模擬器相應的目錄下。

      解決上述問題后,重新獲取設備列表。

      ?  adb devicesList of devices attached127.0.0.1:62001  device

      2. ADB的一些基本操作

      雖說是基本操作,但ADB的命令也還是挺多的,說多了大家一時也難以消化。所以我這里只列舉幾個操作手機APP常用的指令,都是一些基本的操作。

      1).顯示所有包名

      adb shell pm list packages

      這個指令會羅列出手機已經(jīng)安裝的所有應用包的名稱,如果后綴加上參數(shù)-s,則會列出所有的系統(tǒng)應用的名稱,而加上后綴參數(shù)-3則會列出所有第三方應用名稱,如下:

      ? adb shell pm list package -3package:io.appium.settingspackage:com.example.android.contactmanagerpackage:com.kugou.android

      2).顯示活動程序

      adb shell dumpsys activity activities

      這個指令能夠獲取到當前手機系統(tǒng)中正在運行的程序包的名稱,例如打開模擬器中已安裝的酷狗音樂App,運行上述指令就會獲取到下述信息:

      ?  ~ adb shell dumpsys activity activities    Running activities (most recent first):      TaskRecord{4a9fe700 #2 A=android.task.kugou U=0 sz=1}        Run #0: ActivityRecord{4a96e0c8 u0 com.kugou.android/.app.MediaActivity t2}
      mResumedActivity: ActivityRecord{4a96e0c8 u0 com.kugou.android/.app.MediaActivity t2} mLastPausedActivity: ActivityRecord{4a921424 u0 com.kugou.android/.app.splash.SplashActivity t2 f}
      mFocusedActivity: ActivityRecord{4a96e0c8 u0 com.kugou.android/.app.MediaActivity t2} mDismissKeyguardOnNextActivity=false mFocusedStack=ActivityStack{4a9e1488 stackId=1, 1 tasks} mStackState=STACK_STATE_HOME_IN_BACK
      Recent tasks: * Recent #0: TaskRecord{4a9fe700 #2 A=android.task.kugou U=0 sz=1} numActivities=1 rootWasReset=true userId=0 mTaskType=0 numFullscreen=1 mOnTopOfHome=true affinity=android.task.kugou intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.kugou.android/.app.splash.SplashActivity} realActivity=com.kugou.android/.app.splash.SplashActivity Activities=[ActivityRecord{4a96e0c8 u0 com.kugou.android/.app.MediaActivity t2}] askedCompatMode=false lastThumbnail=null lastDescription=null    lastActiveTime=446142 (inactive for 13s)

      上述信息被刪除了一部分,其中realActivity后面的參數(shù)就是當前正在運行的Activity名稱,稍微留意一下就會發(fā)現(xiàn),這個名稱相比上面的包名稱要更加詳細一些,實際在獲取當前運行活動的App包名和Activity名方法還有很多種,比如:

      adb shell dumpsys activity | grep mFocusedActivity

      至于這個名稱有什么用,我們馬上就會提到。

      3).啟動應用程序

      adb shell am start -n 要啟動的應用Activity名稱

      這里所使用的Activity名稱就是剛才獲取到的realActivity后面的參數(shù),使用這個指令時要注意,啟動APP一定要使用上一條命令獲取到的Activity名稱,不能使用adb shell pm list packages命令獲取到的包名稱。例如,我們?nèi)绻獑涌峁芬魳罚梢允褂妹睿?/span>

      adb shell am start -n com.kugou.android/.app.splash.SplashActivity

      如無意外,執(zhí)行上述命令后,你會聽到“Hello 酷狗” 熟悉的聲音。

      而如果使用了下面這條命令是無法順利啟動應用的:

      adb shell am start -n com.kugou.android


      4).停止應用程序

      adb shell am force-stop 要停止的應用名稱

      這條指令會強制停止指定的應用程序,跟程序的啟動略有差別,在停止應用時,使用adb shell pm list packages命令獲取到的包名稱就可以了。還是以小米的游戲中心為例,停止應用使用以下指令:

      adb shell am force-stop com.kugou.android

      5).點擊指定位置

      adb shell input tap x y

      這條指令就很好理解了,模擬點擊手機屏幕中的某個位置,(x,y)是對應的位置坐標。在ADB中默認手機屏幕的左上角坐標是(0,0),右下角坐標是(x-max,y-max)。

      6).滑動手機屏幕

      adb shell input swipe x_start y_start x_end y_end

      這條指令的本質(zhì)是使得坐標為(x_start, y_start)的點移動到(x_end, y_end)的坐標位置,以此來實現(xiàn)屏幕滑動的效果。

      7).輸入文字信息

      adb shell input text 需要輸入的字符

      這條指令沒什么好說明的,選定對應位置,然后輸入對應的字符即可。

      8).模擬手機按鍵

      adb shell input keyevent code

      現(xiàn)在的大部分手機除了常規(guī)鍵盤字符以外還有一些特殊按鍵,例如HOME鍵、音量+/-,以及軟鍵盤中有時會出現(xiàn)的確認鍵等等,這些按鍵的模擬就可以通過上面這條指令來實現(xiàn)。

      其中code對應的是特殊鍵的編號,下面舉幾個常用的例子(其他的特殊鍵還有很多):

      • 3對應的是HOME鍵

      • 24對應的是音量+

      • 25對應的是音量-

      • 66對應的是確認鍵

      • 4對應返回鍵

      • 26對應電源鍵

      • 84對應搜索鍵

      KeyEvent官方文檔可見:

      https://developer.android.google.cn/reference/android/view/KeyEvent

      9).獲取元素位置

      細心的朋友現(xiàn)在可能會發(fā)現(xiàn),上面提到的一些關于模擬點擊、模擬輸入的命令,都涉及到手機元素定位的問題,那么我們在實踐中如何確定具體的坐標位置和元素信息呢?如果是Android端,這里一般建議使用uiautomatorviewer這個工具,它會隨著SDK Tools一起安裝,就在tools目錄下。

      來看下面這幅圖,手機連接成功后,點擊左上角的綠色圖標就會獲取到手機的當前頁面信息,然后在屏幕左側(cè)可以點選任意位置或者元素,相關信息會在右側(cè)屏幕中顯示。

      是不是感覺跟用chrome分析網(wǎng)頁非常類似,有了這些信息,再使用上面提到的幾款指令操作手機就不是問題了。

      如果上述命令你覺得介紹的還不夠多,不妨繼續(xù)看看ADB官方文檔介紹。

      https://developer.android.google.cn/studio/command-line/adb?hl=zh_cn

      3. Python操作手機App

      通常來講,如果我們單純想通過ADB命令來操控手機,一般建議借助Python腳本使其批量化、自動化運行。

      Python執(zhí)行終端指令可以借助os.system()函數(shù),我們來看下面這段代碼:

      ```pythondef execute(cmd):  adb_str="adb shell {}".format(cmd)  print(adb_str)  os.system(adb_str)
      if __name__ == '__main__': execute("am start -n com.kugou.android/.app.splash.SplashActivity") time.sleep(3) execute("input tap 263 515") ```

      當然上面這段代碼實際上并沒有任何意義,主要是為了給大家簡單演示一下。

      4. 最后

      今天的文章講到的都是ADB的入門級操作,可能有一些自動化基礎的人會說,我平常都不屑直接用ADB這種小命令,如果需要實現(xiàn)自動化,都是直接搬出像Appium、Airtest這類型的框架。

      但其實在Android系,任何的第三方開源或商業(yè)自動化框架,本質(zhì)上在驅(qū)動連接手機這塊,都離不開ADB。而如果不懂ADB很多跟安卓App相關的實踐更沒辦法實現(xiàn)下去,但是僅僅學會這些還不足以實現(xiàn)一個像樣的自動化控制腳本,想要學習更牛逼的操作,可持續(xù)關注本公眾號(或者關注筆者即將上市的新書)。

        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多