如何解决调试版本中的 64K 引用限制?

问题描述 投票:0回答:1

我开发了一个从一开始就用

minSdkVersion 23
设计的应用程序。我最近意识到,只需很少的工作(基本上只是关闭实际需要 SDK > 19 的少数方法调用),我就可以让应用程序在 SDK >= 19 上运行,并提供大部分功能,因此我降低了
minSdkVersion 
到 19 - 很快就达到了 64K 参考限制

发布构建很好,因为我的 Gradle 配置对发布构建进行了 R8 最小化,甚至日常调试构建也很好,因为 Android Studio 足够智能,可以在构建调试构建并将其部署到连接的设备时自动启用 multidex运行 Android 5.0 或更高版本。仅当独立调试版本(例如,来自我的 GitHub Workflow CI 运行程序)或当我实际上想要将调试版本部署到 5.0 之前的设备时,才会出现此问题。

对于这种情况,建议的解决方案是什么?该文档建议删除不必要的依赖项,但我一开始并没有使用太多依赖项。我可以为调试版本启用缩小功能,但出于性能原因,Android Studio 以及在线文档建议不要这样做。我可以手动配置 multidex,但这样做所需的对应用程序的更改感觉过于侵入和剧烈,因为在不进行缩小工作的情况下获得独立和 5.0 之前的调试版本的好处有限。

我在已发布的 Gradle 配置中启用了调试构建的缩小功能,但在实际开发过程中手动禁用它。这可行,但感觉很笨拙。有更好的解决办法吗?

android gradle minify android-multidex
1个回答
0
投票

不要降低它。你知道世界上使用 SDK 19 的设备有多少吗?过去几个月,全球从 Play 商店下载的设备中,只有不到 1.8% 使用的是 23 以下的版本。您需要添加大量工作来支持它们。还要考虑您的受众 - 这是全球范围内的数字,如果您的目标受众是美国或欧盟,则该数字将低于 0.1%(这些数字未公布,但最古老的设备倾向于亚洲和非洲的较贫穷国家。除非那是您的目标市场,就更不用担心它们了)。

如果您不打算这样做 - 在标准化之前,有一些旧形式的 multidex 应该仍然有效。您需要挖掘有关如何执行此操作的帖子,因为它很笨重。

如果您真的不想使用多重分包 - 您实际上必须将整个应用程序重写为最小化函数调用的样式。不要使用任何库,因为它们不会以这种风格编写,并且现代 Android 库和风格倾向于使用大量函数调用和 lambda。可以做到,但我想不出这样做的好理由。

不完全符合您的要求,但我也对此发表评论 - 23 低于您的目标。即使是试图瞄准大量受众的大型应用程序也不会再将其最低版本设置得那么低。使用 minVersion 26 可以定位 94% 的设备。使用 28 可以定位 86% 的设备。这两个都是更合理的最小值。关于市场和版本分发的同样的争论也适用。如果它已经有效,我不会改变它(还),但将来我会考虑由于无法访问更新的功能而增加了多少额外的工作以及花费额外的时间来编写解决方案,并考虑它是否实际上值得花时间和金钱来支持那些旧版本。

(另请注意,我抛出的所有这些数字都是滞后指标。这些数字不断下降。因此,如果您正在考虑即将构建一个应用程序,请在决定做什么之前考虑 3-6 个月的额外下降用作最低版本。

© www.soinside.com 2019 - 2024. All rights reserved.