第2章 开发环境搭建:Android Studio 配置、Compose BOM 版本选择、minSdk 与 targetSdk 要求、依赖声明清单
本章将搭建完整的《Compose 防录屏支付键盘》开发环境。环境正确与否直接影响后续安全功能的实验与调试。核心要点包括:Android Studio 的正确版本与 SDK 配置、Compose BOM(Bill of Materials)的版本选择策略、minSdk 与 targetSdk 的安全含义、依赖声明清单的书写规范。完成本章后,你将获得一个可重复构建的、与安全键盘特性兼容的开发基线。
学习目标
- 掌握 Android Studio Hedgehog / Iguana 的推荐配置
- 理解 Compose BOM 的依赖统一原理
- 明确防录屏需求对 minSdk / targetSdk 的最低要求
- 能独立编写 build.gradle (module level) 的依赖声明
2.1 Android Studio 配置
推荐使用 Android Studio Hedgehog (2023.1.1) 或 Iguana (2023.2.1) 以上版本。这两个版本内置了 AGP 8.2+,对 Compose 编译器插件的兼容性最佳。
关键配置项
- SDK 平台:安装 Android 14.0 (API 34) 及至少一个较低版本(API 26)用于测试
- JDK:JDK 17 (推荐使用 Studio 自带的 JetBrains Runtime)
- 虚拟设备:建议创建 API 26 和 API 34 两个 AVD,分别测试低版本兼容性与新特性
2.2 Compose BOM 版本选择
Compose BOM(Bill of Materials)是一种依赖统一管理机制。导入 BOM 后,所有 Compose 库的版本由 BOM 的版本决定,开发者无需为每个库单独指定版本号,从而避免版本冲突。
版本选择原则
- 务必选择 stable 版本的 BOM(如
2024.02.00),不要使用 alpha 或 beta 版本 - BOM 版本应与项目使用的 AGP 及 Kotlin 版本匹配,参考官方兼容性表
- 防录屏支付键盘使用的
material3最低要求 BOM 2023.10.00+,推荐 2024.02.00+
下表列出常用 BOM 版本及其对应 Compose 编译器版本、Kotlin 版本要求:
| BOM 版本 | Compose Compiler 最低版本 |
Kotlin 版本 | AGP 版本 | 推荐场景 |
|---|---|---|---|---|
| 2024.02.00 | 1.5.8 | 1.9.22 | 8.2.0+ | 新项目首选 |
| 2024.01.00 | 1.5.7 | 1.9.21 | 8.1.4+ | 兼容已有项目 |
| 2023.10.01 | 1.5.4 | 1.9.20 | 8.1.0+ | 最低可用版本 |
可通过 Android Studio 的 “Project Structure” → “Dependencies” 快速搜索 BOM 的最新稳定版本,或查看 官方 BOM 映射表。
2.3 minSdk 与 targetSdk 要求
防录屏支付键盘依赖 WindowManager.LayoutParams.FLAG_SECURE 以及 android.hardware.biometrics 等 API。这些特性从 API 26(Android 8.0)开始得到完整支持。若 minSdk 低于 26,则必须在运行时做版本检查或放弃某些安全特性。
严格约束
minSdk最低 26 —— 确保 FLAG_SECURE 对窗口的完全控制,并使 BiometricPrompt 可免兼容库直接使用targetSdk必须为 34(Android 14)—— 符合 Google Play 2024 年 8 月后的强制要求,同时解锁新增的隐私与安全限制- 不可使用
targetSdk < 33,否则通知权限及窗口覆盖检测可能失效
在 build.gradle (module level) 中的配置示例如下:
android {
compileSdk 34
defaultConfig {
applicationId "com.example.securepaykeyboard"
minSdk 26
targetSdk 34
versionCode 1
versionName "1.0"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
}
2.4 依赖声明清单
使用 BOM 后,依赖声明变得简洁且不易出错。以下是一个面向防录屏支付键盘的完整 build.gradle (module level) 示例:
dependencies {
// BOM 统一管理所有 Compose 库版本
def composeBom = platform("androidx.compose:compose-bom:2024.02.00")
implementation composeBom
// Compose UI 基础
implementation "androidx.compose.ui:ui"
implementation "androidx.compose.ui:ui-graphics"
implementation "androidx.compose.ui:ui-tooling-preview"
// Material3 组件(支付键盘 UI 依赖)
implementation "androidx.compose.material3:material3"
// Activity Compose
implementation "androidx.activity:activity-compose:1.8.2"
// 防录屏核心:WindowManager
implementation "androidx.window:window:1.2.0"
// 生物识别(可选,用于支付验证)
implementation "androidx.biometric:biometric:1.2.0-alpha05"
// Debug 调试工具
debugImplementation "androidx.compose.ui:ui-tooling"
debugImplementation "androidx.compose.ui:ui-test-manifest"
}
关键说明
platform()确保 BOM 的版本优先级高于任何传递依赖的版本activity-compose与compose-bom的版本没有直接绑定,需单独升级以获得最新的安全补丁biometric库版本建议使用 alpha05 以上,因为早期版本存在 onAuthenticationError 回调的兼容问题
2.5 常见错误与解决方法
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
编译报错 Unresolved reference: compose |
BOM 未成功导入,或 Kotlin 编译器版本不匹配 | 检查 BOM 版本与 Kotlin 版本兼容性(见 2.2 节表格) |
运行时 FLAG_SECURE 不生效 |
API 等级低于 26 | 确认 minSdk ≥ 26 |
BiometricPrompt 回调不触发 |
targetSdk 低于 28 或未声明权限 |
设置 targetSdk = 34,并在 manifest 中添加 <uses-permission android:name="android.permission.USE_BIOMETRIC" /> |
项目创建后,建议先编译一个只有空白 Compose 界面的 App,验证环境无问题后再引入防录屏特性。这样可以隔离环境错误与业务逻辑错误。
2.6 性能与稳定性优化建议
- 使用 R8 开启全压缩混淆:在
gradle.properties中添加android.enableR8.fullMode=true - 在
build.gradle中显式指定 Compose 编译器扩展版本,避免与 BOM 隐含版本冲突:
composeOptions { kotlinCompilerExtensionVersion = "1.5.8" } - 对于支付键盘场景,开启 布局检查器 调试时务必在物理机或模拟器 API 26+ 上测试,因为某些安全窗口属性在调试工具中可能被忽略
环境就绪检查清单
- Android Studio 版本 ≥ Hedgehog,AGP ≥ 8.2.0
- SDK 已安装 API 34 和 API 26
- Kotlin 插件版本 1.9.22 或更高
- build.gradle 中已导入 Compose BOM 2024.02.00
- minSdk = 26, targetSdk = 34
- 完成一次
./gradlew assembleDebug无错误
全部通过后,即可进入第 3 章实现防录屏核心逻辑。