gradle 如何在调试版本中绕过64K引用限制?

qxsslcnc  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(74)

我开发了一个从一开始就使用minSdkVersion 23设计的应用程序。我最近意识到,只需最少的工作(基本上只是关闭实际需要SDK > 19的少数方法调用),我就可以让应用程序在SDK >= 19上运行,并且大部分功能都可用,所以我将minSdkVersion降低到19 -很快就遇到了64K reference limit
发布版本没有问题,因为我的Gradle配置对发布版本进行了R8最小化,甚至日常调试版本也没有问题,因为Android Studio足够智能,可以在构建调试版本并将其部署到运行Android 5.0或更高版本的连接设备时自动启用multidex。(例如,从我的GitHub工作流CI运行器)或当我实际上想要将调试构建部署到5.0之前的设备时。
对于这种情况,推荐的解决方案是什么?文档建议删除不必要的依赖项,但我开始并没有使用太多依赖项。我可以为调试版本启用缩小功能,但Android Studio以及在线文档出于性能原因建议不要这样做。我可以手动配置multidex,但是对应用程序的必要更改感觉太过侵入和激烈,因为在没有缩小工作的情况下获得独立和5.0之前的调试版本的好处有限。
我已经在发布的Gradle配置中启用了调试版本的缩小功能,但在实际开发过程中手动禁用了它。这很有效,但感觉很笨拙。有更好的解决方案吗?

wixjitnu

wixjitnu1#

不要降低它,你知道世界上有多少设备使用SDK 19吗?过去几个月从Play商店下载的全球设备中,只有不到1.8%使用的是23以下的版本。您将添加重要的工作来支持它们。还要考虑您的受众-这是全球范围内的数字,如果你的目标受众是美国或欧盟,那么这个数字将低于0.1%(这些数字没有公布,但最古老的设备倾向于亚洲和非洲的贫穷国家。除非这是你的目标市场,否则就更不用担心他们了)。
如果你不打算这样做--在它成为标准化之前,有一些旧的multidex形式应该仍然可以工作。你需要挖掘关于如何做到这一点的帖子,因为它很笨重。
如果你真的不想使用multidex,那么你实际上必须重写整个应用程序,使其具有最小化函数调用的风格。不要使用任何库,因为它们不会以这种风格编写,而现代的Android库和风格往往会使用大量的函数调用和函数调用。这是可以做到的,但我想不出一个很好的理由去做。
不完全是你所要求的,但我也会评论这一点- 23比你应该瞄准的要低。即使是试图瞄准大量受众的大型应用程序也不会再将其最低版本设置得那么低。你可以通过使用26的最低版本来瞄准94%的设备。你可以做到86%与28。这两个都是更合理的最低限度。关于市场和版本分布的相同论点适用。如果它已经工作,我不会改变它(还),但在未来,我会考虑您因无法访问新功能而增加了多少额外的工作,以及花费额外的时间来编写代码,并考虑是否值得花费时间和金钱来支持这些旧版本。
(Also请注意,所有这些数字都是滞后指标。这些数字是不断下降的。因此,如果你正在考虑一个应用程序,你只是要建立,在决定什么版本作为你的最低使用3-6个月的额外下降的因素。

相关问题