3、自动化测试环境搭建:配置Android SDK、安装TalkBack、开启无障碍服务
环境搭建这种事,说简单也简单,说复杂也复杂。我见过不少同学卡在SDK配置这一步,一卡就是半天。其实你只要理清楚三个核心环节:SDK工具链、被测试应用(TalkBack)、系统开关(无障碍服务)。这三样凑齐了,你的自动化脚本才算真正有了跑起来的土壤。
核心要点:搭建过程本质上是“工具→依赖→授权”的链条。顺序错了容易踩坑,后面我会讲我踩过的几个典型。
3.1 配置 Android SDK
SDK 配置是基础中的基础。说白了,没有 SDK,你的 adb、aapt、uiautomator 全用不了。我个人习惯用 Android Studio 自带的 SDK Manager 来管理,但如果你只想轻量化干活,单独下载命令行工具也够用。
步骤拆解
- 下载命令行工具:去 Android 开发者官网下载 command-line-tools,解压到某个目录,比如
C:\android-sdk或~/android-sdk。 - 使用 sdkmanager 安装必要包:
sdkmanager "platform-tools" "platforms;android-33" "build-tools;33.0.0"
为什么要装 android-33?因为我们测试的模拟器或真机大概率是 Android 13/14。你要是用 android-30 也不是不行,但部分无障碍新特性可能不全。
- 配置环境变量:
# Windows (加到系统变量)
ANDROID_HOME=C:\android-sdk
PATH=%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\cmdline-tools\latest\bin
# macOS / Linux
export ANDROID_HOME=$HOME/android-sdk
export PATH=$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/cmdline-tools/latest/bin
配置完后打开新终端,执行 adb --version,能看到版本号说明配置成功。
我曾经犯过的错:把 ANDROID_HOME 指向了 cmdline-tools 目录,结果 aapt 死活找不到。ANDROID_HOME 必须指向 SDK 根目录,而不是 bin 目录。你想想看,如果路径配错了,后面跑自动化脚本时会一直报“找不到资源”,排查起来很揪心。
3.2 安装 TalkBack
TalkBack 是 Google 官方的屏幕阅读器,也是我们无障碍UI测试的核心被测应用。安装它有两种方式:
| 方式 | 命令 / 操作 | 适用场景 |
|---|---|---|
| Play Store 安装 | 在 Android 设备上搜索“TalkBack”并安装 | 真机 / 带 Google 服务的模拟器 |
| APK 侧载 | adb install -r TalkBack.apk |
不带 Google 服务的 AOSP 模拟器 |
我的建议:优先用 Play Store 安装,因为版本更新及时。但如果你的模拟器是 AOSP 镜像(比如 Pixel Experience 的阉割版),那就只能侧载了。TalkBack 的 APK 可以从 APKMirror 下载,注意选 com.google.android.marvin.talkback,别下错了。
安装完成后,在应用列表里确认图标存在。你可以用 adb 查包名:
adb shell pm list packages | grep talkback
# 输出类似:package:com.google.android.marvin.talkback
嗯,看到这个包名就等于安装成功了。
3.3 开启无障碍服务
这一步最容易出幺蛾子。很多同学装完 TalkBack 就以为完了,结果跑脚本时发现 AccessibilityService 没绑定,所有节点抓取都返回空。为什么会这样?因为无障碍服务需要用户在系统设置里手动授权。
手动开启流程(真机或模拟器操作):
- 打开“设置” → “无障碍”(Accessibility)。
- 找到“TalkBack”并点击。
- 把开关打开,弹窗询问权限时点“允许”。
也可以用 adb 命令快速开启(Android 9+ 实测可行):
adb shell settings put secure enabled_accessibility_services com.google.android.marvin.talkback/com.google.android.marvin.talkback.TalkBackService
adb shell settings put secure accessibility_enabled 1
但注意,部分定制 ROM(比如 MIUI、ColorOS)可能会拦截这种 adb 设置,最后你不得不手动点。我在项目中遇到过几次小米手机,adb 改完后一重启又被还原了,后来只好写了个自动化脚本来模拟点击设置界面。
避坑指南:开启无障碍服务后,建议立刻重启一次设备。因为我曾遇到过服务虽然显示开启,但实际绑定线程没启动,uiautomator 抓到的节点里没有 TalkBack 的虚拟节点。重启后一切正常。你想想看,一个小重启能省半小时排查时间,值不值?
3.4 验证环境是否可用
环境搭好没有,用一个小脚本验证一下最踏实。我一般写个 Python 脚本用 uiautomator2 或 Appium 来检查无障碍树:
# 使用 uiautomator2(需要先 pip install uiautomator2)
import uiautomator2 as u2
device = u2.connect() # 默认连接第一个设备
print(device.info)
# 查看无障碍服务状态
print(device.service("accessibility").running)
如果输出 True,并且你能通过 device(text="按钮名").click 等操作正常交互,说明环境搭建完毕。
最后画个总结图放在心里:SDK 提供工具 → TalkBack 提供被测服务 → 无障碍开关提供运行时授权,三者缺一不可。我每次搭建新环境都会走一遍这个流程,不出意外的话 15 分钟搞定。