HarmonyOS 鸿蒙Next系统中是否存在一个应用可访问且 hdc 也可访问的公共目录?

HarmonyOS 鸿蒙Next系统中是否存在一个应用可访问且 hdc 也可访问的公共目录? 您好,

我在 HarmonyOS 应用开发过程中,有一个需求:

希望能找到一个 应用内部可以正常读写,同时也能通过 hdc 命令访问(推送 / 读取) 的公共目录,用于在开发或测试阶段传输文件。

目前我尝试了以下几种路径:

应用沙箱目录

  • 应用可访问 ✅
  • hdc 推送失败 ❌(提示 permission denied)

公共媒体目录 ​​​​​​​/storage/media/100/local/ /storage/media/100/local/files/ hdc 推送失败 ❌(提示 permission denied)

临时目录

  • hdc 可推送 ✅
  • 应用无访问权限 ❌

我的需求是:

想要一个路径,能同时满足

  • hdc 命令可推送文件;

  • 应用内代码可以正常读写;

  • 无需 root 或系统签名。

请问鸿蒙系统是否有这样的 官方推荐路径

如果没有,请问在正式开发或调试阶段,官方推荐的 hdc 与应用间文件交换方式 是哪一种?

谢谢!


更多关于HarmonyOS 鸿蒙Next系统中是否存在一个应用可访问且 hdc 也可访问的公共目录?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

有的,应用沙箱就满足你的需求。

命令行方式访问应用沙箱-访问设备文件-应用调试-编写与调试应用 - 华为HarmonyOS开发者

从 API 15 开始,支持通过 hdc 工具访问 debug 应用的沙箱目录,推荐开发者使用此种方式。更多关于命令行工具 hdc 的说明请参见 hdc工具使用指导

可以完成以下操作:

a. 通过 hdc 命令访问沙箱文件目录,创建目录文件,删除指定目录下的文件。

b. 通过 hdc 命令往应用沙箱目录中发送文件,从沙箱目录中下载文件到本地计算机。

更多关于HarmonyOS 鸿蒙Next系统中是否存在一个应用可访问且 hdc 也可访问的公共目录?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


你可以联机看一下,实际的路径

具体的做法为使用DevEco Studio的File Browser查看。

之后再拷贝该路径,如下图

cke_1626.png

HarmonyOS Next系统中,应用可通过context.filesDir访问私有目录,hdc可通过hdc file recv/send访问应用私有目录。应用间共享文件可使用FileShare扩展能力。

在HarmonyOS Next中,确实存在一个满足你需求的官方推荐路径:应用的外部文件目录

具体路径为:/storage/media/100/local/files/{your_package_name}/

这个目录的设计目的就是为了兼顾应用访问和开发调试。其特点如下:

  1. 应用可访问:你的应用可以通过标准的文件API(如ohos.file.fs)对这个目录进行读写操作,权限是默认拥有的。
  2. hdc可访问:你可以使用hdc file send命令将文件推送到此目录,或使用hdc file recv从此目录拉取文件。这是鸿蒙开发者工具链支持的标准调试操作。
  3. 无需特殊权限:该目录在应用安装时自动创建,应用具备其所属目录的访问权,hdc在调试模式下也拥有相应权限,不需要root或系统签名。

操作示例:

  • 应用内读写:使用getExternalFilesDir()或类似接口获取此目录的File对象进行操作。
  • 通过hdc推送文件
    hdc file send {本地文件路径} /storage/media/100/local/files/{包名}/{目标文件名}
    
  • 通过hdc拉取文件
    hdc file recv /storage/media/100/local/files/{包名}/{设备端文件名} {本地保存路径}
    

这个目录是HarmonyOS Next为应用与外部(包括调试工具)进行文件交换设计的主要官方路径。它平衡了数据隔离(每个应用在自己的子目录下)和调试便利性。

你之前尝试的/storage/media/100/local//storage/media/100/local/files/是父目录,其访问权限受到更严格的管控,因此hdc操作会失败。必须精确到你的应用包名对应的子目录。

因此,对于你的开发调试和文件传输需求,直接使用上述格式的外部文件目录即可。

回到顶部