Android 项目中 compileSdkVersion targetSdkVersion minSdkVersion buildToolsVersion 的区别

更新日期: 2023-02-13 阅读次数: 3098 字数: 592 分类: Android

之前用 Android Studio 开发小工具 APP 的时候,没有在意 compileSdkVersion targetSdkVersion minSdkVersion buildToolsVersion 这几个 gradle 配置参数,使用默认的值即可。但是最近遇到一个需要用到三方 SDK 的项目,发现默认配置有问题,需要了解一下这几个参数的区别。

compileSdkVersion

compileSdkVersion 是编译 app 使用的 api 版本。这意味着:

  • 开发阶段:使用了更高的 compileSdkVersion 版本,就可以使用最新的 API。也方便知道哪些 API 即将废弃。
  • 运行阶段:如果用更高版本的 compileSdkVersion 编译了 APP,在低版本的 Android 真机系统是可以正常运行的。但是前提是不能调用更高系统独有的 API,可以通过 if 判断版本号来选择性调用。

targetSdkVersion

如果未设置,默认值等于 minSdkVersion。

随着 Android 系统的不断升级,带来了更多的新特性,新功能,设置界面显示风格都在变化。如果运行 app 的 android 真机系统版本大于 targetSdkVersion,则会启用兼容模式,以确保 app 能正常运行。

targetSdkVersion 设置为自己真机测试过的最高版本比较合适。

例如,假设当前最新版本的 Android 版本为 13,但是我的手机版本是 12,而我只在自己的 Android 12 手机上完整测试了待发布的 APP,那么这时 targetSdkVersion 设置为 Android 12 对应的 API Level 即可。即便 compileSdkVersion 对应的是 Android 13。

minSdkVersion

如果不设置,默认为 1,即兼容所有的 Android 版本。

Android 系统会阻止用户安装 minSdkVersion 高于本机系统 API 等级的 APP。

如果有多个模块,分别设置了 minSdkVersion,需要确保整个项目的 minSdkVersion 大于等于最高的那个。

compileSdkVersion 与 buildToolsVersion 的区别

  • compileSdkVersion 是编译时使用的 SDK 版本。
  • buildToolsVersion 是编译工具的版本。 从 API Level 18 开始,每个 API Level 对应一个编译工具的版本,格式类似 x.0.0。当然也可能有 x.0.1, x.0.2, 等等。

也可以使用比 compileSdkVersion 高的 buildToolsVersion,build tools 是向下兼容的。

如何获取最新的 buildToolsVersion 版本号:

Tools > SDK Manager > SDK Tools (tab). 选择 Android SDK Build Tools 勾选 Show Package Details。

查看 API Level 与 Android 版本号的对应关系

https://developer.android.com/guide/topics/manifest/uses-sdk-element

例如:

  • Android 10 - 29
  • Android 11 - 30
  • Android 12 - 31,32
  • Android 13 - 33

疑问

  • submodule 的 targetsdk compilesdk 版本不一致可以么?

参考

微信关注我哦 👍

大象工具微信公众号

我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式