我最近在Play商店发布了一个简单的闹钟应用程序,使用Gradle,compileSdkVersion = 23,targetSdkVersion = 23,minSdkVersion = 15。
我原本认为基于Android设计原则,即使用户升级到Android 7.0,我的应用程序仍然可以正常运行而无需进行任何更新,但事实证明情况并非如此。相反,每当闹钟应该关闭时,应用程序崩溃。我试图研究这个问题,包括查看7.0中的新行为更改,但没有具体的我能找到会引起问题的内容。 我看到的唯一可能的解决方案是将compileSdkVersion更改为最新的(这将是24),但我不确定应该是它。
该应用程序很简单,理想情况下我不想更新它,除非客户端请求了特定的更改或者弹出了一个错误。所以我的问题是:我如何确保我的应用程序的向前兼容性,这样我就不必为每个发布的Android新版本发布更新,这甚至可能?该应用有效在使用冰淇淋三明治到棉花糖的手机上很好,但是当手机升级为牛轧糖时它不再有效。值得庆幸的是,下载基础足够小,我是目前在Nougat上的唯一用户,但我想在任何其他用户遇到问题之前解决问题。
如果需要,我很乐意分享代码/详细信息,但我暂时保留了它,希望我错过了一些简单的内容。
谢谢!
答案 0 :(得分:2)
我看到的唯一可能的解决方案是将compileSdkVersion更改为最新的
这对运行时行为没有影响,除非您还要更改Java代码以在较新的设备上执行不同的操作(例如,开始使用某些API Level 24类和方法)。
如何确保我的应用程序的向前兼容性,这样我就不必为每个发布的Android新版本发布更新
"确保"任何大小的应用都是不可能的。变量太多了。
通常,转发兼容性"只是工作"。新版Android上的许多行为更改仅在您提升targetSdkVersion
时生效。例如,我在several hundred sample apps中有my book,并且很少会在之前使用的新版Android上直接崩溃。虽然这些示例应用程序中的每一个都相当简单,但它们组合起来可以运行相当多的Android SDK。
我遇到问题的那些地方是因为我认为解决某些问题的正确方法被证明是错误的。但是,在较旧版本的Android上,它并没有以一种不会崩溃的方式出错。修复应用程序以正确的方式解决问题通常可以解决新旧版Android上的问题。
但是,Android存在漏洞。回归 - X曾经工作并且应该工作但现在不再有效的地方 - 来自每个实质性的Android版本。当我发现它们时,我会对它们进行博客。并且,在这些情况下,如果回归影响您,则几乎没有办法改变您的代码。