2. 开发环境搭建:Android Studio、插件、依赖与设备

做 Compose UI 测试,第一步就是把“家伙事儿”备齐。我个人折腾过好几轮环境配置,今天直接给你一套稳妥的方案。踩过的坑我都会标出来,你跟着走就行。

开发环境搭建 · 核心节点 Android Studio 配置 Compose 插件安装 测试依赖引入 设备设置 版本 ≥ Hedgehog SDK 33+ / JDK 17 Compose 插件 v1.5+ Kotlin 插件匹配 compose-ui-test ui-test-junit4 模拟器 API 33+ 真机开启 USB调试 💡 避坑:插件与 Kotlin 版本必须严格对应,否则编译直接挂 推荐使用 Gradle Version Catalog 管理所有依赖版本

2.1 Android Studio 配置 —— 选对版本,少走弯路

Android Studio 官方从 Hedgehog 版本开始正式主推 Compose。我建议你用 2023.1.1 或更新的版本。为什么?因为我吃过老版本的亏——有些 Compose 预览和测试注解在旧版里压根不识别。

配置要点就这几项:

配置项推荐值备注
AGP (Android Gradle Plugin)8.2+与 Gradle 8.4+ 配合
JDK17AS 内置了 JDK 11,必须手动切到 17
compileSdk34至少 33 以上
minSdk24UI 测试需要 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.221.5.10推荐组合,稳定
2.0.01.6.0K2 编译器支持,实验性
2.0.201.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

真机注意事项

  1. 开启 开发者选项 和 USB 调试
  2. 连接电脑后允许授权 RSA 指纹
  3. 确保电脑能识别:adb devices 出现设备号
  4. 建议开启 「保持唤醒」,防止测试中途锁屏

⚠️ 我曾经在真机上跑测试,半天跑不过——原来是华为手机的「监控 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 源集里