如何测试和部署资产超过 150 MB 的 Flutter 应用?
Posted
技术标签:
【中文标题】如何测试和部署资产超过 150 MB 的 Flutter 应用?【英文标题】:How to test and deploy a Flutter app with more than 150 MB of assets? 【发布时间】:2020-09-11 05:18:40 【问题描述】:我的 Flutter 应用中的资源总共大约 300 MB(大量媒体文件,这是 app 的精髓,不能明智地修剪)。
据我了解,将应用上传到 Play 商店有两种方式:
-
包含适用于所有平台的二进制文件的 APK 文件(旧版)。看起来像APKs are limited to 100 MB。
一个 App Bundle(新),它可以让 Play 商店确定哪些位在哪里部署。 App Bundles have a limit of 150 MB 关于用户实际下载的内容。
对于 APKs,解决此限制的方法是 APK Expansion Files(通常是“obb”文件),最大可达 2 GB。我可以尝试让它与 Flutter 一起使用,但 APK 交付方法有些过时,并且还有其他缺点,例如使用未使用的二进制文件使安装大小膨胀。所以我宁愿不使用这种方法。
对于 App Bundles,类似的机制以 Dynamic Asset Delivery 的形式存在。根据用户下载资产包的时间,共有三个选项:安装期间、安装后或按需下载。 install-time
选项听起来最透明和最简单,并且限制为 1 GB,因此非常适合我的用例。
很遗憾,Flutter does not yet support Dynamic Asset Delivery。幸运的是,当使用install-time
交付时,it looks like 这些资产通过系统提供的常规AssetManager
类变得可用。起初我以为 Flutter 可以在不编写任何 Java/Kotlin 代码的情况下使用它们,但不,它使用自己的资产机制,there is nothing but a proposal 可以访问AssetManager
。所以我必须自己去interact with the Java world做一些跑腿工作,但这听起来可行。
首先要创建捆绑包,I followed these steps。 现在如何运行应用程序?
flutter run
没有产生错误,但似乎没有安装资产包,所以我的所有资产在测试期间都丢失了。我怀疑它直接构建了一个 APK,而不是构建一个应用程序包然后从中创建一个 APK。而且因为 IntelliJ IDEA 似乎也调用了 flutter run
或类似的东西,所以我的调试器和其他 IDE 集成现在没用了。
flutter build appbundle
似乎工作并吐出一个.aab
文件。对于测试,大概我可以使用bundletool 从中创建一个 APK 并安装它,但与 Flutter 通常的亚秒级热重载相比,这将是一种糟糕的开发体验。
这是一个死胡同吗?还有其他方法可以通过 Play 商店交付具有大量资产的应用程序吗?请注意,除非它提供免费和(几乎)无限流量,否则我对外部托管不感兴趣,因为这是一个非商业项目。
(在 ios 的 App Store 上,限制似乎是 4 GB,没有提出任何问题。谁?)
【问题讨论】:
【参考方案1】:对于部署,现在使用 Deferred Components(在 2021 年 3 月左右推出)支持此功能。 Technical details in Flutter wiki
使用延迟组件,您可以通过 Play Feature Delivery 分发大型资产(尚无 Play Assets Delivery)。
在我看来,文档有点缺乏(特别是对于仅使用功能来交付资产),但在深入研究源代码 + 反复试验后,我可以通过 Play Store 分发一个具有 150MB+ 资产的应用程序作为动态功能(到测试人员)。
对于测试,除了你提到的 bundletool 之外,我找不到其他方法。对我来说更糟糕的是,一些延迟组件 API 在 bundletool 构建的 apk 和 Play Store 构建的 apk 上的工作方式似乎不同,因此测试可能比看起来更加耗时和痛苦。
【讨论】:
以上是关于如何测试和部署资产超过 150 MB 的 Flutter 应用?的主要内容,如果未能解决你的问题,请参考以下文章
Android App Bundle:Google Play 150MB 限制似乎包含动态功能模块大小?
是否可以使用我的机器人在 discord.py 中附加大于 150Mb 的文件