adbutils 实战指南:半小时上手 Python 控制安卓设备的自动化脚本
adbutils 实战指南半小时上手 Python 控制安卓设备的自动化脚本【免费下载链接】adbutilspure python adb library for google adb service.项目地址: https://gitcode.com/gh_mirrors/ad/adbutils周五下班前领导丢来一句话明天这批测试机每台都要装上新版 App再把首页截图收集上来。 数了数桌上的设备——八台真机加两台模拟器。要是用传统 adb 命令一台台敲光是安装和截图就能耗掉一个下午。这时候你需要的是一个能写在脚本里、循环跑完所有设备的 Python ADB 库adbutils。它是 Google ADB 服务的纯 Python 实现把 连设备、装应用、传文件、截图录屏、模拟输入 全部收进几十个直观 API 里让繁琐的重复操作变成几行循环代码。第一步装好 adbutils 运行环境两种途径任选先记住这一条就够用了adbutils 本质是一个普通 Python 包安装方式和其他库没有区别。途径一pip 一行命令装完最省事的方式直接交给包管理器pip3 install adbutils如果你后续要用到完整功能比如命令行生成二维码、通过 HTTP 解析远程 APK就装上带全部可选依赖的版本pip3 install adbutils[all]途径二从源码安装方便改代码想研究源码或贡献代码的人可以克隆到本地再以开发模式安装git clone https://gitcode.com/gh_mirrors/ad/adbutils cd adbutils pip3 install -e .小提示-e是 editable 模式改完源码立刻生效不用重复安装。本库要求 Python 3.8 及以上。第二步把手机连上来本地与远程一视同仁安装只是热身真正的流程从拿到一个设备对象开始。所谓设备对象就是后续所有操作的主语——你叫它d之后d.xxx()就代表在这台手机上做 xxx。列出当前所有设备from adbutils import adb for device in adb.device_list(): print(f发现设备: {device.serial}) # 串号相当于手机的身份证# 只有一台设备时连串号都不用传 d adb.device() # 多台设备时必须指定串号否则会直接报错 d adb.device(serial33ff22xx)连接远程/网络设备无线调试、云测机、局域网设备都走这一步adb.connect(192.168.1.100:5555) # 等价于 adb connect adb.wait_for(192.168.1.100:5555, statedevice, timeout10) # 最长等 10 秒直到设备上线易踩的坑adb.connect()只负责发起连接不代表设备已就绪。建议连接后立刻wait_for确认状态脚本才不容易半路翻车。第三步开始干活——装应用、查应用、卸应用设备到手先解决领导最着急的装 App任务。adbutils 的安装接口既吃本地文件也吃网络地址# 装本地 APK d.install(build/app-release.apk) # 装远程 APK适合 CI 里直接从制品库拉包 d.install(http://example.com/app.apk)配合卸载和查询一个完整的换版本流程就出来了d.uninstall(com.example.app) # 卸载旧版 d.install(build/app-release.apk) # 装新版 d.list_packages() # 列出所有已安装包确认装没装上真实场景加分项批量给多台设备装包只需套一层循环——这正是把 adbutils 写进自动化脚本的意义所在。第四步传文件——一条 push 一句 pullApp 装完接下来要把测试配置、数据文件分发到每台设备再把设备上的日志和截图收回来。文件传输走d.sync对象# 本地 - 设备 d.sync.push(config.json, /sdcard/atx/config.json) # 设备 - 本地 d.sync.pull(/sdcard/crash.log, crash_33ff22xx.log)# 需要边下边处理大文件用迭代器逐块读取 for chunk in d.sync.iter_content(/sdcard/bigfile.bin): write_chunk(chunk)小提示pull会把远端文件拉到当前目录多设备时给文件名拼上串号如上避免互相覆盖。第五步拿结果——截图、录屏、模拟输入领导要求的首页截图就是这里了。adbutils 的截图接口是高频操作值得单独记住d.screenshot(home_33ff22xx.jpg) # 保存到本地一步到位需要录一段操作过程留档用录屏接口设置好时长自动停止d.screenrecord(demo.mp4, duration10) # 录 10 秒自动停说明录屏底层会根据环境自动选择 scrcpy 或 adb 原生方案你只需调用统一接口。光截图还不够自动化里经常要替手指点屏幕。两个最常用的模拟输入接口d.send_keys(Hello, adbutils!) # 向当前输入框发送文本 d.keyevent(HOME) # 按下系统键HOME/BACK/MENU 都支持 d.open_browser(https://example.com) # 直接唤起默认浏览器打开网址易踩的坑send_keys只能发文本中文或特殊符号在部分设备上会丢字符需要复杂输入时建议配合 shell 层做兜底。第六步处理翻车——超时、异常与通用 shell 兜底脚本写得再顺也架不住设备抽风。adbutils 的异常体系很干净顶层异常是AdbError超时有独立的AdbTimeout接住即可from adbutils import AdbError try: d.shell(sleep 1, timeout0.5) # 故意设很短模拟慢命令 except AdbError as e: print(f操作失败: {e})另外凡是库里没有封装的命令都可以用d.shell(...)直接打进设备执行——它是万能兜底output d.shell(getprop ro.product.model) # 查设备型号 print(output.strip())需要拿到退出码和完整 stdout/stderr 时用d.shell2(...)会更顺手。附不写代码也能用——命令行快照如果只是临时看一眼python -m adbutils自带全套命令行无需编程想做的事命令查看 ADB 服务版本python -m adbutils -V列出已连接设备及型号python -m adbutils -l安装 APK本地或 URLpython -m adbutils -i app.apk列出已安装包python -m adbutils --list-packages手机截图python -m adbutils --screenshot screen.jpg推送文件python -m adbutils --push local.txt:/sdcard/remote.txt拉取文件python -m adbutils --pull /sdcard/remote.txt实时监控设备状态变化python -m adbutils --track调优三件套环境变量控制全局行为多设备、多环境跑自动化时靠环境变量就能省掉一半传参ADBUTILS_ADB_PATH指定 adb 可执行文件路径系统里装了几个 adb 也不怕认错ANDROID_SERIAL设置默认设备串号之后adb.device()直接命中这台ANDROID_ADB_SERVER_PORT指定 ADB 服务端口默认 5037多服务并存时很有用相关资料想深入某个细节可以顺着这些路径直接读源码与文档设备操作核心实现adbutils/_device.pyADB 协议细节docs/PROTOCOL.md文件同步测试示例e2etests/test_device_sync.py回头再看开头那个场景装包、传配置、截图、收日志全流程用 adbutils 写成一个脚本循环跑完十分钟收工。这份 adbutils 安装教程只是起点把它接进你的自动化脚本里下一批设备再也不会占用你的下班时间。【免费下载链接】adbutilspure python adb library for google adb service.项目地址: https://gitcode.com/gh_mirrors/ad/adbutils创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考