【问题标题】:How to create APK Expansion Files for assets within flutter如何为 Flutter 中的资产创建 APK 扩展文件
【发布时间】:2019-06-05 19:47:48
【问题描述】:

我创建了一个包含大小约为 450mb 的视频资源的 Flutter 应用。我已在 Apple 应用商店中成功发布了该应用。但 Google Play 不接受我的 APK,因为它超过了 200mb 的限制。我尝试采用创建 APK 扩展文件的方法作为推荐的工作流程。我已经阅读了所有可用的关于扩展文件的 Android 文档,但我仍然无法弄清楚如何使用颤振来实现它们。

如何在 Flutter 应用中实现和访问 APK 扩展文件中的资产?

【问题讨论】:

    标签: flutter


    【解决方案1】:

    你会从中获得一点乐趣。基本上,在有人实现插件来访问 APK 扩展文件之前,您将不得不编写 java 代码来连接到 Flutter。

    这并不难,只是意味着您将不得不了解Platform Channels 并编写一些原生android 代码。文档在解释平台通道方面可能比我做得更好,但基本上最简单的方法是使用 MethodChannel 将数据从 dart 传递到本地,反之亦然。

    您首先要做的是设置一个方法通道来启动此过程并使用getObbFolder 之类的名称调用它。


    在 android 端,您需要做的第一件事是确保您的应用确实下载了文件。根据android documentation,您不能保证它们会一直存在,因此您需要编写逻辑来下载它们。我建议使用他们提供的Download Library,因为有各种各样的事情需要担心,比如设备存储空间不足、网络连接、显示进度等。我认为这方面的文档比较简单(如果你有问题我建议您提出一个特定的新问题。


    完成此操作后,您需要获取文件的路径,并在需要时请求读取该文件的权限。某些 android 版本和其他版本中的某些设备(老实说,这听起来有点像废话),您需要读取文件的权限,而在其他版本中则不需要。因此,如果尝试失败,最好只是尝试并请求许可。

    获取使用中保存的目录context.getObbDir()

    那么这是从 android 文档中实现的一种方法:

     File obb = new File(obb_filename);
     boolean open_failed = false;
    
     try {
         BufferedReader br = new BufferedReader(new FileReader(obb));
         open_failed = false;
         ReadObbFile(br);
     } catch (IOException e) {
         open_failed = true;
     }
    
     if (open_failed) {
         // request READ_EXTERNAL_STORAGE permission before reading OBB file
         ReadObbFileWithPermission();
     }
    

    对于不进行运行时权限检查的版本,请将其添加到您的应用程序清单中:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    

    Android 不建议总是请求权限,因为有时 Obb 文件夹不需要 READ_EXTERNAL_STORAGE 权限。


    现在您有两个选择。一种是您可以将该路径传递回flutter,然后使用flutter的file reading对数据进行处理,如果文件是您可以直接读取的文件。如果不是,您可以使用 Flutter 或使用 java/kotlin 解压它,然后将路径传回解压后的文件。

    如果你确实选择从 android 解压文件,你应该把它放到 Flutter 知道的目录之一(例如使用 path_provider 插件),或者写到你想要的任何地方(并且有权限)然后简单地传递回到颤动的路径。

    希望有帮助!

    【讨论】:

    • 非常感谢您给我正确的提示,下一步该去哪里!
    猜你喜欢
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2012-01-23
    • 2019-04-04
    • 1970-01-01
    • 2018-04-02
    相关资源
    最近更新 更多