Android平台的兼容相关概念详细整理

设置应用的支持版本

通过我们会在文件夹下,指定下面属性,来表示我们应用所支持的Android版本。

 <uses-sdk android:minSdkVersion="integer"
          android:targetSdkVersion="integer"
          android:maxSdkVersion="integer" />
  • android:minSdkVersion
    一个用于指定应用运行所需的最低API级别的整数,如果系统的api级别低于该属性指定的值,Android系统将阻止用户安装应用。 我们应该试着声明该属性。

    注意1:如果我们不声明该属性,系统将默认值假定为”1”,这表示我们的应用兼容所有Android版本。如果我们的应用并不兼容所有版本(例如:它使用了API3中所引入的API),并且我们没有声明minSdkVersion,那么应用安装到 API 3之前的设备上的时候就会发生崩溃。所以指定minSdkVersion很重要。

    注意2:如果指定了minSdkVersion属性,在IDE开发的过程中,如果IDE检测到,我们使用了高于minSdkVersion所指定的api级别的api的时候,就会发出警告。 这个时候我们可以通过@SuppressLint(“NewApi”),@TargetApi(),@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)等注解来解除警告。但是需要注意的是这些注解的所以只是解除警告而已。真正运行在对应平台上的时候还是会发生崩溃。 所以我们在使用高版本的api的时候应该处理好兼容问题,并对这些注解保持警惕。

  • android:targetSdkVersion

    用来指定应用目标API级别的整数。如果未设置,其默认值与为minSdkVersion相同。

    该属性用于通知系统,我们已经针对目标版本进行测试,并且系统不应启用任何兼容性行为来保持我们的应用和目标版本的向前兼容性。 这句话怎么理解?应用仍可在较低版本上运行(最低版本为 minSdkVersion)。
    在 Android 随着每个新版本的推出而进化的过程中,一些行为甚至是外观可能会发生变化。不过,如果平台的 API 级别高于我们的应用的 targetSdkVersion 所声明的版本,系统就可以通过启用兼容性行为来确保我们的应用继续以正常工作。 我们可以通过将 targetSdkVersion 指定为与应用所运行平台的 API 级别一致来停用此类兼容性行为。 例如,如果将该值设置为“11”或更高,系统便可在我们的应用运行在 Android 3.0 或更高版本的平台上时对其应用新的默认主题 (Holo),还可在您的应用运行在更大屏幕上时停用屏幕兼容性模式(因为对 API 级别 11 的支持隐含了对更大屏幕的支持)。

    系统可根据我们为该属性设置的值启用许多兼容性行为。Build.VERSION_CODES 参考资料中的相应平台版本对其中的几种行为做了说明。

    要让我们的应用与各 Android 版本保持同步,我们应该增加该属性的值,使其与最新 API 级别一致,然后 在相应平台版本上对我们的应用进行全面测试。

  • android:maxSdkVersion
    用来指定应用设计运行目标的最高api级别。不推荐实验。就不整理了!

