如何测试和部署具有超过 150 MB 资产的 Flutter 应用程序?

Tho*_*mas 6 android assets android-assets google-play flutter

我的 Flutter 应用程序中的资产总共大约 300 MB(大量媒体文件,这是应用程序的本质,不能合理地减少)。

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

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

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

对于 App Bundles,类似的机制以动态资产交付的形式存在。有三个选项,具体取决于用户何时下载资产包:安装期间、安装后或按需。该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,没有问题。谁?)

reT*_*eTs 0

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

借助延迟组件,您可以通过 Play Feature Delivery 分发大型资产(尚无 Play Assets Delivery)。

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

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