如何确保我发布的 Android 应用适用于新更新?

How do I ensure my published Android app works with new updates?

我最近在 Play 商店发布了一个简单的闹钟应用程序,利用 Gradle,compileSdkVersion = 23,targetSdkVersion = 23,minSdkVersion = 15。

根据Android设计原则,我曾认为即使用户升级到Android 7.0,我的应用程序仍然可以正常运行而无需进行任何更新,但事实证明并非如此案子。相反,每当警报应该响起时,应用程序就会崩溃。我试图研究这个问题,包括查看 7.0 中的新行为变化,但我找不到任何具体会导致这个问题的东西。 我看到的唯一可能的解决方案是将 compileSdkVersion 更改为最新的(即 24),但我不确定是否应该如此。

该应用程序非常简单,理想情况下我不想更新它,除非客户要求进行特定更改或出现错误。所以我的问题是:我如何确保我的应用程序的向前兼容性,这样我就不必为每个发布的 Android 新版本发布更新,这甚至是可能的? 该应用程序在使用 Ice Cream Sandwich to Marshmallow 的 phone 上运行良好,但当 phone 升级到 Nougat 时它不再运行。值得庆幸的是,下载基数很小,我是目前唯一使用牛轧糖的用户,但我想在其他用户遇到麻烦之前解决这个问题。

如果需要,我很乐意分享 code/details,但我暂时保留了它,希望我只是错过了一些简单的东西。

谢谢!

The only potential solution I saw was to change the compileSdkVersion to the latest

这对 运行 时间行为没有影响,除非您也更改 Java 代码以在较新的设备上做一些不同的事情(例如,开始使用一些 API 24 级类 和方法)。

how do I ensure forwards compatibility of my app such that I do not have to release an update for every new version of Android that is released

"Ensure" 对于任何大尺寸的应用程序来说都是不可能的。变数太多了。

通常,转发兼容性"just works"。 Android 新版本的许多行为更改仅在您提高 targetSdkVersion 时生效。例如,我有 several hundred sample apps in my book,应用程序很少会在以前工作的新版本 Android 上彻底崩溃。虽然这些示例应用程序中的每一个都相当微不足道,但它们结合起来使用了相当多的 Android SDK。

那些我 运行 遇到问题的地方是因为我认为解决问题的正确方法被证明是错误的。但是,在 Android 的旧版本上,它在某种程度上是错误的,但并未崩溃。修复应用程序以正确的方式解决问题通常可以解决新旧版本 Android.

上的问题

但是,Android 有错误。回归——X 曾经工作和应该工作但现在不再工作的地方——伴随每个重要的 Android 版本。当我发现他们时,我会写博客。而且,在这些情况下,如果回归影响到您,除了更改您的代码外别无他法。