Android 测试环境搭建:把地基打牢

说实话,做 Android 测试最怕的不是用例写不好,而是环境配完跑不起来。我见过太多同事在环境搭建上浪费了两三天,结果发现是 JDK 版本不对。今天我就把这一整套流程拆开揉碎了讲,保证你跟着走一遍就能跑通第一个测试用例。

1. JDK — 一切的基础

Android 开发离不开 Java,测试也一样。JDK 版本选不对,后面 Gradle 和 Android SDK 全得罢工。我的建议是:直接上 JDK 11。虽然 JDK 8 也能用,但 Gradle 7.0 以后官方明确推荐 JDK 11。我自己踩过坑:项目里用了 JDK 8,结果跑 AndroidX Test 时某些 API 报 class not found,换成 JDK 11 就解决了。

小提示:用 java -version 检查当前版本。如果系统里装了多个 JDK,把 JAVA_HOME 环境变量指到 JDK 11 的根目录。我习惯在 ~/.bashrc 或 ~/.zshrc 里写死,省得每次切项目手动改。
# 查看当前 JDK 版本
java -version

# 设置 JAVA_HOME(macOS/Linux 示例)
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH

2. Gradle — 构建系统的灵魂

Gradle 版本要跟 Android Gradle Plugin(AGP)版本匹配。这里有个经验:用项目自带的 Gradle Wrapper。也就是说,别自己手动装全局 Gradle,让项目根目录的 gradle/wrapper/gradle-wrapper.properties 来决定版本。你想想看,团队里每个人装不同版本,build 结果都可能不一样,那多烦人。

举个例子,AndroidX Test 框架一般要求 AGP 7.0+,对应 Gradle 7.0+。我会在项目里先确认这个文件:

# gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
注意:如果 Gradle 版本太低,运行 ./gradlew test 时可能会报 "Unsupported class file major version" 的错误。那就是 JDK 和 Gradle 版本冲突了。我曾有一次花了一下午排查,最后发现是 Gradle 6.8 不支持 JDK 11 的某些特性。

3. Android SDK — 核心工具箱

Android SDK 里最重要的就是 build-tools、platforms 和 platform-tools(包含 adb)。我建议你通过 Android Studio 的 SDK Manager 来安装,手动下载容易漏东西。但如果你在 CI 或者不想装 AS,也可以直接用 sdkmanager 命令行工具。

下面这张图可以帮助你理解这几个组件的关系:

Android 测试环境搭建 — 核心组件与流程 JDK 11 Gradle + Android Gradle Plugin Android SDK build-tools platforms platform-tools 模拟器 (AVD) 真机 (USB/Wi-Fi) 云端设备 (Firebase Test Lab) 🏁 执行 AndroidX Test 并查看报告

安装完成后,记得设置 ANDROID_HOME 环境变量,并加到 PATH 里:

# 设置 ANDROID_HOME(示例路径,请根据实际情况修改)
export ANDROID_HOME=/Users/你的用户名/Library/Android/sdk
export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH

4. 模拟器 vs 真机 — 怎么选?

这个问题几乎每次培训都有人问。我的看法很简单:开发阶段用模拟器,回归测试用真机,CI 里用云端。但具体到 AndroidX Test,有些场景模拟器反而更快:比如跑单元测试和集成测试时,模拟器启动快、可以随时快照恢复。真机适合做 UI 自动化测试,特别是涉及传感器、NFC、多指触控的场景。

下面这个表格是我自己总结的对比,你直接参考:

对比维度 模拟器 真机
启动速度 快(10秒内) 慢(需等待系–统启动)
硬件模拟 有限(传感器需配合) 真实(蓝牙、GPS等)
快照/恢复 支持(测试场景快速重置) 不支持或需第三方工具
适合的测试类型 单元测试、集成测试、UI 回归 UI 自动化、性能、兼容性
维护成本 低(一个 AVD 搞定多版本) 高(需购买、充电、USB 连接)

一个典型流程建议:

  1. 本地用模拟器跑 ./gradlew test(纯单元测试,无需设备)
  2. 启动模拟器跑 ./gradlew connectedAndroidTest(需要 AVD 运行)
  3. 提交 PR 前,在真机或者 Firebase Test Lab 上跑一遍完整回归

5. 模拟器加速——让测试飞起来

模拟器慢?大概率是没开硬件加速。我见过太多人跑模拟器卡成幻灯片,其实只要安装 HAXM 或者 WHPX(Windows)就好。在 Android Studio 里通过 SDK Manager 安装 Intel x86 Emulator Accelerator (HAXM installer),然后运行一下安装脚本:

# macOS/Linux
sudo $ANDROID_HOME/extras/intel/Hardware_Accelerated_Execution_Manager/silent_install.sh

# Windows(以管理员身份运行)
%ANDROID_HOME%\extras\intel\Hardware_Accelerated_Execution_Manager\intelhaxm-android.exe

安装后,在创建 AVD 时选择 x86 或 x86_64 镜像,然后勾选 "Use Host GPU"。启动后你感受一下——嗯,这才是该有的速度。

小技巧:如果你用 macOS M1/M2 芯片,模拟器天然就快,不需要 HAXM。直接用 ARM64 镜像,启动速度甚至比部分真机还快。我自己的 MacBook Pro M1 上跑 Instrumentation 测试,平均每个用例快 30%。

6. 真机环境配置要点

用真机做 AndroidX Test 其实就三步:

  • 打开开发者选项:连续点击「版本号」7 次
  • 开启 USB 调试 & 保持唤醒(充电时不休眠)
  • 用 adb devices 确认设备识别正常
# 检查设备连接
adb devices
# 输出示例:
# List of devices attached
# emulator-5554   device   (模拟器)
# 0123456789ABCDEF device   (真机)

# 如果真机显示 "unauthorized",请解锁手机并勾选 "允许 USB 调试"

避坑指南:我曾经在不同项目间切换时,adb 版本冲突导致连不上真机。解决办法是用统一版本的 platform-tools,不要从两个 SDK 目录里混着用。建议只维护一个 ANDROID_HOME,所有项目都引用同一个。

7. 验证环境是否就绪

配置完别急着写测试代码,先跑两条命令验证:

# 1. 确认 JDK 版本
java -version

# 2. 确认 Android SDK 能找到
echo $ANDROID_HOME

# 3. 确认 adb 能工作
adb version

# 4. 确认 Gradle Wrapper 能运行
./gradlew --version

如果以上全部正常输出,说明环境已经搭好了。这时候你就可以放心地导入 AndroidX Test 依赖,开始写你的第一个 Instrumentation 测试了。记住:环境稳了,问题就少了一半。