1. 项目环境搭建:Gradle 依赖配置、支付宝 SDK 版本选择、Compose 版本兼容性检查

本章是整门课程的基石,目标是搭建一个同时集成支付宝支付 SDK 与 Jetpack Compose 的 Android 项目。你需要依次完成:Gradle 依赖声明、选择正确的支付宝 SDK 版本、验证 Compose 与 SDK 的编译兼容性,并确保 AGP、Kotlin、Compose Compiler 三者的版本三角关系正确。以下按步骤拆解。

1.1 版本三角关系概览

Android 开发中,AGP(Android Gradle Plugin)、Kotlin 版本、Compose Compiler 版本三者必须严格匹配,否则编译失败或运行时崩溃。支付宝 SDK 本身不依赖 Compose,但作为外部 AAR 需要配合项目的 minSdk 及 compileSdk。推荐基线如下:

组件推荐版本最低版本说明
AGP8.2.27.4.0需支持 Compose BOM 2024.01.00+
Kotlin1.9.221.8.10Compose Compiler 1.5.8 要求 Kotlin 1.9.22
Compose BOM2024.01.002023.10.01统一管理 Compose UI 版本
Compose Compiler1.5.81.4.8由 Kotlin 版本决定
支付宝 SDK15.8.1115.7.9需支持 compileSdk 34
compileSdk / targetSdk3433支付宝 15.8.11 强制要求 compileSdk ≥ 34
minSdk24 (Android 7.0)21Compose 官方建议 minSdk 21+,支付宝无额外要求
版本兼容性检查工具: 在项目根目录执行 ./gradlew :app:dependencies --configuration releaseRuntimeClasspath 可查看最终合并的依赖树,确认支付宝 AAR 与 Compose 库无冲突。

1.2 Gradle 依赖配置全貌

以下 build.gradle.kts(模块级)展示了核心依赖声明。注意 Compose Compiler 必须显式指定,不能依赖 BOM 自动解析。

// app/build.gradle.kts
plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("org.jetbrains.kotlin.plugin.compose") version "1.9.22" apply false
}

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

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

    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.8" // 必须与 kotlinVersion 1.9.22 匹配
    }
}

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.ui:ui-tooling-preview")
    implementation("androidx.compose.material3:material3")
    implementation("androidx.activity:activity-compose:1.8.2")

    // 支付宝支付 SDK(远程仓库)
    implementation("com.alipay.sdk:alipaysdk-android:15.8.11")

    // 测试
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.compose.ui:ui-test-junit4")
}
注意: 支付宝 SDK 的 groupId 可能因仓库不同而改变。如果使用 Maven Central 或 JitPack,实际坐标可能为 com.alipay.sdk:alipay-sdk:15.8.11。请以官方文档或私有仓库配置为准。本课程示例使用 alipaysdk-android 作为占位符。

1.3 支付宝 SDK 版本选择策略

支付宝官方对 SDK 的维护周期较短,通常只保持最近两个大版本。选择时应遵循:

  1. 检查 compileSdk 要求: 15.8.x 要求 compileSdk ≥ 34;15.7.x 要求 ≥ 33。
  2. 避免使用 + 通配符: 如 15.8.+ 会导致不可预期的大版本升级,破坏兼容性。
  3. 回退方案: 如果 Compose 项目 minSdk 为 24,15.8.11 仍可用(支付宝最低支持 21)。
  4. 本地 AAR 方式: 某些合规要求不能使用远程仓库,可将 alipaySdk-15.8.11.aar 放入 app/libs/,并在 build.gradle.kts 中添加:
// 本地 AAR 替代远程依赖
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.aar"))))

1.4 Compose 版本兼容性检查清单

在集成前,使用以下 gradle.properties 配置确保构建环境一致:

# gradle.properties
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
android.useAndroidX=true
kotlin.code.style=official
android.nonTransitiveRClass=true
# 强制使用指定 Compose Compiler 版本(防止被其他插件覆盖)
kotlin.compiler.compose.extension.version=1.5.8

然后执行验证命令:

./gradlew :app:checkComposeCompatibility  # 自定义 task,非官方;可用 :app:dependencies 替代观察
./gradlew :app:compileDebugKotlin --stacktrace

若出现类似 This version (1.5.8) of the Compose Compiler requires Kotlin version 1.9.22 错误,说明 Kotlin 版本不匹配,需同步修改 project/build.gradle.kts 中的 Kotlin 插件版本。

1.5 内联 SVG:支付宝 + Compose 集成环境结构图

支付 SDK + Compose 项目依赖结构 Android 项目 AGP 8.2.2 Kotlin 1.9.22 Compose BOM 2024.01.00 Compose Compiler 1.5.8 支付宝 SDK 15.8.11 APK / AAB 编译产物 版本三角关系约束 AGP 版本 → 影响 Gradle API → 间接限制 Kotlin 插件加载方式 Kotlin 版本 ↔ Compose Compiler 版本(一对一绑定,不可错位)

1.6 常见错误与解决方案

错误信息片段原因修复
Cannot inline bytecode built with JVM target 1.8 into bytecode that is being built with JVM target 17Kotlin JVM target 与 AGP 默认值不匹配在 compileOptions 中设置 sourceCompatibility = JavaVersion.VERSION_17,targetCompatibility = JavaVersion.VERSION_17
Unresolved reference: compose未启用 Compose buildFeatures在 android { } 块内添加 buildFeatures { compose = true }
Attribute application@appComponentFactory 重复合并支付宝 SDK 自带 AndroidManifest.xml 与其他库冲突在 android { } 中添加 packaging { resources { excludes += listOf("META-INF/*") } }
Found multiple versions of kotlin-stdlib间接依赖引入不同 Kotlin 标准库版本implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.9.22")) 统一版本

1.7 验证集成是否成功

在 MainActivity.kt 中编写一个最小 Compose 页面并调用支付宝初始化代码(暂不调用支付接口),确认编译通过:

// MainActivity.kt
package com.example.alipaycompose

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.Text
import com.alipay.sdk.app.EnvUtils
import com.alipay.sdk.app.PayTask

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 仅验证 SDK 类加载,不触发支付
        EnvUtils.setEnv(EnvUtils.EnvEnum.ONLINE) // 设置线上环境
        val payTask = PayTask(this)
        payTask.version // 验证 SDK 版本读取

        setContent {
            Text("支付宝 SDK 集成成功,版本:${payTask.version}")
        }
    }
}

如果编译通过且应用启动后显示版本号,说明环境搭建完成。下一步(第 2 章)将编写封装好的支付桥接层。