第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) 的依赖声明
开发环境搭建关键步骤 Android Studio AGP 8.2+ / JDK 17 Compose BOM 2024.02.00+ minSdk / targetSdk min=26 / target=34 依赖声明 build.gradle (module) 防录屏权限配置 FLAG_SECURE / 窗口标志 运行测试验证 模拟器 / 物理机 API 26+ 提示:所有依赖版本必须通过 BOM 统一管理,避免 Compose 各库版本不一致导致的 Runtime 错误

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+ 上测试,因为某些安全窗口属性在调试工具中可能被忽略

环境就绪检查清单

  1. Android Studio 版本 ≥ Hedgehog,AGP ≥ 8.2.0
  2. SDK 已安装 API 34 和 API 26
  3. Kotlin 插件版本 1.9.22 或更高
  4. build.gradle 中已导入 Compose BOM 2024.02.00
  5. minSdk = 26, targetSdk = 34
  6. 完成一次 ./gradlew assembleDebug 无错误

全部通过后,即可进入第 3 章实现防录屏核心逻辑。