Android 开发中compileSdkVersion 和 targetSdkVersion

在 Android 开发中,compileSdkVersion 和 targetSdkVersion 是 build.gradle 文件中的两个关键配置,它们分别控制应用的编译行为运行时兼容性。以下是它们的详细区别和用途:

1. compileSdkVersion(编译版本)

  • 作用:指定用于编译应用的 Android SDK 版本。

  • 影响范围

    • 决定你在代码中能调用哪些 API(例如 Android 14 的新特性需要 compileSdkVersion 34)。

    • 仅影响编译时的代码检查,不影响应用在设备上的实际运行行为

  • 建议:始终使用最新的稳定版 SDK(如 Android 14 对应 34),以支持新 API 和优化编译。

gradle

复制

android {
    compileSdkVersion 34 // 使用 Android 14(API 34)编译
}

2. targetSdkVersion(目标版本)

  • 作用:声明应用针对哪个 Android 版本进行优化

  • 影响范围

    • 控制应用的运行时行为。例如:

      • 权限模型(如 Android 6.0+ 的动态权限)。

      • 后台限制(如 Android 8.0+ 的后台服务限制)。

      • 存储访问(如 Android 11+ 的分区存储)。

    • 如果 targetSdkVersion 低于设备系统版本,Android 会启用兼容模式(可能影响功能或性能)。

  • 建议

    • 更新前需充分测试,确保兼容性。

    • 通常应逐步升级到最新版本(但不超过 compileSdkVersion)。

gradle

复制

android {
    defaultConfig {
        targetSdkVersion 34 // 针对 Android 14 优化
    }
}

核心区别总结

配置项 作用阶段 影响运行时? 推荐设置
compileSdkVersion 编译时 ❌ 否 最新稳定版(如 34
targetSdkVersion 运行时 ✅ 是 逐步升级,充分测试后更新

注意事项

  1. 版本关系

    • compileSdkVersion ≥ targetSdkVersion ≥ minSdkVersion(最低支持版本)。

  2. 常见问题

    • 如果 targetSdkVersion 过低,应用在新系统上可能无法使用新特性,或触发兼容性警告(如 Google Play 要求至少 targetSdkVersion 33 以上)。

    • 如果 compileSdkVersion 过低,无法调用新 API(编译报错)。


示例配置(Android Studio 新项目)

gradle

android {
    compileSdkVersion 34
    defaultConfig {
        minSdkVersion 21 // 最低支持 Android 5.0
        targetSdkVersion 34
    }
}