我创建了一个Flutter应用,其中包含大约450mb的视频资源。我已经在Apple应用商店中成功发布了该应用。但是Google Play不接受我的APK,因为它超过了200mb的限制。我尝试将创建APK扩展文件的方法作为推荐的工作流程。我已经阅读了所有有关扩展文件的Android文档,但仍然不知道如何使用flutter来实现它们。
如何在Flutter应用中实现和访问APK扩展文件中的资产?
答案 0 :(得分:0)
您将对此感到一点乐趣。基本上,除非有人实现了用于访问APK扩展文件的插件,否则您将不得不编写Java代码才能连接到Flutter。
这并不是非常困难,这只是意味着您将必须学习Platform Channels并编写一些本机android代码。该文档在解释平台通道方面可能比我做得更好,但是基本上,最简单的方法是使用MethodChannel将数据从dart传递到本机,反之亦然。
您要做的是设置一个方法通道来启动此过程,并使用getObbFolder
之类的名称进行调用。
在android方面,您需要做的第一件事就是确保您的应用程序实际下载了文件。根据{{3}},您不能保证它们会一直存在,因此您需要编写逻辑来下载它们。我建议使用它们提供的android documentation,因为有很多事情需要担心,例如设备的存储空间不足,网络连接,显示进度等。我认为有关文档非常简单(并且如果您遇到问题,建议您提出一个特定的新问题。
完成此操作后,需要获取文件的路径,并在需要时请求读取权限。某些android版本和其他版本的某些设备(说实话,听起来有些废话),您需要读取文件的权限,而在其他版本中则不需要。因此,如果尝试失败,最好尝试寻求许可。
要获取目录,该目录已在使用中Download Library
然后用这种方法从android docs中做到这一点:
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的context.getObbDir()
对数据进行某些操作(如果文件可以直接读取)。如果不是,则可以使用flutter或使用java / kotlin对其进行解压缩,然后将路径传递回解压缩的文件。
如果您确实选择从android解压缩文件,则应将其处理到flutter知道的目录之一(例如,使用path_provider插件),或者写到您想要的任何位置(并具有权限),然后简单地传递回到颤抖的路径。
希望有帮助!