简评:或许在 Android 应用身后的巨石开始滚起来了。
最近 Google 对于 Play Store 应用 targetSdkVersion 的最低要求引发了一些开发者的担忧。如果您上架应用的 minSdkVersion 低于 11,那么有必要在最近的几个月开始考虑这个问题了。
在十二月中旬,Google 宣布了从 2018 年开始,在 Play Store 所发布应用(无论是新应用或是旧应用更新)的 targetSdkVersion 需要为 26(Android O) 或以上。对于新应用将从 2018 年 8 月开始执行,对于旧应用的更新从 2018 年 11 月开始执行。并且这将是一个持续的过程,比如在 2019 年对应用 targetSdkVersion
的最低要求将上升到 Android P,以此类推。
而从 v26.0.0 开始,Android support 库的 minSdkVersion 提高到了 14(Android 4.0)。因此,对于维护旧设备应用的开发者来说就会遇到些麻烦了:
如果尝试在 Play Store 发布 targetSdkVersion 低于 26 的应用,那么会被 Play Store 拒绝。
如果将应用的 targetSdkVersion 提升到 26 或以上。那 Android Studio 会提示 support 库和 targetSdkVersion 版本不匹配。
如果再提高 support 库的版本来匹配 targetSdkVersion,由于 support 库的 minSdkVersion 为 14,那么还得提高应用的 minSdkVersion 来匹配 support 库的 minSdkVersion。
因此,Play Store 和 support 库之间对于 SDK 版本要求的提升,一定程度上会帮助淘汰掉部分老旧设备。并且,预计 Google 在未来的几年还将进一步提高 support 库的 minSdkVersion(下一次可能是升级到 21)。
按照 Google 的说法,这样做的部分原因是出于安全因素的考虑。淘汰掉支持老旧设备的应用能促使用户购买替代的设备(或许也有助于各手机厂商快速升级自家 ROM 所基于的 Android 版本),从而提高整体的安全性。
不过,不是所有的开发者都对这一举动感到高兴。对于 Google 的这项措施,作为一名必须维护老旧应用的开发者可以采取的做法:
使用 manifest merger 和相关技术来使用较新版本的 support 库。不过这种做法是很有风险的,因为 Google 已经计划在 support 库中删除一些废弃的方法和代码,如果采取这种做法,请非常彻底的测试。
使用 Gradle 的 //noinspection GradleCompatible 注释来消除错误提示。这样你就可以继续使用 v25.3.1 的 support 库,并将应用的 targetSdkVersion 改为 26 来满足 Play Store 的要求。这要比上面的做法更安全,但风险会随着所用 support 库的 minSdkVersion 和 Play Store 要求的 targetSdkVersion 版本差距的逐渐增大而增加。
为旧设备用户使用其他的应用分发渠道。
停止使用 support 库,虽然这不太现实。
去自己维护或使用别人维护的 support 库的分支来代替官方库,保证能向下兼容到更低的版本。
去向 Google 反应不要强制要求应用的 targetSdkVersion,虽然很有可能他们不会听。
最后,即使你应用当前的 minSdkVersion 已经是 14 或更高了,你也需要开始思考在未来的几年 Google 可能再次提升 support 库的 minSdkVersion 的这一事实。如果没有别的办法,可以事先与用户建立起沟通渠道,让他们了解到这些问题和你们的计划。