前言
ADB,即 Android Debug Bridge (安卓調試橋)。它就是一個命令行窗口,用於通過電腦端與模擬器或者真機設備進行交互。
對於Android開發和測試人員來說,它都是不可替代的強大工具。所以今天,我們將跟同學們一起來聊一聊一些常用的ADB操作和Airtest給我們封裝好的一些ADB接口。
一些使用ADB命令的場景
作為一名測試人員,相信大家對使用ADB的場景都不陌生了。比如在做真機或者模擬器測試之前,我們常用 adb devices 命令去查看被測設備是否已經跟我們的電腦建立了連接:
>>> adb devices
List of devices attached
PFT4PBLF75GQHYBM device
emulator-5554 device
再比如,我們在使用Airtest進行測試自動化時,經常遇到ADB版本沖突的報錯:
raise AdbError(stdout, stderr)
airtest.core.error.AdbError: stdout[] stderr[adb server version (36) doesn't match this client (40); killing...
could not read ok from ADB Server
而我們不清楚電腦里面那么多ADB,究竟哪些是40版本,哪些是36版本時,我們就可以使用 adb version 查看當前的ADB版本,然后將電腦里面所有的ADB替換成同一個版本,從而解決這個版本沖突的問題:
>>> adb version
Android Debug Bridge version 1.0.40
Version 4986621
Installed as C:\Users\xiaojuan\adb.exe
常用的ADB操作及使用示例
當然,除了上面已經提到的查詢已連接的設備/模擬器命令 adb devices, 和查看ADB版本的命令adb version ,ADB操作可以做的事情還非常多:
1.應用管理
1)查看應用列表
# 查看設備上的所有應用
adb shell pm list packages
# 查看設備上的第三方應用
adb shell pm list packages -3
# 查看設備上的系統應用
adb shell pm list packages -s
2)安裝APK
adb install "D:/demo/tutorial-blackjack-release-signed.apk"
3)卸載應用
adb uninstall com.netease.cloudmusic
4)查看應用詳細信息
adb shell dumpsys package com.netease.cloudmusic
2.文件管理
1)復制設備里的文件到電腦
# adb pull <設備里的文件路徑> [電腦上的目錄]
adb pull /sdcard/sr.mp4 ~/tmp/
2)復制電腦里的文件到設備
# adb push <電腦上的文件路徑> <設備里的目錄>
adb push ~/sr.mp4 /sdcard/
3.模擬按鍵輸入
1)模擬電源鍵: adb shell input keyevent 26
2)模擬HOME鍵: adb shell input keyevent 3
3)模擬返回鍵: adb shell input keyevent 4
4)點亮/熄滅屏幕:
# 點亮屏幕
adb shell input keyevent 224
# 熄滅屏幕
adb shell input keyevent 223
5)模擬滑動解鎖
# 300 1000 300 500 分別表示起始點x坐標 起始點y坐標 結束點x坐標 結束點y坐標
adb shell input swipe 300 1000 300 500
6)輸入文本
adb shell input text airtest
4.查看設備信息
1)查看設備型號
>>> adb -s PFT4PBLF75GQHYBM shell getprop ro.product.model
OPPO A83
2)查看屏幕分辨率
>>> adb -s PFT4PBLF75GQHYBM shell wm size
Physical size: 720x1440
3)查看Android系統版本
>>> adb -s PFT4PBLF75GQHYBM shell getprop ro.build.version.release
7.1.1
5.更多ADB命令詳解
想了解更多詳細的ADB操作的同學,我們推薦大家閱讀這篇GitHub文檔:https://github.com/mzlogin/awesome-adb 。
Airtest封裝好的ADB接口及使用示例
在Airtest庫中,大部分的ADB操作我們已經幫大家封裝好了,所以同學們可以不用再單獨去執行ADB命令。
舉個簡單的例子,利用Airtest封裝好的ADB接口打印設備序列號和設備所有的第三方應用:

可以看到,我們只需要調用一些封裝好的airtest接口,即可替代完整的ADB命令,另外在log查看窗的運行日志中,我們還可以看到這個接口實際執行的ADB命令:
# android.get_default_device()對應的ADB命令
adb.exe devices
# android.list_app(third_only=True)對應的ADB命令
adb.exe -s PFT4PBLF75GQHYBM shell pm list packages -3
另外Airtest還有很多常用的封裝好的ADB接口:
1)返回應用的完整路徑:path_app()
android = Android()
android.path_app("com.netease.cloudmusic")
2)檢查應用是否存在於當前設備上:check_app()
android = Android()
android.check_app("com.netease.cloudmusic")
3)停止應用運行:stop_app()
stop_app("com.netease.cloudmusic")
# 啟動應用:start_app()
start_app("com.netease.cloudmusic")
# 清除應用數據:clear_app()
clear_app("com.netease.cloudmusic")
4)安裝應用:install_app()
install(r"D:\demo\tutorial-blackjack-release-signed.apk")
# 卸載應用:uninstall_app()
uninstall("org.cocos2dx.javascript")
5)關鍵詞操作:keyevent()
keyevent("HOME")
keyevent("POWER")
6)喚醒設備:wake()
wake()
7)返回HOME:home()
home()
8)文本輸入:text()
text("123")
9)檢查屏幕是否打開:is_screenon()
android = Android()
android.is_screenon()
10)檢查設備是否鎖定:is_locked()
android = Android()
android.is_locked()
11)獲取當前設備的分辨率:get_current_resolution()
android = Android()
android.get_current_resolution()
12)其它adb shell命令:shell()
shell("ls")
shell("pm list packages -3")

實際上,airtest的 shell() ,就是幫忙補充了 adb -s 手機序列號 shell 這一部分,后面的內容同學們就按正常shell指令來傳就行了。
13)更多Airtest封裝好的ADB接口介紹
若同學們需要了解更多詳細的Airtest封裝好的ADB接口介紹,可以到你本地的Airtest庫里面查找這個文件查看:airtest/core/android/android.py 。
AirtestProject官方答疑Q群:654700783
Airtest官網:http://airtest.netease.com/
Airtest教程官網:https://airtest.doc.io.netease.com/
搭建企業私有雲服務:https://airlab.163.com/b2b
呀,這么認真都看到這里啦,幫忙點個推薦支持一下唄,灰常感謝~
