Android version 的作用
1.CompileSdkVersion的作用
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 和新特性提供兼容性支持。
2.MinSdkVersion的作用
- 如果
compileSdkVersion
设置为可用的最新 API,那么minSdkVersion
则是应用可以运行的最低要求。minSdkVersion
是 Google Play 商店用来判断用户设备是否可以安装某个应用的标志之一。 - 在开发时
minSdkVersion
也起到一个重要角色:lint
默认会在项目中运行,它在你使用了高于minSdkVersion
的 API 时会警告你,帮你避免调用不存在的 API 的运行时问题。如果只在较高版本的系统上才使用某些 API,通常使用运行时检查系统版本的方式解决。 - 请记住,你所使用的库,如
Support Library
或Google Play services
,可能有他们自己的minSdkVersio
n 。你的应用设置的minSdkVersion
必需大于等于这些库的minSdkVersion
。 - 当你决定使用什么
minSdkVersion
时候,你应该参考当前的 Android 分布统计,它显示了最近 7 天所有访问 Google Play 的设备信息。他们就是你把应用发布到 Google Play 时的潜在用户。最终这是一个商业决策问题,取决于为了支持额外 3% 的设备,确保最佳体验而付出的开发和测试成本是否值得。 - 当然,如果某个新的 API 是你整个应用的关键,那么确定
minSdkVersion
的值就比较容易了。不过要记得 14 亿设备中的 0.7% 也是个不小的数字。
3.TargetSdkVersion的作用
- 三个版本号中最有趣的就是
targetSdkVersion
了。targetSdkVersion
是 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
之前做测试!