我的pubspec.yaml看起来像:pubspec的呢

我有一个大小约为 850 MB (AAB) 的 Flutter 应用程序。这些 850MB 中的大多数是资产视频文件 (750MB)。将其发布到 Google Play 商店的解决方案是使用延迟组件(或在安装后使用私有服务器下载视频文件 – 我现阶段不想这样做)。

问题是我发现关于它的信息很少。这儿这儿:。 stackoverflow 上也有一些问题,大多没有答案。

所以,我的问题:

1. 如果我理解正确,每个组件必须小于 150 MB?正如我所写,视频文件为 750 MB,其中有 1150 个。那么,我需要创建 5 个还是 6 个组件?

现在我的 pubspec.yaml 看起来像:

pubspec.yaml

  assets:
    - assets/
    - assets/db/
    - assets/media/
    - assets/media/video/
    - assets/pics/
    - assets/pics/avatars/

所以,我应该删除这一行:

    - assets/media/video/

并添加:

flutter:
  ...
  deferred-components:
    - name: videoComponent1
      libraries:
        - package:MyAppName/video1.dart
      assets:
        - assets/media/video/video1.mp4
        - assets/media/video/video2.mp4
        ...
        - assets/media/video/video100.mp4
    ...
    - name: videoComponent5
      libraries:
        - package:MyAppName/video5.dart
      assets:
        - assets/media/video/video1000.mp4
        - assets/media/video/video1001.mp4
        ...
        - assets/media/video/video1150.mp4    

这个方法有点费时。我知道我可以使用通配符目录:

      assets:
        - assets/media/video/video1/

但我必须在我的视频播放器小部件中处理这个问题(我正在使用 video_player 插件)。我可以按字母顺序放置文件。例如,我会将名称以字母“A”开头的视频文件放在 video1 包中,将“B”放在 video2 中等等。然后:

if(fileName.substring(0,1)=='a') {
    filePath = 'assets/media/video/video1/$fileName';
  } else if...

但这也是一种乏味的方法。还有其他想法吗? (我无法重命名数据库中的文件-它是官方外部源,并且文件和库会不时更新。

2.仅限资产组件。它们可以通过省略“库”部分来定义。很明显。但是如何使用这些组件呢?文档说:这些仅资产组件必须与服务中的 DeferredComponent 实用程序类一起安装,而不是 loadLibrary()。还有 loadLibrary 方法。如何搭配使用?像这样?

import 'package:flutter/services.dart';
var component = DeferredComponent.installDeferredComponent(componentName : video1);

如何向用户显示组件下载过程仍在进行中?

仅资产组件的文档有点缺乏(在我看来)。我认为文档的第一步是必要的。但是第二步是什么样子的呢?

我想达到什么目标?

在第一次应用程序运行期间(例如在引导屏幕上)下载所有视频文件,并以与任何其他本地资产相同的方式在我的所有小部件中使用它们。 (这正是 installDeferredComponent 方法中记录的内容:通过此方法安装的资产可以通过提供资产的字符串路径以与任何其他本地资产相同的方式访问)。

结果(添加 3.06.22)

我按照文档进行了所有操作,并生成了一个没有错误的 aab 文件。我使用 installDeferredComponent 方法如下:

loadDeferredComponents() async {
    await DeferredComponent.installDeferredComponent(
        componentName: 'videoComponent1');
    await DeferredComponent.installDeferredComponent(
        componentName: 'videoComponent2');
    await DeferredComponent.installDeferredComponent(
        componentName: 'videoComponent3');
    ...
  }

aab 文件看起来不错:

但是当我尝试将其上传到 Google Play 时,我不断收到消息:一个或多个自动生成的多 APK 超出了允许的最大大小 150 MB。

我想我会放弃延迟组件。我真的不知道我做错了什么。

© 版权声明
THE END
喜欢就支持一下吧
点赞281赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容