不同 API 级别的多个 APK 或单个 APK?

Multiple APKs or single APK for different API levels?

我有一个包含我的应用程序 运行 的 APK 文件,至少 API 21 以便我可以最好地支持 material 设计功能。由于 Android Lollipop (API 21) 仅在 12.4% of devices 上运行,我自然希望也支持较低的 APIs。为 API v21 和低于 v21 创建具有不同布局的应用程序的最佳方法是什么?我应该创建两个不同的应用程序,一个针对 v21 进行了优化,一个针对低于 v21 的版本进行了优化,还是有更简单的方法来实现它?

谢谢!

您不应构建多个 APK,因为这会成为维护的噩梦。

使用 Android Support Library and the Android Design Library 以利用最新的平台功能,同时还向后移植到更早的 API 级别。

看,您可以创建多个应用程序并且可以使用 Android 的支持库。(Android 支持库是通过处理小事情来实现这一目标的最佳资源之一为你)。选择永远是你的选择。

对于许多具有针对较新平台版本的设计或其他优化的应用程序来说,这是一个常见问题(不仅仅是 API 21+ ... 但是当 API 25 出现时呢? )

做出此决定之前需要考虑多个因素 - 一些是编程方面的,一些是组织方面的。 Android 有许多功能支持在同一个应用程序中向后兼容。资源文件夹、检查平台的静态方法 API、兼容性库。一些组织对支持多个应用程序的想法犹豫不决。

以下是您可能需要为自己的环境确定优先级的列表:

  1. 您能否将支持多个 API 所需的资源文件夹限制在可接受的复杂程度?管理一些额外的布局 and/or 图像文件夹非常容易。但是对于单个 ActivityFragment 来说,它对许多布局的依赖性很强,然后支持许多屏幕密度以及设备尺寸……您最好将它们分成不同的应用程序以降低复杂性。

  2. 您是否有多个需要确定设备的嵌套对象依赖关系API?如果你有一层又一层的对象,它们都有不同的 API 要求(对象 A 用于 API 21+,对象 B 仅用于 API 19,等等,然后对象 AA 是对于 API 17+ 并且还取决于对象 A 或对象 B,具体取决于 API) - 您可能被迫进行单一应用程序开发。或者您可能被迫创建库和单独的 APK,以便您可以正确测试您的代码。

  3. 商家会明白"single APK"不等于"cheaper than multiple APK's"吗?有时将开发分成单独的 APK 会降低复杂性并增加开发输出,同时降低 QA 的成本。在其他时候,他们将经历单独的发布批准和其他 "red tape" 活动,这使得分离效率低下。此外,有时开发人员会偏爱在 "the latest and greatest" API 目标中工作,而在滞后的目标 API 中质量会受到影响。

  4. 您能否支持库或子模块开发,以便您可以对多个 APK 有效地重用代码?分离 APK 后,可能会倾向于对每个代码库不够熟悉,无法有效地重用组件。存在于一个 APK 中的问题可能会在没有意识到的情况下得到解决,而另一个 APK 中也解决了类似(但不完全相同)的问题。

一般来说,保持相同的代码库会增加复杂性,但有利于保持专注于一组代码并让管理层满意。但是,特定情况(例如通知应用程序 - Lollipop 中通知的本质发生了变化)可能会导致需要创建一个新的 APK,而这可能会大大减少对旧版本的支持,这可能是最好的采用新版本达到饱和。

Google 允许您为单个应用上传针对不同 API(甚至设备)的多个 APK。这是额外的灵活性 - 以及额外的应用商店维护。

祝你好运。