发布于 

Android SDK Version小结

基本概念

应用向前兼容性

亦作向下兼容,应用向前兼容(forward, 代指未来)更新版本的系统,几乎所有对框架 API 的更改都是新增更改,所以使用 API 任何给定版本(其 API 级别所指定版本)开发的 Android 应用均向前兼容更新版本的 Android 平台以及更高 API 级别:即在为低版本API开发(target sdkversion 较低)的应用也可在高版本API 平台上正常运行

应用向后兼容性

亦作向上兼容,应用所向后兼容(backward,指过去)的老版本系统,: 由于应用可能使用了高版本平台的某些API,所以未必能未包含这些API的某些低版本系统上运行,而应用向后兼容的最老系统版本由mini sdkversion指定

项目

  • compileSdkVersion: 33
  • buildToolsVersion: 31.0.0
  • minSdkVersion : 26
  • targetSdkVersion : 30

android:minSdkVersion

一个用于指定应用运行所需最低 API 级别的整数。如果系统的 API 级别低于该属性中指定的值,Android 系统将阻止用户安装应用。您应始终声明该属性。
注意:如果您不声明该属性,系统将假定默认值为“1”,这表示您的应用兼容所有 Android 版本。如果您的应用不能兼容所有版本(例如,它使用 API 级别 3 中引入的 API),并且您尚未声明正确的 minSdkVersion,则当应用安装在 API 级别小于 3 的系统上时,应用将在运行时尝试访问不可用的 API 时发生崩溃。因此,请务必在 minSdkVersion 属性中声明合适的 API 级别。

complileSdkVersion

定义gradle用来编译你应用的sdk版本,当我们的应用的complileSdkVersion高于miniSdkVersion时,意味着尽管我们能利用最新版本平台API带来的新特性,但也要为不支持这些新特性但系统版本大于miniSdkVersion的老设备(即miniSdkVersion < sdkversion < complileSdkVersion)提供其他兼容的实现

android:targetSdkVersion

一个用于指定应用的目标 API 级别的整数。如果未设置,其默认值与为 minSdkVersion 指定的值相等。
该属性用于通知系统,您已针对目标版本进行测试,并且系统不应通过启用任何兼容性行为,以保持您的应用与目标版本的向前兼容性。应用仍可在较低版本上运行(最低版本为 minSdkVersion)。
举例:对于某些新版本API增加的feature(如Android 12中对通知栏自定义区域的改动),当应用的targetSdkVersion小于新版本时,出于向后(过去的老版本)兼容的考量(因为开发者有可能没对新版本通知栏的呈现形式做适配),即便它运行在新版本的平台上,仍然会以targetSdkVersion支持的版本来呈现对应feature, 而不是以该新版本平台实际支持的最新特性呈现。
image.jpg
并不是所有 feature都会针对targetSdkVersion做向上(后)兼容
For each Android version release, in documentation, you can see that changes are split into two groups:

  • behavioural changes for apps targeting specific Android versions
  • and changes for all apps, no matter which targetSdkVersion they define.

参考链接


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站由 @tsparrot 创建,使用 Stellar 作为主题。