React-Native:如何打开本地捆绑的二进制文件

React-Native: How to open locally bundled binary file

我正在编写一个 react-native 应用程序,我希望它使用包含设备固件更新的 zip 文件进行部署。

在让用户发送更新之前,我需要我的代码来打开 zip 并对其内容进行一些验证。

我发现了很多压缩处理 NPM 包,所以我需要做的就是加载文件内容,这样我就可以将它提供给其中一个。

这似乎是一个非常基本的问题,所以我确定我在某处遗漏了一段文档,但我已经进入第三个小时尝试加载此文件的内容,但没有成功。

我很确定我可以手动将 zip 文件放入适当的 androidios 资源目录,但这似乎是一条难以维护的道路。

部分解决方案:

修改android/app/build.gradle,并添加

task copyData(type: Copy) {
    from '../../firmware/fw.zip'
    into 'src/main/assets/raw/firmware'
}
preBuild.dependsOn copyData

这将至少确保每次构建时都复制该文件,然后可用于 ReactNativeFs.readFileAssets('raw/firmware/fw.zip', 'base64')。我并不 完全 激动,因为加载文件时我仍然需要 iOS/android 依赖代码,但至少它现在正在加载。

提示:注意 gradle 中的语法。 into src/main/assets/myFirmware.zip 将创建一个名为 myFirmware.zip 的目录,并将您的 zip 文件放在它下面。然后 readFileAssets 仍然会失败,因为它在您的路径中找到目录,而不是文件。

几个月后我再次遇到这个问题(我显然是唯一需要在 react-native 中打包 .zips 的人),上面的答案对 iOS 无效。所以我将 .zips 编码为 base64,将它们放入 .js 文件中,然后使用 import 从这些 .js 文件中获取数据。这实际上看起来像是一个有点老套但又灵活的长期解决方案,而不必弄乱与平台相关的文件位置。

查看我的新问题的完整答案: