概述

在应用开发的复杂流程中,文件和数据的调试是不可或缺的一环。本文归纳了文件和数据的调试方法,覆盖了沙箱文件、用户文件、用户首选项、键值型数据库和关系型数据库多个方面,解决了调试过程中文件如何推送接收的问题。此外,本文为方便开发者调试,提供了在HarmonyOS设备生成不同类型数据库文件和应用文件的[示例代码],基于文件I/O接口和不同的数据库distributedKVStore, preferences, relationalStore接口,实现了一键在HarmonyOS设备内生成沙箱文件、用户首选项、kv数据库、关系型数据库文件功能,便于用户调试HarmonyOS设备与PC端间的文件传输。

使用约束

所有调试方法都需要设备通过USB连接。

实现原理

本文涉及的文件路径分为用户目录与应用沙箱目录。用户目录存储用户私有资料,如图片、视频、音频及文档,即设备图库与文档内容。应用沙箱目录归应用所有,包含应用安装文件、应用资源文件、用户首选项文件、键值型数据库、关系型数据库等,它是一种旨在保护数据安全、防止恶意路径访问的隔离机制。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

文件路径目录:

本文所涉及的目录以及其对应的路径如下表所示:

目录名 类型 路径
沙箱文件 filesDir 应用通用文件路径 /data/app/el2//base//haps//files
preferencesDir 应用首选项文件路径 /data/app/el2//base//haps//preferences
databaseDir 数据库文件路径 /data/app/el2//database///rdb
distributedFilesDir 分布式文件路径 /data/app/el2//database///kvdb
用户文件 documents 用户文件路径 /storage/media//local/files/Docs/Documents

访问设备文件:

开发者有两种访问HarmonyOS设备中的用户文件和沙箱文件的方式。

  • 使用DevEco Studio右下角的Device File Browser,在DevEco Studio上如PC端操作一样,进行文件新建、删除、上传、下载等操作,右键单击Save As将选定的文件或目录下载到PC上,右键单击Upload将PC上的文件上传到设备指定目录。

  • 使用命令行的方式进行访问。

    • 对于用户文件,开发者可以直接使用[hdc]命令进行上传和下载。
    • 对于沙箱文件,hdc命令是没有权限直接访问沙箱文件目录的,可以通过hdc命令先将文件暂存到/data/local/tmp目录下,再通过真机内置了[BFTPD]二进制软件,推送到目标沙箱目录。

用户文件调试

目前用户文档在上传之后可以在HarmonyOS设备我的文档中直接查看,图库暂不支持。

推送文件

可以在连接设备的情况下,尝试点击DevEco Studio右下角的Device File Browser进入HarmonyOS设备目录结构,找到想要导入的文件夹右击选择upload上传文件,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接收文件

可以在连接设备的情况下,尝试点击DevEco Studio右下角的Device File Browser进入HarmonyOS设备目录结构,找到想要导出的文件右击选择save as另存到本地即可导出。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

应用文件调试

推送文件

  • 在工程主模块下的module.json5文件下增加网络权限。
"requestPermissions": [
    {
        "name": "ohos.permission.INTERNET"
    }
]
  • 应用文件目前仅支持通过命令行将需要发送的文件先拷贝到tmp目录,再通过BFTPD命令拷贝到应用沙箱目录。
// 把需要发送的文件拷贝到tmp目录
hdc file send test.txt /data/local/tmp/test.txt    
hdc shell
// 启动连接沙箱目录的ftp服务
aa process -b com.example.XXX -a EntryAbility -p "/system/bin/bftpd -D -p 9029" -S
// 把tmp目录下的目标文件拷贝到沙箱绝对路径
ftpget -p 9029 -P guest -u anonymous localhost -s /data/local/tmp/test.txt /data/storage/el2/base/test.txt  

接收文件

方式一:通过命令行来接收文件。

hdc file recv /data/app/el2/100/base/com.example.myapplication/haps/entry/files/test.txt "D:\recv"

方式二:通过DevEco Studio右下角的Device File Browser进入HarmonyOS设备目录结构,通过保存操作来接收文件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据库文件调试

推送文件

目前不支持从电脑上上传数据库文件到HarmonyOS设备。

接收文件

数据库文件可以通过hdc命令行和DevEco Studio连接手机两种方式进行接收文件。

  • preference用户首选项文件

    方式一:通过hdc命令行接收文件。由于首选项文件是xml格式,开发者可以直接查看校验文件。

    hdc file recv /data/app/el2/100/base/com.example.myapplication/haps/entry/preferences/myStore "D:\abc"
    

    方式二:通过DevEco Studio右下角的Device File Browser进入HarmonyOS设备目录结构,找到想要导出的文件右击选择save as接收文件。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • kv数据库文件

    方式一:通过hdc命令行接收文件。如果是加密数据库,导出后无法查看,非加密数据库可以使用SqliteStudio等工具打开。

    hdc file recv /data/app/el2/100/database/com.example.myapplication/entry/kvdb/2c77515efb1c9f5f9b5fdc9d2f78edae26e57c53dd63b19a9b0728f71f2aa42f/single_ver/main "D:\abc"
    

    方式二:通过DevEco Studio右下角的Device File Browser进入HarmonyOS设备目录结构,找到想要导出的文件右击选择save as接收文件,注意需要将db、wal、shm文件一起导出。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • database关系型数据库文件

    方式一:通过hdc命令行接收文件。如果是加密数据库,同样导出后无法查看,非加密数据库可以使用SqliteStudio等工具打开。

    hdc file recv /data/app/el2/100/database/com.example.myapplication/entry/rdb/customDir/subCustomDir "D:\abc"
    

    方式二:通过DevEco Studio右下角的Device File Browser进入HarmonyOS设备目录结构,找到想要导出的文件右击选择save as接收文件,同时注意需要将db、wal、shm文件一起导出。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

常见问题

什么是BFTPD

BFTPD是一个基于 FTP 协议的服务器软件。它主要用于在客户端和服务器之间传输二进制文件,比如图片、文档、程序等。BFTPD 支持多种操作系统,并提供了一个安全可靠的方式来进行文件上传和下载,允许用户通过命令行界面或者图形用户界面进行文件管理。

BFTPD 的功能包括但不限于:文件上传、文件下载、用户管理和权限控制、身份验证、连接限制。

如何开启BFTPD

  • 服务器的BFTPD服务通过网络端口来传输文件,所以需要在工程主模块下的module.json5文件下增加网络权限。
"requestPermissions": [
    {
        "name": "ohos.permission.INTERNET"
    }
]
  • 在设备侧(hdc shell)启动应用的bftpd服务,并查询端口号是否启动成功。
$ aa process -b {bundleName} -a {abilityName} -p "/system/bin/bftpd -D -p {port}"  -S
start native process successfully.
$ ps -ef | grep bftpd
20020143     12254   613 0 11:52:53 ?     00:00:00 bftpd -D -p 9021   // 对应端口号的bftpd服务启动成功
shell        13035 11901 10 11:54:44 ?    00:00:00 grep bftpd
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