compileSdkVersion
官方解释: compileSdkVersion specifies the Android API level Gradle should use to compile your app. This means your app can use the API features included in this API level and lower
翻译:compileSdkVersion 表明了 Gradle 编译 app 的 Android API 版本。
解释渠道一:
compileSdkVersion 告诉 Gradle 用哪个 Android SDK 版本编译你的应用。使用任何新添加的 API 就需要使用对应 Level 的 Android SDK。
需要强调的是修改 compileSdkVersion 不会改变运行时的行为。当你修改了 compileSdkVersion 的时候,可能会出现新的编译警告、编译错误,但新的 compileSdkVersion 不会被包含到 APK 中:它纯粹只是在编译的时候使用。(你真的应该修复这些警告,他们的出现一定是有原因的)
因此我们强烈推荐总是使用最新的 SDK 进行编译。在现有代码上使用新的编译检查可以获得很多好处,避免新弃用的 API ,并且为使用新的 API 做好准备。
注意,如果使用 Support Library ,那么使用最新发布的 Support Library 就需要使用最新的 SDK 编译。例如,要使用 23.1.1 版本的 Support Library ,compileSdkVersion 就必需至少是 23 (大版本号要一致!)。通常,新版的 Support Library 随着新的系统版本而发布,它为系统新增加的 API 和新特性提供兼容性支持。
解释渠道二:
表示:编译版本,就是运行我们这个项目的需要的SDK,现在是API 23,如果我们需要在4.3的版本运行,只要该为18就好了,那么它的对应版本号怎么查看呢,如图:
buildToolsVersion
官方解释:buildToolsVersion specifies the version of the SDK build tools, command-line utilities, and compiler that Gradle should use to build your app. You need to download the build tools using the SDK Manager.
翻译:buildToolsVersion 指定SDK构建工具、命令行实用程序的版本,以及Gradle应用来构建应用程序的编译器的版本。你需要使用 SDK Manager下载构建工具。
解释渠道一:
表示:构建工具的版本,其中包括了打包工具aapt、dx等等。这个工具的目录位于..your_sdk_path/build-tools/XX.XX.XX, 当前对应的版本有那些呢,如下图吧
targetSdkVersion
解释渠道一:
一个用于指定应用的目标 API 级别的整数。如果未设置,其默认值与为 minSdkVersion 指定的值相等。
该属性用于通知系统,您已针对目标版本进行测试,并且系统不应启用任何兼容性行为来保持您的应用与目标版本的向前兼容性。 应用仍可在较低版本上运行(最低版本为 minSdkVersion)。
在 Android 随着每个新版本的推出而进化的过程中,一些行为甚至是外观可能会发生变化。不过,如果平台的 API 级别高于您的应用的 targetSdkVersion 所声明的版本,系统就可以通过启用兼容性行为来确保您的应用继续以您所期望的方式工作。 您可以通过将 targetSdkVersion 指定为与应用所运行平台的 API 级别一致来停用此类兼容性行为。 例如,如果将该值设置为“11”或更高,系统便可在您的应用运行在 Android 3.0 或更高版本的平台上时对其应用新的默认主题 (Holo),还可在您的应用运行在更大屏幕上时停用屏幕兼容性模式(因为对 API 级别 11 的支持隐含了对更大屏幕的支持)。
系统可根据您为该属性设置的值启用许多兼容性行为。 Build.VERSION_CODES 参考资料中的相应平台版本对其中的几种行为做了说明。
要让您的应用与各 Android 版本保持同步,您应该增加该属性的值,使其与最新 API 级别一致,然后在相应平台版本上对您的应用进行全面测试。
解释渠道二:
argetSdkVersion 是 Android 提供向前兼容的主要依据,在应用的 targetSdkVersion 没有更新之前系统不会应用最新的行为变化。这允许你在适应新的行为变化之前就可以使用新的 API (因为你已经更新了 compileSdkVersion 不是吗?)。
targetSdkVersion 所暗示的许多行为变化都记录在 VERSION_CODES 文档中了,但是所有恐怖的细节也都列在每次发布的平台亮点中了,在这个 API Level 表中可以方便地找到相应的链接。
例如,Android 6.0 变化文档中谈了 target 为 API 23 时会如何把你的应用转换到运行时权限模型上,Android 4.4 行为变化阐述了 target 为 API 19 及以上时使用 set() 和 setRepeating() 设置 alarm 会有怎样的行为变化。
由于某些行为的变化对用户是非常明显的(弃用的 menu 按钮,运行时权限等),所以将 target 更新为最新的 SDK 是所有应用都应该优先处理的事情。但这不意味着你一定要使用所有新引入的功能,也不意味着你可以不做任何测试就盲目地更新 targetSdkVersion ,请一定在更新 targetSdkVersion 之前做测试!你的用户会感谢你的。