我的Flutter应用程序中的资产总计约为300 MB(很多媒体文件,这是app的本质,无法合理地剪裁)。
据我所知,有两种方法可以将应用上传到Play商店:
For APKs,解决此限制的方法是APK Expansion Files(通常为“ obb”文件),最大为2 GB。我可以尝试使它与Flutter一起使用,但APK交付方式已过时,并且还有其他缺点,例如使用未使用的二进制文件使安装大小膨胀。因此,我宁愿不使用这种方法。
For App Bundles,以Dynamic Asset Delivery的形式存在类似的机制。根据用户何时下载资产包,共有三个选项:安装期间,安装后立即安装或根据需要下载。 install-time
选项听起来最透明,最简单,并且限制为1 GB,因此对我的用例来说非常有用。
不幸的是,颤振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,没有问题。谁?)
好。因此,看来您的应用程序中有太多视频要播放。 Android PlayStore和Apple AppStore都对应用程序大小有限制。我不建议您随应用程序一起运送所有视频,因为并非所有视频都将由用户播放。您可以提出以下解决方案。