【问题标题】:Is there a size limit to a Android Gradle build?Android Gradle 构建有大小限制吗?
【发布时间】:2021-01-10 01:37:43
【问题描述】:

我有一个包含 3000 张照片的 Android 项目,需要离线使用。当我在构建中包含所有照片时,构建失败。当我删除其中一些时,构建成功。 我已将照片放在安装时下载的两个动态模块中。

这里是 gradle 扫描供参考:https://scans.gradle.com/s/nn6eo527qvge6

这纯粹是尺寸问题吗?如果是,我该如何解决?

【问题讨论】:

标签: android gradle android-gradle-plugin build.gradle gradlew


【解决方案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,下载会暂停,并且需要明确同意才能继续使用移动数据连接。

【讨论】:

  • 我将尝试资产交付路线,看看这是否适用于我的用例并在此处恢复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多