开发中应该注意的API级别相关事项:

  • 应用向前兼容
    Android 应用一般向前兼容新版本的 Android 平台。

    因为几乎所有对框架 API 的更改都是新增更改,所以使用 API 任何给定版本(其 API 级别所指定版本)开发的 Android 应用均向前兼容更新版本的 Android 平台以及更高 API 级别。 应用应该能够在所有后期版本的 Android 平台上运行,除非在个别情况下应用使用的某个 API 部分后来由于某种原因被移除。

    向前兼容性很重要,因为许多 Android 设备都接收 OTA 系统更新。 用户可以安装您的应用并顺利使用,然后通过接收 OTA 更新升级到新版本的 Android 平台。 安装更新后,您的应用将运行在新运行时版本的环境中,但这个版本具有您的应用所依赖的 API 和系统功能。

    在某些情况下,在该 API 之下所做的更改(例如对底层系统本身的更改)可能会影响运行在新环境中的应用。 因此,作为应用开发者,您必须了解应用在各系统环境中的外观和行为。 为帮助您在各种版本的 Android 平台上测试您的应用,Android SDK 提供了多个可供您下载的平台。每个平台都包括一个兼容的系统映像,您可以在 AVD 中运行该映像来测试您的应用。

  • 应用向后兼容
    Android 应用不一定向后兼容比其编译时所针对的目标版本更久远的 Android 平台版本。

    每个新版本的 Android 平台都可能包括新的框架 API,例如那些能够让应用使用新的平台功能或者替换现 有 API 部分的 API。 应用可以在运行于新平台时使用这些新 API,如上所述,也可以在运行于更新版本的平台(API 级别所指定的平台)上时使用这些新 API。 反之,由于早期版本的平台不包括新 API,因此使用新 API 的应用无法运行在这些平台上。

    尽管 Android 设备降级至之前版本平台的情况不太可能发生,但必须意识到,在现实情况下可能有许多设备运行的是早期版本的平台。 即便是在能够获得 OTA 更新的设备中,也可能发生一些设备获得的更新滞后,可能在相当长时间内无法获得更新的情况。

  • 选择平台版本(targetVersion)和 API 级别
    当我们开发应用时,需要选择我们所编译的应用所针对的目标平台版本。 一般而言,我们编译的应用所针对的目 标版本应该是我们应用所能支持的最低平台版本。

    我们可以通过在编译应用时依次降低其所针对的目标编译版本来确定可能的最低平台版本。 确定最低版本后,我们应该使用相应平台版本(和 API 级别)创建一个 AVD,然后对您的应用进行全面测试。 请务必在应用的清单中声明 android:minSdkVersion 属性,并将其值设置为平台版本的 API 级别。

  • 声明最低 API 级别
    如果我们构建的应用使用的 API 或系统功能是在最新平台版本中引入的,则应将 android:minSdkVersion 属性的值设置为最新平台版本的 API 级别。 这样做可确保用户只能将您的应用安装在运行兼容版本 Android 平台的设备上, 并进而确保我们的应用可以在用户设备上正常工作。

    如果我们的应用使用在最新平台版本中引入的 API,但未声明 android:minSdkVersion 属性,则应用可以在运行最新版本平台的设备上正常工作,但无法在运行早期版本平台的设备上正常工作。 在后一种情况下,应用将在运行时试图使用早期版本上不存在的 API 时发生崩溃。

  • 针对更高 API 级别进行测试
    编译应用之后,我们应该确保在应用的 android:minSdkVersion 属性所指定的平台上对其进行测试。 为此,请使用我们的应用所需的平台版本创建一个 AVD。 此外,为确保向前兼容性,我们还应在所有使用的 API 级别高于您的应用所用 API 级别的平台上运行并测试您的应用。

    Android SDK 提供了多个可供我们使用的平台版本(包括最新版本),并提供了可供我们在必要时下载其他平台版本的更新器工具。

    要访问该更新器,请使用位于 /tools 目录的 android 命令行工具。 我们可以通过执行 android sdk 来启动 SDK 更新器。 我们还可以直接双击 android.bat (Windows) 或 Android (OS X/Linux) 文件。

  • 按 API 级别过滤参考文档
    Android Developers 网站在每个参考文档页面的右上角提供了一个“Filter by API Level”控件。 我们可以利用该控件,根据应用在其清单文件的 android:minSdkVersion 属性中指定的 API 级别,只显示我们的应用实际可以访问的 API 部分的对应文档。

参考:
https://developer.android.com/guide/topics/manifest/uses-sdk-element.html?hl=zh-cn#considerations

targetVersion详解:
https://www.race604.com/android-targetsdkversion/

小结:
结合官方文档和日常开发经验,整理一下Android不同版本的兼容需要注意的事项:

1.如果我们为应用指定了minSdkVersion,就表示我们的最低向后兼容版本是这个API级别。那么我们在开发的过程中如果要使用高于这minSdkVersion的api,就应该手动进行判断。

2.targerVersion的指定也很关键,targerVersion是我们保持应用向前兼容的主要方式。 Android系统在不停的升级的过程中,有很多API的行为在新的版本发生了变化,如果我们的targetVersion低于目标设备的API版本的时候,在目标设备上运行的时候会根据我们的targetVersion调用我们targetVersion对应的ApI版本的方法,从而保证我们的应用的行为能够正确执行。所以如果要改动targetVersion一定要对应用进行完整的测试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值