Android 中的功能向后兼容性

Posted

技术标签:

【中文标题】Android 中的功能向后兼容性【英文标题】:Functional backwards compatibility in Android 【发布时间】:2017-10-13 07:48:09 【问题描述】:

我在使用 android 6.0.1 的设备上运行开发的应用程序时遇到了一些错误,而该应用程序可以在使用 Android 2.3.6 的设备上完美运行。我为这两种设备使用相同的构建应用程序(为 Android API 10 编译)。

错误是关于应用程序在新 Activity 启动和选择联系人时关闭,我知道如何解决该设备的这些问题,但问题是从我所读到的内容中,我认为 android 没有功能向后兼容的问题(可能存在一些图形问题,但没有什么会导致应用程序崩溃,因为它正在发生在我身上)。

所以我想知道这是否只是发生在我身上的一些异常事件,最有可能的是,一旦我在更多的 android 版本中检查这些错误并修复应用程序的代码以运行在他们身上,类似这样的错误不会再次发生,或者如果这样的事件相对常见。如果是这种情况,必须检查并可能针对很多版本进行相应的开发听起来很痛苦,所以我想知道是否有一些捷径,即使它不能提供 100% 的安全性来正确安装应用程序功能开发,它提供了很好的安全性。

【问题讨论】:

由于应用程序的目标版本早于棉花糖,因此它不会在运行时检查权限。也许您的应用需要用户必须在设置中明确允许的权限 @nandsito 感谢您的评论,问题不存在。无论如何,问题的目的是了解在不同版本的 Android 中运行应用程序时这些类型的错误是否常见,如果是,如何正确处理它们,我只是在讲述我的应用程序上的错误为了更清楚我指的是哪种类型的错误。 向后兼容性通常是理论上理想的软件属性,当然,在 Android 中也是如此。但 Android 的历史表明,它并没有那么顺利,特别是当您看到 API 从 Gingerbread 或 Ice Cream Sandwich 等古老版本到 Nougat/O 的变化时。有些 API 比其他 API 更稳定,因此出现 API 版本问题的可能性取决于您使用的 API。但在一般意义上,Android API 变化很大,而且变化很大。如果没有更新,我不希望应用在两三年内都能正常运行 【参考方案1】:

我认为一般来说应用程序是向前兼容的,但前提是您确保不使用私有或未记录的 api。

例如,当我第一次开始使用 android 时,网上有很多关于如何发送和接收短信的信息,而谷歌文档中根本没有提到这些信息。使用该信息(未记录的 api)会导致我的应用程序在 KitKat 出现并为该特定目的引入并正式记录的 api 时中断,因为同时他们删除了未记录的 api 中可用的功能。请参阅此处查看details。上面的例子。

以下是有关兼容性的一些信息的链接: https://developer.android.com/guide/topics/manifest/uses-sdk-element.html

以及相关部分的截图

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

因为几乎所有对框架 API 的更改都是附加的,所以 使用任何给定版本的 API 开发的 Android 应用程序(如 由其 API 级别指定)与更高版本向前兼容 Android 平台和更高的 API 级别。该应用程序应 能够在所有更高版本的 Android 平台上运行,除了 在应用程序使用 API 的一部分的孤立情况下, 后来由于某种原因被删除了。

前向兼容性很重要,因为许多基于 Android 的 设备接收无线 (OTA) 系统更新。用户可以 安装您的应用程序并成功使用它,然后接收 OTA 更新到新版本的 Android 平台。一旦 更新已安装,您的应用程序将在新的运行时运行 环境版本,但具有 API 和系统的版本 您的应用程序所依赖的功能。

在某些情况下,API 下方的更改,例如底层的更改 系统本身,可能会影响您的应用程序在新版本中运行时 环境。因此,它对您很重要,因为 应用程序开发人员,了解应用程序的外观和 在每个系统环境中运行。帮助您测试您的应用程序 在各种版本的 Android 平台上,Android SDK 包括 您可以下载的多个平台。每个平台包括一个 您可以在 AVD 中运行的兼容系统映像,以测试您的 应用。

【讨论】:

以上是关于Android 中的功能向后兼容性的主要内容,如果未能解决你的问题,请参考以下文章

Android向后兼容性

Android Studio 上的向后兼容性 (AppCompat)

Material Design 向后兼容性

如何将图像保存在 android Q 的子目录中,同时保持向后兼容

Android targetSdk向后兼容

在向后兼容的应用程序中使用 ?android:attr/