HarmonyOS鸿蒙Next开发机制提个建议

HarmonyOS鸿蒙Next开发机制提个建议 鸿蒙开发,当想自带海量数据库时,如果放在 rawfile 目录下,例如有 2G 大小,那么在开发的代码,还得复制到私有目录才能使用,这样容量加大了一倍。不像安卓可以直接读 rawfile 目录下数据库文件。这个机制有无改进可能?实在太占存储空间了。

或者是不是我没找到更好的方法?求指教!

13 回复

尊敬的开发者,您好,

关于您所反馈的问题:

  1. 目前要完整使用应用自带的数据库文件,仍需要将数据库文件复制到沙箱之后再访问。
  2. 如果您想要减少应用包的体积,您可以考虑在应用内提供下载接口,用户按需下载数据库文件至公共目录后进行操作:
    • 如果需要完整使用该数据库文件,那么还是需要将其复制到沙箱后进行操作
    • 如果只是读取数据库文件,可以通过@ohos.data.relationalStore (关系型数据库)的能力以“只读”形式打开该数据库文件,可以参考文档:如何使用公共目录下的数据库文件

如果上述方案不能满足您的需求,麻烦您提供以下信息:

  1. 您使用上述能力的具体应用场景是什么样的,为什么需要应用随包分发如此大体积的数据库
  2. 您是否只需要以“只读”方式操作数据库文件
  3. 方便说明能力不满足可能带来的影响:什么时间用到?是否高频?有无三方库可以做到?若提供该能力,是否会造成大工作量返工?

更多关于HarmonyOS鸿蒙Next开发机制提个建议的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


首先感谢,纯个人弱需求,场景就是一个一百多万条的菜谱,纯读,不希望网络获取,本机应用。实际上工具类个人应用可能需要这种只读大容量的数据库作为本地资源。

再次声明非必要需求,弱需求。

尊敬的开发者,您好!该功能正在规划中,还请关注后续版本,感谢您的理解与支持。

这个不能打包APP的啊,我的意思是打包大的数据库文件时,

这个场景建议先区分“随包只读资源”和“运行期可查询数据库”。rawfile 适合放随包资源,官方也提供 RawFileDescriptor 以及 64 后缀接口来读大 rawfile;但如果你要按数据库文件方式被 SQLite/关系型存储随机读写,通常仍需要落到应用沙箱里的真实文件路径,单纯放 rawfile 并不等价于可直接作为运行期数据库路径使用。

可考虑几个折中方案:

  1. 如果数据库只读且查询层能接受 fd + offset + length,可走 Native Rawfile 的 descriptor 方案,避免一次性读入内存。

  2. 如果必须交给只能按路径打开的数据库引擎,建议首次启动或版本升级时复制到沙箱,并记录版本号,避免每次启动重复复制。

  3. 2G 级数据不太适合直接随包分发,最好评估分片、压缩增量、按需下载或服务端查询,减少安装包体积和用户本地双份占用。

所以“有没有更好方法”取决于你的查询引擎是否支持 fd/偏移读取;如果只支持路径,复制到沙箱基本还是最稳的工程方案。

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17,

现在需求就是比较大的数据库文件,不得不先复制到沙箱目录才能读写,安装后APP大小暴涨很多,。我还发现另一个问题,鸿蒙APP无法像安卓APP那样清理数据。例如我两个手机的小红书,安卓可以直接清理数据,清理后小红书大小变成几百MB,鸿蒙的没清理数据这功能,只有清理缓存,现在我无论怎么清理,大小还是2G左右。这点也希望有解决办法。鸿蒙系统看起来没有恢复到安装初始化功能(因为不能清理数据),

HarmonyOS的开发者模式提供了很多实用的工具,方便我们进行调试和优化。

清理数据需要自行接入且自行实现页面,鸿蒙版的小红书有这个按钮,但没实现清沙箱数据的功能。

可参考:自定义数据清理

这个也是个问题,为什么不让手机持有者自主来复位到安装状态呢?否则只能卸载重装。,

HarmonyOS Next开发机制围绕ArkTS/ArkUI展开,核心为声明式UI、端云一体及分布式软总线。组件化与元服务架构支持动态部署。性能优化方面,方舟编译器和并发模型原生适配。具体细节请参考官方文档。

目前 HarmonyOS Next 的沙箱机制要求可读写的数据库必须复制到私有目录才能使用,而 rawfile 是只读资源,确实会导致双倍存储占用。这并非设计缺陷,而是与 Android 平台相似的通用做法(Android 的 assets 目录同样需要复制到内部存储才能用 SQLiteDatabase 打开,也会双倍占用)。目前系统没有提供直接读取 rawfile 中数据库的能力,无法避免复制。如果应用包体很大,建议改为首次启动时从云端下载数据库,或预先将数据库拆分为只读的归档文件并在使用时流式读取,但这要求自行实现查询逻辑,不适用传统 SQLite。该机制在 Next 版本暂无改进计划,请合理规划应用安装空间。

回到顶部