第1章 迁移环境搭建与工具链准备

从 Room 迁移到 DataStore 的第一步,不是修改一行代码,而是搭建一套干净、版本对齐的构建环境。环境混乱会导致依赖冲突、API 不可用、运行时崩溃三大问题,后续 29 章的所有实操都将建立在当前这一章的工具链基础上。本章的目标是:在你本地 IDE 中复现一份经过验证的、可直接启动迁移工作的环境清单。

1.1 环境总览

下表列出迁移工程所需的全部工具及推荐版本。版本号以 2025 年初稳定版为准,后续章节的代码示例均在此版本组合下验证通过。

组件推荐版本最低版本作用域
Android StudioLadybug (2024.2.1)Hedgehog (2023.1.1)IDE / AGP 管理
JDK17.0.12 LTS17.0.0编译与 Gradle 守护进程
Gradle8.98.5构建系统
AGP (Android Gradle Plugin)8.5.28.3.0Android 构建
Kotlin1.9.241.9.10语言 / KSP 支持
DataStore-Preferences1.1.11.0.0键值存储迁移目标
Room (作为源)2.6.12.5.2现有数据库(迁移起点)
版本对齐原则:AGP 8.x 要求 JDK 17+;Gradle 8.5+ 要求 Kotlin 1.9.10+。如果从旧版本升级,请先升级 JDK,再依次升级 Gradle 和 AGP,最后调整 Kotlin 插件版本。逆序升级极易触发Unsupported class file major version错误。

1.2 Android Studio 与 JDK 配置

Android Studio Ladybug 内置了 JDK 17,但仍建议显式指定项目 JDK 路径,避免因 IDE 升级导致默认 JDK 回退。

# Windows 局部变量(可选,用于命令行编译)
set JAVA_HOME=C:\Program Files\Android\Android Studio\jbr

# macOS / Linux
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"

在 gradle.properties 中锁定守护进程的 JDK 版本:

# 强制 Gradle 使用 JDK 17
org.gradle.java.home=/Applications/Android Studio.app/Contents/jbr/Contents/Home

验证 JDK 版本是否生效:

./gradlew -version

输出示例中应包含 JVM: 17.0.12 字样。如果显示 11.0.x 或 1.8.x,说明 JAVA_HOME 或 gradle.properties 配置未生效,需要检查路径是否正确。

1.3 Gradle 与 AGP 配置

在项目根目录的 settings.gradle.kts 中声明依赖仓库和插件版本目录:

// settings.gradle.kts
pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}
rootProject.name = "RoomToDataStore"

在根 build.gradle.kts 中声明 AGP 和 Kotlin 插件版本:

// 根 build.gradle.kts
plugins {
    id("com.android.application") version "8.5.2" apply false
    id("org.jetbrains.kotlin.android") version "1.9.24" apply false
    id("com.google.devtools.ksp") version "1.9.24-1.0.20" apply false
}
⚠️ 常见错误:AGP 与 Gradle 版本不匹配是迁移项目中最常见的构建失败原因。Gradle 8.9 搭配 AGP 8.5.2 是经过验证的组合;不要使用 AGP 8.6+ 搭配 Gradle 8.9,后者需要 Gradle 8.10+。版本对照表请参考 AGP 兼容性矩阵。

1.4 DataStore 依赖声明

在模块级 app/build.gradle.kts 中添加 DataStore 依赖。同时保留 Room 依赖作为迁移源,通过 ksp 处理 Room 注解。

// app/build.gradle.kts
plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("com.google.devtools.ksp")
}

android {
    namespace = "com.example.roomtodatastore"
    compileSdk = 34
    defaultConfig {
        applicationId = "com.example.roomtodatastore"
        minSdk = 24
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget = "17"
    }
}

dependencies {
    // ── Room(迁移源) ──
    implementation("androidx.room:room-runtime:2.6.1")
    implementation("androidx.room:room-ktx:2.6.1")
    ksp("androidx.room:room-compiler:2.6.1")

    // ── DataStore(迁移目标) ──
    implementation("androidx.datastore:datastore-preferences:1.1.1")

    // ── 可选:DataStore 纯文件存储(用于自定义序列化) ──
    // implementation("androidx.datastore:datastore-core:1.1.1")

    // ── 协程(DataStore 异步读写依赖) ──
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0")
}

同步完成后,在 Android Studio 的 Gradle 面板中展开 app → Tasks → other,双击 dependencies 查看依赖树,确认 datastore-preferences 和 room-runtime 均存在且版本正确。

✅ 环境验证清单:
  1. ./gradlew -version 输出 JVM 17.0.12+
  2. AGP 8.5.2 + Gradle 8.9 组合无版本警告
  3. dependencies 任务输出中包含 datastore-preferences:1.1.1 和 room-runtime:2.6.1
  4. KSP 注解处理器正常工作(编译时无 SymbolProcessingException)
  5. Android Studio 无红标 import 错误

1.5 工具链架构与数据流关系

下图展示了从 Room 迁移到 DataStore 过程中,各工具组件之间的依赖关系以及数据流向。理解这一架构有助于后续章节定位问题边界。

迁移工具链架构与数据流 迁移工具链架构与数据流 Android Studio Ladybug JDK 17 LTS Gradle 8.9 AGP 8.5.2 app/build.gradle.kts KSP · Room 2.6.1 · DataStore 1.1.1 📦 Room Database SQLite · DAO · Entity 📁 DataStore Preferences 键值对 · 异步 · 协程 迁移路径 虚线表示运行时依赖,实线表示构建时依赖;迁移路径从 Room 指向 DataStore,二者可在同一工程共存
架构要点:
  • 模块边界:Room 和 DataStore 在依赖层面互不排斥,可以同时声明在同一模块中。迁移期间二者共存,逐块替换。
  • 数据流方向:生产者(业务层)通过 Repository 向 Room 写入数据,迁移时仅需将 Repository 的实现指向 DataStore,上层无需感知。
  • 工具链分层:IDE (Android Studio) → 构建系统 (Gradle/AGP) → 模块脚本 (build.gradle.kts) → 运行时库 (Room/DataStore)。问题排查按此分层自顶向下。

1.6 常见环境错误与修复

错误现象根因修复措施
Unsupported class file major version 65JDK 版本 > 17 但 AGP 过低使用 JDK 17,或升级 AGP 到 8.5+
Cannot inline bytecode built with JVM target 1.8Kotlin jvmTarget 与 JDK 不一致统一设置 jvmTarget = "17"
No matching variant of androidx.datastore:datastore-preferencesDataStore 版本与 compileSdk 不匹配确保 compileSdk ≥ 34,DataStore ≥ 1.1.1
KSP SymbolProcessingException: RoomProcessorKSP 版本与 Kotlin 版本不兼容使用 1.9.24-1.0.20 匹配 Kotlin 1.9.24
⚠️ 最容易忽视的点:在 settings.gradle.kts 中遗漏 google() 仓库会导致 DataStore 依赖下载失败,因为 androidx.datastore 系列仅托管在 Google Maven 中。Maven Central 中没有该构件。

1.7 验证环境

执行以下命令一次性检查构建完整性:

# 清理缓存并重新编译
./gradlew clean assembleDebug

# 如果编译成功,且控制台无 "datastore" 或 "room" 相关红色错误,
# 则环境搭建完成,可以进入第 2 章:数据模型分析与迁移策略制定。