你会从中获得一点乐趣。基本上,在有人实现插件来访问 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 插件),或者写到你想要的任何地方(并且有权限)然后简单地传递回到颤动的路径。
希望有帮助!