他的回复:
华为云ID: Warn007 + 第一周学习笔记 # Android之compileSdkVersion、minSdkVersion 以及 targetSdkVersion ## compileSdkVersion > compileSdkVersion: 编译应用的版本 compileSdkVersion 告诉 Gradle 用哪个 Android SDK 版本编译你的应用。它纯粹只是在编译的时候使用。当你修改了 compileSdkVersion 的时候,可能会出现新的编译警告、编译错误等(你真的应该修复这些警告,他们的出现一定是有原因的)。 > 注意:修改 compileSdkVersion 不会改变运行时的行为,compileSdkVersion 并不会打包进APK里只是在编译时使用 因此强烈推荐总是使用最新的 SDK 进行编译。在自己的代码上使用最新SDK的编译检查可以获得很多好处,可以避免使用最新弃用的 API ,并且为使用新的 API 做好准备。 注意,如果使用Support Library,那么使用最新发布的 Support Library 就需要使用最新的 SDK 编译。通常,新版的 Support Library 随着新的系统版本而发布,它为系统新增加的 API 和新特性提供兼容性支持。例如,要使用 23.1.1 版本的 Support Library ,compileSdkVersion 就必需至少是 23 (大版本号要一致!)。 ## minSdkVersion > minSdkVersion 是应用可以运行的最低版本要求。minSdkVersion 是应用商店用来判断用户设备是否可以安装某个应用的标志之一。 在开发时 minSdkVersion 也起到一个重要角色:lint。默认会在项目中运行,它在你使用了高于 minSdkVersion 的 API 时会警告你,帮你避免调用不存在的 API 的运行时问题。如果只在较高版本的系统上才使用某些 API,通常使用运行时检查系统版本的方式解决。 请记住,你所使用的库可能有他们自己的 minSdkVersion 。你的应用设置的 minSdkVersion 必需大于等于这些库的 minSdkVersion 。例如有三个库,它们的 minSdkVersion 分别是 4, 7 和 9 ,那么你的 minSdkVersion 必需至少是 9 才能使用它们。在少数情况下,你仍然想用一个比你应用的 minSdkVersion 还高的库(处理所有的边缘情况,确保它只在较新的平台上使用),你可以使用 [tools:overrideLibrary 标记](https://link.jianshu.com/?t=http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger?utm_campaign=adp_series_sdkversion_010616&utm_source=medium&utm_medium=blog#TOC-tools:overrideLibrary-marker),但请做彻底的测试! ## targetSdkVersion > targetSdkVersion 是 Android 系统提供前向兼容的主要手段。 compileSdkVersion 和 minSdkVersion 都非常好理解,前者表示编译的 SDK 版本,后者表示应用兼容的最低 SDK 版本。但是对于 targetSdkVersion 其实很难一句话解析清楚。 > 原文:targetSdkVersion is the main way Android provides forward compatibility targetSdkVersion 是 Android 系统提供前向兼容的主要手段。这是什么意思呢?随着 Android 系统的升级,某个 API 或者模块的行为可能会发生改变,但是为了保证APK 的行为还是和以前一致。只要 APK 的 targetSdkVersion 不变,即使这个 APK 安装在新 Android 系统上,其行为还是保持老的系统上的行为,这样就保证了系统对老应用的前向兼容性。