2、开发环境搭建:Android Studio、Gradle依赖与版本选择

说实话,开发环境搭得好,后面少掉一半坑。尤其是 CameraX 这种涉及底层相机管线的库,版本稍微对不上,预览黑屏、启动崩溃都是家常便饭。我这些年踩过的坑,几乎一半都跟 Gradle 版本冲突有关。咱们一步步来,把地基打稳。

2.1 Android Studio 版本选择

我个人习惯用最新的稳定版 Android Studio。为什么?因为 CameraX 的 lint 检查和 AGP(Android Gradle Plugin)兼容性通常会第一时间在新版 AS 里修复。比如 2024 年底到现在,我推荐 Android Studio Hedgehog (2023.1.1) 或更高版本。

  • 旧版 AS(如 Dolphin)在 Gradle Sync 时容易报 “instantiating configuration” 的警告,虽然能跑,但查问题很头疼。
  • AS 的 Embedded Provisioned API 在 CameraX 的模拟器预览中也有差异——新版 AS 的模拟器直接支持 CameraX Test Harness,省很多事。
小提示: 如果你团队里有人用稳定版、有人用 Canary 版,记得在 gradle-wrapper.properties 里统一 Gradle 版本,否则 AS 会自说自话下载不同版本导致诡异报错。

2.2 Gradle 与 Android Gradle Plugin(AGP)版本匹配

这是最让人头大的地方。Gradle 和 AGP 必须一一对应,稍有不慎就会出现 Unsupported class file major version 或者 Failed to notify project evaluation listener。我有一张“保命表”,建议你直接复制保存:

AGP 版本 所需最低 Gradle 版本 备注
8.0.x 8.0 常用稳定版,推荐
8.1.x 8.1 支持 Kotlin 1.9 以上
8.2.x 8.2 CameraX 1.3+ 建议搭配
8.3.x 8.4 最新,但需 JDK 17+

举个例子:如果你用 AGP 8.2.2,Gradle 至少得是 8.2。我曾在项目里把 Gradle 拉到 8.5 但 AGP 还是 8.2,结果打包时所有 Transform 都报错……排查了半天才发现是版本错位。

关键文件: 在项目根目录的 gradle-wrapper.properties 里指定 Gradle 版本:
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-all.zip
同时 build.gradle(Project 级别)里指定 AGP:
buildscript {
    dependencies {
        classpath 'com.android.tools.build:gradle:8.2.2'
    }
}

2.3 Kotlin 版本与 Jetpack 兼容性

CameraX 是 Jetpack 家族的成员,它对 Kotlin 编译器的版本有硬性要求。我个人建议 Kotlin 1.8.10 或 1.9.0。太高了可能会跟 Compose Compiler 冲突,太低了直接编译不过。

  • CameraX 1.2.x:推荐 Kotlin 1.7+
  • CameraX 1.3.x:推荐 Kotlin 1.8+ 或 1.9+
  • Kotlin 1.9.20 及以上:注意要配合 AGP 8.2+,否则 KSP 插件会报错
⚠️ 我曾经踩过的坑: 把 Kotlin 从 1.8.10 升级到 2.0.0 Beta,结果 Kotlin Coroutines 的 Flow.flatMapMerge 行为变了,导致 CameraX 的连续帧回调卡死。所以……稳字当头,别追太急。

2.4 CameraX 依赖声明:版本与模块选择

在 build.gradle(Module 级别)里添加 CameraX 的依赖。这里要注意,CameraX 是 Jetpack 库,版本号统一从 androidx.camera:camera-core 带出来。我习惯用逗号分隔多个模块:

dependencies {
    def camerax_version = "1.3.1"
    implementation "androidx.camera:camera-core:${camerax_version}"
    implementation "androidx.camera:camera-camera2:${camerax_version}"
    implementation "androidx.camera:camera-lifecycle:${camerax_version}"
    implementation "androidx.camera:camera-view:${camerax_version}"
}

各模块的作用你心里要有数:

模块名 作用
camera-core 核心 API,必选
camera-camera2 底层 Camera2 实现,必选
camera-lifecycle 绑定 Lifecycle,自动启动/停止预览
camera-view 提供 PreviewView 控件,方便 UI 集成
camera-extensions 厂商扩展(美颜、HDR 等),非必需

如果你只需要预览和拍照,camera-core + camera-camera2 + camera-view 就够了。别一股脑全加进去,APK 体积会膨胀。

2.5 compileSdk / targetSdk / minSdk 要求

CameraX 1.3.x 要求 compileSdk ≥ 33,minSdk ≥ 21。targetSdk 建议直接上 33 或 34,否则一些权限(如 POST_NOTIFICATIONS)会降级。我在一个已经上线的 app 里曾经把 targetSdk 设成 28,结果 CameraX 的 ImageAnalysis 回调永远拿不到 YUV_420_888 的帧——因为 Android 11 以上才要求官方规范输出格式。

推荐配置(build.gradle Module 级别):
android {
    compileSdk 34
    defaultConfig {
        minSdk 21
        targetSdk 34
    }
}

2.6 整体依赖关系一览

下面这张图帮你理清整个开发环境中各组件的关系:嗯,一目了然。

CameraX 开发环境依赖关系 Android Studio Gradle + AGP Kotlin 编译器 CameraX 依赖块 compileSdk/minSdk Android 设备/模拟器 版本匹配是重点:Gradle↔AGP↔Kotlin↔CameraX 环环相扣,一个不匹配就是黑屏或编译失败

2.7 避坑流程总结

  1. 先定 AGP 版本 → 再选匹配的 Gradle 版本(对照上面的表)
  2. 确定 Kotlin 版本 → 建议 1.8.10 或 1.9.0,别太激进
  3. 写 CameraX 依赖 → 统一用 def camerax_version 管理
  4. 检查 compileSdk / targetSdk / minSdk → 至少 34 / 34 / 21
  5. Sync 项目 → 看看有没有版本冲突的警告

等你跑通第一次预览,就知道这些配置花的时间值。我自己第一次配的时候,因为没注意 JDK 版本(AGP 8.2 需要 JDK 17),硬是卡了俩小时……所以这里我再补一句:JDK 最好用 JDK 17,在 File → Project Structure → SDK Location → JDK 里设置。

⚠️ 最后一个提醒: 别用 androidx.camera:camera-camera2:1.3.1+ 这种带加号的写法!依赖解析会不定时“升级”推出新版本,导致同事间复现不了你的 bug。版本号必须写死。