鸿蒙5.0开发【本地数据与文件调试】实战案例
在应用开发的复杂流程中,文件和数据的调试是不可或缺的一环。本文归纳了文件和数据的调试方法,覆盖了沙箱文件、用户文件、用户首选项、键值型数据库和关系型数据库多个方面,解决了调试过程中文件如何推送接收的问题。此外,本文为方便开发者调试,提供了在HarmonyOS设备生成不同类型数据库文件和应用文件的[示例代码],基于文件I/O接口和不同的数据库distributedKVStore, preferenc
概述
在应用开发的复杂流程中,文件和数据的调试是不可或缺的一环。本文归纳了文件和数据的调试方法,覆盖了沙箱文件、用户文件、用户首选项、键值型数据库和关系型数据库多个方面,解决了调试过程中文件如何推送接收的问题。此外,本文为方便开发者调试,提供了在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
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)