首页 > 解决方案 > 如何测试和部署资产超过 150 MB 的 Flutter 应用?

问题描述

我的 Flutter 应用程序中的资产总共约为 300 MB(大量媒体文件,这是应用程序的精髓,不能明智地削减)。

据我了解,有两种方法可以将应用程序上传到 Play 商店:

  1. 包含适用于所有平台的二进制文件的 APK 文件(旧版)。看起来APK 限制为 100 MB
  2. 一个 App Bundle(新),它可以让 Play Store 找出哪些位在哪里部署。App Bundle对用户实际下载的内容有 150 MB 的限制。

对于 APK,解决此限制的方法是APK 扩展文件(通常是“obb”文件),最大可达 2 GB。我可以尝试让它与 Flutter 一起使用,但 APK 交付方法有些过时,并且还有其他缺点,例如使用未使用的二进制文件使安装大小膨胀。所以我宁愿不使用这种方法。

对于 App Bundle,类似的机制以动态资产交付的形式存在。根据用户下载资产包的时间,共有三个选项:安装期间、安装后或按需下载。该install-time选项听起来最透明和最简单,并且限制为 1 GB,因此非常适合我的用例。

遗憾的是,Flutter还不支持动态资产交付。幸运的是,在使用install-time交付时,这些资产似乎可以通过AssetManager系统提供的常规类获得。起初我以为 Flutter 可以在不编写任何 Java/Kotlin 代码的情况下选择它们,但不,它使用自己的资产机制,而且除了访问AssetManager. 所以我必须自己做一些跑腿工作才能与 Java 世界交互,但这听起来是可行的。

为了首先创建捆绑包,我遵循了这些步骤现在如何运行应用程序?

flutter run不会产生任何错误,但似乎没有安装资产包,因此在测试期间我的所有资产都丢失了。我怀疑它直接构建了一个 APK,而不是构建一个应用程序包然后从中创建一个 APK。而且因为 IntelliJ IDEA 似乎也调用flutter run或类似的东西,我的调试器和其他 IDE 集成现在没用了。

flutter build appbundle似乎工作并吐出一个.aab文件。为了测试,大概我可以使用bundletool从中创建一个 APK 并安装它,但与 Flutter 通常的亚秒级热重载相比,这将是一个糟糕的开发体验。

这是一个死胡同吗?还有其他方法可以通过 Play 商店交付具有大量资产的应用程序吗?请注意,除非它提供免费和(几乎)无限流量,否则我对外部托管不感兴趣,因为这是一个非商业项目。

(在 iOS 的 App Store 上,限制似乎是 4 GB,没有问任何问题。谁?)

标签: androidfluttergoogle-playassetsandroid-assets

解决方案


对于部署,现在使用延迟组件(在 2021 年 3 月左右引入)支持这一点。 Flutter wiki 中的技术细节

使用延迟组件,您可以通过播放功能交付(尚无播放资产交付)分发大型资产。

在我看来,文档有点缺乏(尤其是对于仅使用功能来交付资产),但在深入研究源代码 + 反复试验后,我可以通过 Play 商店(给测试人员)分发具有 150MB+ 资产作为动态功能的应用程序。

对于测试,除了您提到的 bundletool 之外,我找不到其他方法。对我来说更糟糕的是,一些延迟组件 API 在 bundletool 构建的 apk 和 Play Store 构建的 apk 上的工作方式似乎不同,因此测试可能比看起来更加耗时和痛苦。


推荐阅读