跨平台React Native鸿蒙开发案例十一:如何bundle在rawfile中推入沙箱
本文介绍了向HarmonyOS应用沙箱推送文件的两种方法:1)通过rawfile资源管理将bundle写入沙箱路径;2)使用HDC工具结合FTP协议推送文件。重点说明了应用沙箱路径与物理路径的映射关系,以及调试时切换应用视角的方法。针对HDC推送的权限限制问题,提供了启用网络权限、启动BFTPD服务和使用FTP命令的具体操作步骤,并强调需注意权限配置和路径正确性。通过代码示例和图表详细展示了文件推
·
rawfile推入沙箱
有两种方式可以向沙箱推入bundle
1. bundle在rawfile中推入沙箱
// 将bundlejs下载并保存到沙箱
let uint8Array = await this.rnAbility.context.resourceManager.getRawFileContent('rawfile/bundle/bp/sandbox.harmony.bundle')
let rawBuffer = uint8Array.buffer
let num = rawBuffer.byteLength
// 获取沙箱路径
const sandboxDir = this.rnAbility.context.filesDir
const bundlePath = sandboxDir + '/' + this.bundlePath
let stream = fs.createStreamSync(bundlePath, 'w')
stream.writeSync(rawBuffer)
stream.closeSync()
this.hasBundle = true
应用沙箱路径和调试进程视角下的真实物理路径
在应用沙箱路径下读写文件,经过映射转换,实际读写的是在hdc进程视角下看到真实物理路径中的应用文件,其对应关系如下表所示。

开发示例
以应用包com.ohos.example为例,如果是在example的应用沙箱路径“/data/storage/el1/bundle”下读写文件,从上表可知,对应的真实物理路径为“/data/app/el1/bundle/public/”,即“/data/app/el1/bundle/public/com.ohos.example”。
推送命令示例如下:
hdc file send ${待推送文件的本地路径} /data/app/el1/bundle/public/com.ohos.example/
切换应用沙箱视角
在调试过程中,如果权限不对或文件不存在,开发者需要从调试进程视角切换为应用视角,以便直观分析权限及文件目录问题。视角切换命令如下:
hdc shell // 进入shell
ps -ef|grep [hapName] // 通过ps命令找到对应应用的pid
nsenter -t [hapPid] -m /bin/sh // 通过上一步找到的应用pid进入对应应用的沙箱环境中
执行完成后,即切换到了应用视角,该视角下的目录路径为应用沙箱路径,可以去排查沙箱路径相关问题。
向应用沙箱推送文件时,需通过华为开发者工具(HDC)结合FTP协议操作,但需注意权限限制和正确路径配置。
权限与路径限制
- 权限问题:从API11开始,HDC命令行默认以shell用户权限运行,无法直接访问应用沙箱目录(如
/data/storage/el2/base/),尝试推送文件会报Permission denied错误 。 - 可写目录:仅
/data/local/tmp/目录可被shell用户写入,但应用代码无法读取该目录的文件 。
正确操作方法
- 启用网络权限
在应用的module.json5中添加网络权限:"requestPermissions": [ { "name": "ohos.permission.INTERNET" } ] - 启动BFTPD服务
在设备侧执行命令启动沙箱FTP服务:hdc shell bftpd -p <端口号>

3. 使用FTP命令推送文件
通过ftpget命令将文件推送到沙箱目录:
hdc shell ftpget -p <端口号> -p guest -u anonymous localhost -s <本地文件路径> <沙箱目标路径>

注意事项
- 沙箱文件需通过应用内代码读取,外部直接写入的文件可能无法被访问 。
- 真机设备需确保应用已正确配置网络权限并启动BFTPD服务 。
欢迎大家加入开源鸿蒙跨平台开发者社区,一起共建开源鸿蒙跨平台生态。
更多推荐

所有评论(0)