1. 项目初始化与环境搭建

本章是《Compose UI与WorkManager状态联动实战》的起点,目标是搭建一个同时集成Jetpack Compose(声明式UI)和WorkManager(后台任务调度)的Android项目环境。正确的项目初始化与依赖配置是后续所有实践的基础,直接影响编译效率、平台兼容性以及运行时稳定性。我们将从创建新项目开始,逐步配置Gradle版本、minSdk以及核心依赖。

1.1 项目结构总览

在动手编码前,先通过下面的内联SVG图理解本课程项目的整体技术架构,以及本章搭建环境在其中的位置。

项目初始化与环境搭建 —— 本章聚焦模块 ComposeWorkManager 项目 Gradle版本 (8.2+) & 插件版本 (8.1.0+) Compose BOM (2024.01.00+) ui, material3, activity-compose WorkManager (2.9.0+) runtime-ktx, hilt-worker minSdk ≥ 26 (Android 8.0) 保障WorkManager线程池稳定 编译通过 + 模拟器/真机运行 验证项目联调成功 说明:本章完成图中“Gradle配置 → Compose BOM + WorkManager → minSdk”整条链路,后续章节在此基础上扩展。

1.2 核心技术原理

项目初始化不仅是添加几行依赖,更涉及Gradle版本兼容性、编译SDK与minSdk的平衡、以及Compose编译器与Kotlin版本的匹配。理解以下原理能有效避免大部分的环境错误。

核心概念 原理说明 本课程选型
Compose BOM Bill of Materials,统一管理Compose各子模块(ui、material3、activity-compose)版本,避免版本冲突。 2024.01.00 或更高
WorkManager 兼容Android 8.0+的后台任务调度库,利用JobScheduler/Exact Alarms实现可靠的一次性与周期性任务。 2.9.0 或更高
minSdk 应用支持的最低API级别。过低会导致WorkManager内部降级使用AlarmManager,线程模型不稳定。 26 (Android 8.0)
Kotlin Compiler Extension Compose编译器插件与Kotlin版本必须一一对应,否则触发IncompatibleComposeVersion错误。 Kotlin 1.9.0 + Compose Compiler 1.5.1

1.3 实现流程:分步操作

遵循以下6个步骤完成项目初始化。所有命令和配置片段请直接复制到对应的Gradle文件中。

前置条件:确保已安装 Android Studio Hedgehog (2023.1.1) 或更高版本,并确认JAVA_HOME指向JDK 17。

步骤1:创建新项目

  • 在Android Studio中选择 New Project → Empty Compose Activity。
  • 填写项目名:ComposeWorkManagerDemo,Package:com.example.cwm。
  • 选择 Minimum SDK:API 26。

步骤2:配置根目录 build.gradle.kts

统一Gradle插件版本和Kotlin版本:

plugins {
    id("com.android.application") version "8.1.4" apply false
    id("org.jetbrains.kotlin.android") version "1.9.0" apply false
}

tasks.register("clean", Delete::class) {
    delete(rootProject.layout.buildDirectory)
}

步骤3:配置模块级 build.gradle.kts

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
}

android {
    namespace = "com.example.cwm"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.example.cwm"
        minSdk = 26
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"
    }

    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.1"
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget = "17"
    }
}

dependencies {
    // Compose BOM
    val composeBom = platform("androidx.compose:compose-bom:2024.01.00")
    implementation(composeBom)
    implementation("androidx.compose.ui:ui")
    implementation("androidx.compose.ui:ui-graphics")
    implementation("androidx.compose.material3:material3")
    implementation("androidx.activity:activity-compose:1.8.2")

    // WorkManager
    implementation("androidx.work:work-runtime-ktx:2.9.0")

    // 调试与测试
    implementation("androidx.compose.ui:ui-tooling-preview")
    debugImplementation("androidx.compose.ui:ui-tooling")
    testImplementation("junit:junit:4.13.2")
}

步骤4:同步Gradle

  • 点击Android Studio工具栏的 Sync Now。
  • 观察 Build Output 窗口,确保无红色错误。

步骤5:验证WorkManager依赖

在 MainActivity.kt 中添加如下测试代码,确认依赖可被识别:

import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkManager
import androidx.work.Worker
import androidx.work.WorkerParameters
import android.content.Context

class TestWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
    override fun doWork(): Result {
        // 模拟任务
        return Result.success()
    }
}

// 在onCreate中测试
val workRequest = OneTimeWorkRequestBuilder<TestWorker>().build()
WorkManager.getInstance(this).enqueue(workRequest)

步骤6:运行项目(模拟器/真机)

  • 选择目标设备(API 26+),点击 Run。
  • 应用成功安装并显示空白Compose界面,即表示初始化完成。

1.4 常见错误与调试

错误现象 根因 解决方案
Unresolved reference: compose Compose BOM未添加或模块级buildFeatures未开启 检查 buildFeatures { compose = true } 以及在dependencies中引入BOM
Failed to resolve: work-runtime-ktx:2.9.0 仓库未添加(mavenCentral / google()) 在根目录 settings.gradle.kts 添加 mavenCentral() 和 google()
IncompatibleComposeVersion Kotlin版本与Compose编译器扩展版本不匹配 使用官方兼容版本对照表:此处Kotlin 1.9.0 ↔ Compose Compiler 1.5.1
INSTALL_FAILED_OLDER_SDK 测试设备API低于minSdk 26 更换模拟器系统镜像为API 26+,或升级真机固件
调试技巧:如果项目同步失败,优先检查 settings.gradle.kts 中的 pluginManagement 和 dependencyResolutionManagement 配置。常见遗漏是未包含 repositories { google() mavenCentral() }。

1.5 性能与稳定性建议

  • minSdk 26是稳定基线:WorkManager在API 26+使用JobScheduler,线程池管理更高效;低于26版本降级到AlarmManager+广播,功耗和稳定性都有风险。
  • Compose编译缓存:可添加 org.gradle.caching=true 到 gradle.properties,减少重复编译时间。
  • 避免版本频繁浮动:课程中锁定的BOM版本和WorkManager版本经过联调验证。生产环境可改为变量统一管理版本。
注意:不要随意升级Compose BOM到非稳定版(如alpha、beta),可能引入未暴露的API变更。始终使用Release版本(如2024.01.00)以保证代码与课程保持一致。