2. 开发环境搭建:Android Studio、插件、依赖与设备
做 Compose UI 测试,第一步就是把“家伙事儿”备齐。我个人折腾过好几轮环境配置,今天直接给你一套稳妥的方案。踩过的坑我都会标出来,你跟着走就行。
2.1 Android Studio 配置 —— 选对版本,少走弯路
Android Studio 官方从 Hedgehog 版本开始正式主推 Compose。我建议你用 2023.1.1 或更新的版本。为什么?因为我吃过老版本的亏——有些 Compose 预览和测试注解在旧版里压根不识别。
配置要点就这几项:
| 配置项 | 推荐值 | 备注 |
|---|---|---|
| AGP (Android Gradle Plugin) | 8.2+ | 与 Gradle 8.4+ 配合 |
| JDK | 17 | AS 内置了 JDK 11,必须手动切到 17 |
| compileSdk | 34 | 至少 33 以上 |
| minSdk | 24 | UI 测试需要 API 24+ |
打开 File → Project Structure → SDK Location,把 Gradle JDK 改成 Embedded JDK version 17。如果你用 OpenJDK,记得配 JAVA_HOME。
⚠️ 千万别用 AGP 7.x + Gradle 7.x 去搞 Compose 测试。AGP 8.0 以后依赖解析机制变了,老配置会报“Unknown configuration”错误。我公司一个遗留项目就卡了两天。
2.2 Compose 插件 —— 版本匹配是命门
Compose 的编译器插件跟 Kotlin 版本绑定得很死。说白了,你 Kotlin 升一个补丁号,插件版本就得跟着调整。官网有一个版本映射表,但我给你整理成最常用的几个组合:
| Kotlin 版本 | Compose Compiler 版本 | 备注 |
|---|---|---|
| 1.9.22 | 1.5.10 | 推荐组合,稳定 |
| 2.0.0 | 1.6.0 | K2 编译器支持,实验性 |
| 2.0.20 | 1.6.1 | 当前最新稳定 |
如果你想用 Compose BOM,那就更省心。BOM 会帮你锁定所有 Compose 库的版本。我个人习惯在 libs.versions.toml 里统一管理。
// build.gradle.kts (模块级)
plugins {
id("org.jetbrains.kotlin.android") version "1.9.22"
id("org.jetbrains.kotlin.plugin.compose") version "1.9.22" // Compose 编译器插件
}
android {
buildFeatures {
compose = true
}
}
dependencies {
implementation(compose.material3)
implementation(compose.ui)
implementation(compose.foundation)
// ……其他
}
✅ 小窍门:Kotlin 2.0 之后,Compose 编译器从 composeOptions 迁移到了独立的 Gradle 插件。如果你还在用 composeOptions { kotlinCompilerExtensionVersion },记得迁移。
2.3 测试依赖引入 —— 别漏了核心三件套
UI 测试依赖其实就那么几个。你需要加上 Junit 4、Compose UI Test 库,以及 Google 的 Test Rules。嗯,这里要注意:compose-ui-test 和 ui-test-junit4 缺一不可。
// build.gradle.kts (模块级)
dependencies {
// 基础测试框架
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
// Compose UI 测试核心
androidTestImplementation("androidx.compose.ui:ui-test-junit4:1.6.0")
// 调试辅助(可选但推荐)
debugImplementation("androidx.compose.ui:ui-tooling:1.6.0")
debugImplementation("androidx.compose.ui:ui-test-manifest:1.6.0")
// 如果你用 MockK 或 Mockito
androidTestImplementation("io.mockk:mockk-android:1.13.9")
}
我有一次漏了 ui-test-manifest,结果测试一直报 "ActivityNotFoundException"。这个 debug 依赖会帮你自动注册测试用的 Activity,千万别忘。
2.4 模拟器与真机设置
Compose UI 测试需要在 Android 上运行(Instrumented Test),所以本地必须有一个可用的设备。你可以在模拟器或真机上跑。
模拟器推荐配置
- API Level 33 或 34(低版本可能缺 Compose 系统字体)
- 系统镜像:Google APIs 或 Google Play(后者带 Play Store)
- 分辨率:1080×1920,dp 411×731(与大多数真机一致)
- RAM:2GB+(推荐 4GB)
用命令行创建模拟器其实更快:
avdmanager create avd -n test_device -k "system-images;android-34;google_apis;x86_64" -d pixel_6_pro
真机注意事项
- 开启 开发者选项 和 USB 调试
- 连接电脑后允许授权 RSA 指纹
- 确保电脑能识别:
adb devices出现设备号 - 建议开启 「保持唤醒」,防止测试中途锁屏
⚠️ 我曾经在真机上跑测试,半天跑不过——原来是华为手机的「监控 USB 安装」开关默认是关的。某些国产 ROM 还有「禁止权限弹窗」的变态限制。查一下你的系统设置有没有类似选项。
2.5 验证环境是否搭好
写一个最简单的测试试试水。新建一个测试类,放在 src/androidTest/java/ 目录下。
// SimpleComposeTest.kt
@RunWith(AndroidJUnit4::class)
class SimpleComposeTest {
@get:Rule
val composeTestRule = createAndroidComposeRule<MainActivity>()
@Test
fun testHelloWorld() {
composeTestRule.onNodeWithText("Hello, Compose!").assertIsDisplayed()
}
}
右键运行,如果绿色通过,恭喜你——环境搞定了。
🔧 dev 环境常见报错速查:
- Missing compose compiler → 确认 Kotlin 插件和 compose 插件版本匹配
- ClassNotFoundException: Activity → 检查
ui-test-manifest是否加了 debugImplementation - No tests found → 检查测试类是否在 androidTest 源集里