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,省很多事。
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 插件会报错
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 以上才要求官方规范输出格式。
android {
compileSdk 34
defaultConfig {
minSdk 21
targetSdk 34
}
}
2.6 整体依赖关系一览
下面这张图帮你理清整个开发环境中各组件的关系:嗯,一目了然。
2.7 避坑流程总结
- 先定 AGP 版本 → 再选匹配的 Gradle 版本(对照上面的表)
- 确定 Kotlin 版本 → 建议 1.8.10 或 1.9.0,别太激进
- 写 CameraX 依赖 → 统一用
def camerax_version管理 - 检查 compileSdk / targetSdk / minSdk → 至少 34 / 34 / 21
- Sync 项目 → 看看有没有版本冲突的警告
等你跑通第一次预览,就知道这些配置花的时间值。我自己第一次配的时候,因为没注意 JDK 版本(AGP 8.2 需要 JDK 17),硬是卡了俩小时……所以这里我再补一句:JDK 最好用 JDK 17,在 File → Project Structure → SDK Location → JDK 里设置。
androidx.camera:camera-camera2:1.3.1+ 这种带加号的写法!依赖解析会不定时“升级”推出新版本,导致同事间复现不了你的 bug。版本号必须写死。