Android Gradle 构建有大小限制吗?
Posted
技术标签:
【中文标题】Android Gradle 构建有大小限制吗?【英文标题】:Is there a size limit to a Android Gradle build? 【发布时间】:2021-01-10 01:37:43 【问题描述】:我有一个包含 3000 张照片的 android 项目,需要离线使用。当我在构建中包含所有照片时,构建失败。当我删除其中一些时,构建成功。 我已将照片放在安装时下载的两个动态模块中。
这里是 gradle 扫描供参考:https://scans.gradle.com/s/nn6eo527qvge6
这纯粹是尺寸问题吗?如果是,我该如何解决?
【问题讨论】:
成功时大小是多少? 主应用程序 你考虑过developer.android.com/guide/app-bundle/asset-delivery(或developer.android.com/guide/app-bundle/dynamic-delivery)吗? :) @MartinMarconcini,我实际上正在使用动态交付,但无法弄清楚这些模块大小限制是什么。 【参考方案1】:这纯粹是尺寸问题吗
大概吧。
我该如何解决?
首先将您的照片移出res/drawable-xxhdpi-v4/
并移入assets/
,然后调整使用照片的代码以匹配。
然后,查看生成的 APK 大小,并将其与您预期的应用分发渠道的大小限制(例如,Play 商店的 100MB 限制)进行比较。如果超过该限制,您将需要通过其他方法(例如,APK expansion files)。
【讨论】:
扩展文件不是老技术吗?我正在使用在安装时下载的与主包分开的动态模块。 (编辑问题) 我认为有两个问题。如果模块大于 10MB 我认为动态模块会警告用户,但动态模块也是 Gradle 模块......不是“具有大量资产的 zip 文件”,所以如果(我不知道)一个模块不能比如说大于 150MB,我肯定动态模块也会有同样的限制,但我在 the best practices Google recommends 中找不到此信息。 @Stephan:“但我不明白构建错误以及它们是否与大小相关” - 构建错误,AFAICT,是因为资源占用了太多空间。将照片移至assets/
。
@Stephan:我不知道你会认为一张非高质量的“照片”是什么。可绘制密度专为图标和其他小幅艺术品而设计。
无论你做什么,你当然应该将这些作为 /assets 包含在 drawables 中,我同意@CommonsWare。【参考方案2】:
为了扩展CommonsWare's answer,我认为你应该这样做的方式不是使用Dynamic Modules
,而是使用asset delivery
。它有点“营销”为“游戏”的东西,但它完全不受此限制。
asset-delivery 背后的理念是,您拥有一组资产(在您的案例中为图像),您的应用需要这些资产才能运行。
可以在安装时或稍后“按需”请求此资产“包”。这一切都令人困惑,因为Dynamic Delivery 听起来非常相似。但是,正如asset-delivery page 顶部所述,它们使用不同的 API。
老实说,我没有使用过 Asset Delivery,因此请持保留态度,并保持手头的注意事项,例如(和我 quote):
如果下载大于 150 MB 且用户未连接到 Wi-Fi,则在用户明确同意使用移动数据连接继续下载之前,下载不会开始。同样,如果下载量很大并且用户失去了 Wi-Fi,下载会暂停,并且需要明确同意才能继续使用移动数据连接。
【讨论】:
我将尝试资产交付路线,看看这是否适用于我的用例并在此处恢复。以上是关于Android Gradle 构建有大小限制吗?的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 命令行 (devenv) 和 IDE 构建有啥区别?