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。推荐基线如下:
| 组件 | 推荐版本 | 最低版本 | 说明 |
|---|---|---|---|
| AGP | 8.2.2 | 7.4.0 | 需支持 Compose BOM 2024.01.00+ |
| Kotlin | 1.9.22 | 1.8.10 | Compose Compiler 1.5.8 要求 Kotlin 1.9.22 |
| Compose BOM | 2024.01.00 | 2023.10.01 | 统一管理 Compose UI 版本 |
| Compose Compiler | 1.5.8 | 1.4.8 | 由 Kotlin 版本决定 |
| 支付宝 SDK | 15.8.11 | 15.7.9 | 需支持 compileSdk 34 |
| compileSdk / targetSdk | 34 | 33 | 支付宝 15.8.11 强制要求 compileSdk ≥ 34 |
| minSdk | 24 (Android 7.0) | 21 | Compose 官方建议 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")
}
groupId 可能因仓库不同而改变。如果使用 Maven Central 或 JitPack,实际坐标可能为 com.alipay.sdk:alipay-sdk:15.8.11。请以官方文档或私有仓库配置为准。本课程示例使用 alipaysdk-android 作为占位符。
1.3 支付宝 SDK 版本选择策略
支付宝官方对 SDK 的维护周期较短,通常只保持最近两个大版本。选择时应遵循:
- 检查 compileSdk 要求: 15.8.x 要求 compileSdk ≥ 34;15.7.x 要求 ≥ 33。
- 避免使用
+通配符: 如15.8.+会导致不可预期的大版本升级,破坏兼容性。 - 回退方案: 如果 Compose 项目 minSdk 为 24,15.8.11 仍可用(支付宝最低支持 21)。
- 本地 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 集成环境结构图
1.6 常见错误与解决方案
| 错误信息片段 | 原因 | 修复 |
|---|---|---|
Cannot inline bytecode built with JVM target 1.8 into bytecode that is being built with JVM target 17 | Kotlin 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 章)将编写封装好的支付桥接层。