鸿蒙5.0开发进阶:引用共享包

往期鸿蒙5.0全套实战文章必看:(文中附带全栈鸿蒙5.0学习资料)


引用共享包

引用三方HAR,包括从仓库进行安装、从本地文件夹和本地压缩包中进行安装三种方式。

  • 引用ohpm仓中的HAR,首先需要设置三方HAR的仓库信息,DevEco Studio默认仓库地址为OpenHarmony三方库中心仓,如果您想设置自定义仓库,请在DevEco Studio的Terminal窗口执行如下命令进行设置(执行命令前,请确保已将ohpm配置到环境变量中,第一次配置环境变量后,需重启DevEco Studio):
    ohpm config set registry your_registry1,your_registry2

    说明:ohpm支持多个仓库地址,采用英文逗号分隔。

    然后通过如下两种方式设置三方包依赖信息:
    • 方式一:在Terminal窗口中,切换到需要引入三方包的模块,如entry模块,执行如下命令安装三方包,DevEco Studio会自动在该模块的oh-package.json5中自动添加三方包依赖。
      cd path/to/your/project/entry
      ohpm install @ohos/lottie
    • 方式二:在需要引入三方包的模块的oh-package.json5中设置三方包依赖,配置示例如下:
      "dependencies": {
        "@ohos/lottie": "^2.0.0"
      }

      依赖设置完成后,需要执行ohpm install命令安装依赖包,依赖包会安装到该模块的oh_modules目录下。

      ohpm install
  • 引用本地模块源码(该本地模块必须与宿主模块归属于同一个工程),如entry模块需要依赖foo模块的源码,有如下两种方式:
    • 方式一:在Terminal窗口中,切换到需要引入本地模块源码的模块,即entry模块下,执行如下命令进行安装,并会在该模块下的oh-package.json5中自动添加依赖。
      cd path/to/your/project/entry
      ohpm install path/to/foo
    • 方式二:在需要引入本地模块源码的模块的oh-package.json5中设置源码依赖项,即entry模块的oh-package.json5中,添加如下配置:
      "dependencies": {
        "foo": "file:path/to/foo"  // 此处也可以是以当前oh-package.json5所在目录为起点的相对路径
      }

      依赖设置完成后,需要执行ohpm install命令安装依赖包,模块foo的源码会安装在entry模块的oh_modules目录下。

      ohpm install
  • 引用本地HAR/HSP包,有如下两种方式:
    • 方式一:在Terminal窗口中,切换到需要引入本地HAR/HSP包的模块,如entry模块,执行如下命令进行安装,并会在oh-package.json5中自动添加依赖。以HAR/HSP包在工程根目录下为例,配置示例如下(实际配置时请以HAR/HSP包实际目录为准):
      • 引用HAR:
        cd path/to/your/project/entry
        ohpm install path/to/package.har
      • 引用HSP(*.tgz包通过HSP模块在release模式下编译生成):
        cd path/to/your/project/entry
        ohpm install path/to/package.tgz
    • 方式二:在需要引入三方包的模块的oh-package.json5中设置本地HAR/HSP包。以HAR/HSP包在工程根目录下为例,配置示例如下(实际配置时请以HAR/HSP包实际目录为准):
      • 引用HAR:
        "dependencies": {
          "package": "file:path/to/package.har" // 此处也可以是以当前oh-package.json5所在目录为起点的相对路径。 
        }                                       

        说明

        代码片段中package.har为三方包文件名;"package"为引用该三方包所使用的依赖名称,建议与三方包包名,即三方包的oh-package.json5文件中的name字段保持一致。

      • 引用HSP:
        "dependencies": {
          "package": "file:path/to/package.tgz" // 此处也可以是以当前oh-package.json5所在目录为起点的相对路径
        }

      依赖设置完成后,需要执行ohpm install命令安装依赖包,依赖包会安装在该模块的oh_modules目录下。

      ohpm install

另外,在安装或卸载共享包时,可在模块或工程的oh-package.json5文件中增加钩子设置,以管理install、uninstall命令的生命周期,配置示例如下:

 "hooks": {
    "preInstall": "echo 00 preInstall", // install命令执行之前
    "postInstall": "echo 00 postInstall", // install命令执行之后
    "preUninstall": "echo 00 preUninstall", // uninstall命令执行之前
    "postUninstall": "echo 00 postUninstall"  // uninstall命令执行之后
  }

说明

  • 目前只支持执行当前模块或工程的oh-package.json5文件中hooks,不支持执行依赖中hooks。
  • 在引用共享包时,请注意当前只支持在模块和工程下的oh-package.json5文件中声明dependencies依赖,才会被当做依赖使用,并在编译构建过程中进行相应的处理。

<think>我们正在使用HarmonyOS鸿蒙开发,特别是在DevEco Studio 5.0环境下。用户希望在应用程序的自身路径下读写一个JSON文件。在鸿蒙开发中,应用程序的自身路径通常指的是应用沙盒内的目录。 根据鸿蒙的分布式文件系统设计和安全策略,应用程序的文件操作主要在其沙盒目录内进行。常见的沙盒目录括: - 应用安装目录(安装后只读):`/data/storage/el1/bundle/` - 应用沙盒目录(可读写):`/data/storage/el2/`(用于数据库和文件存储) 但是,我们通常不直接使用绝对路径,而是通过鸿蒙提供的上下文(Context)来获取沙盒路径。 读写文件步骤: 1. 获取应用沙盒路径:通过`context.filesDir`获取应用内部存储路径(沙盒路径)。 2. 使用`@ohos.file.fs`(文件系统模块)进行文件操作。 具体步骤: 1. 读写权限:在`module.json5`中配置必要的权限(如果需要访问公共目录可能需要,但应用自身目录不需要额外权限)。 2. 导入文件系统模块。 3. 获取文件路径,使用`fs`模块进行读写。 注意:由于用户使用的是DevEco Studio 5.0,我们假设使用的是API 9及以上(鸿蒙4.05.0)。 读写JSON文件示例: 写JSON文件: ```typescript import fs from '@ohos.file.fs'; import common from '@ohos.app.ability.common'; // 在Ability或UI的上下文中获取filesDir let context = ...; // 获取AbilityContext或UIAbilityContext // 获取应用沙盒路径下的文件路径 let filePath = context.filesDir + '/data.json'; // 要写入的JSON数据 let jsonData = { name: 'John', age: 30 }; let data = JSON.stringify(jsonData); try { // 写入文件,如果文件不存在则创建 let file = fs.openSync(filePath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE); fs.writeSync(file.fd, data); fs.closeSync(file); // 关闭文件 console.log('写入成功'); } catch (err) { console.error(`写入失败: ${err.code}, ${err.message}`); } ``` 读JSON文件: ```typescript import fs from '@ohos.file.fs'; import common from '@ohos.app.ability.common'; let context = ...; // 同上 let filePath = context.filesDir + '/data.json'; try { let file = fs.openSync(filePath, fs.OpenMode.READ_ONLY); let stat = fs.statSync(filePath); // 获取文件状态 let arrayBuffer = new ArrayBuffer(stat.size); fs.readSync(file.fd, arrayBuffer); // 读取文件内容到ArrayBuffer fs.closeSync(file); // 将ArrayBuffer转换为字符串 let textDecoder = util.TextDecoder.create('utf-8'); let jsonString = textDecoder.decodeWithStream(arrayBuffer); let jsonData = JSON.parse(jsonString); console.log('读取成功: ', jsonData); } catch (err) { console.error(`读取失败: ${err.code}, ${err.message}`); } ``` 注意:上述代码中的`context`如何获取? - 在UIAbility中:直接使用`this.context`(在UIAbility的方法中)或通过`AbilityStage`获取。 - 在页面(Page)中:可以通过`getContext`方法获取UIAbilityContext。 例如在UIAbility中: ```typescript export default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage: window.WindowStage) { // 在这里可以使用this.context let context = this.context; // 然后进行文件操作 } } ``` 在页面中: ```typescript import common from '@ohos.app.ability.common'; @Entry @Component struct MyPage { private context = getContext(this) as common.UIAbilityContext; aboutToAppear() { // 使用this.context进行文件操作 } } ``` 但是,注意在页面中直接获取UIAbilityContext的方式可能会因为UIAbilityContext的生命周期问题而需要谨慎使用。推荐通过UIAbility传递上下文或使用其他方式(如全局变量)来避免问题。 另外,鸿蒙还提供了更便捷的数据管理方式,如用户首选项(Preferences)和关系型数据库(RelationalStore),但对于JSON文件,上述文件读写方式是合适的。 引用说明: [^1] 提到DevEco Studio开发云侧工程,但我们需要的是端侧(设备端)的文件操作。 [^2] 提到访问设备文件,但这是通过设备文件浏览器访问设备上的文件,与App自身路径下的文件操作不同。 [^3] 提到学习资料,但未涉及具体API。 因此,我们主要依据鸿蒙开发文档和API来解答。 相关问题: 1. 如何在鸿蒙应用中读取外部存储(如SD卡)中的文件? 2. 如何将JSON文件存储在鸿蒙应用的关系型数据库中? 3. 鸿蒙应用如何实现不同设备间的文件同步? </think>在DevEco Studio 5.0中进行鸿蒙应用开发时,读写App自身路径下的JSON文件需使用鸿蒙的文件系统API。以下是具体实现方法: ### 📁 1. 获取应用沙盒目录路径 ```typescript // 在UIAbility或AbilitySlice中获取上下文 import AbilityContext from '@ohos.app.ability.AbilityContext'; const context: AbilityContext = ...; // 通过this.context获取 const sandboxDir: string = context.filesDir; // /data/storage/el2/base/haps/<your_package_name>/files/ ``` ### 📝 2. 写入JSON文件 ```typescript import fs from '@ohos.file.fs'; import util from '@ohos.util'; // 准备JSON数据 const data = { username: "张三", level: 5, settings: { theme: "dark" } }; const jsonStr = JSON.stringify(data); try { // 创建文件路径 const filePath = `${sandboxDir}/config.json`; // 写入文件 const file = fs.openSync(filePath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE); fs.writeSync(file.fd, jsonStr); fs.closeSync(file); console.log("JSON文件写入成功"); } catch (err) { console.error(`写入失败: ${err.code}, ${err.message}`); } ``` ### 📖 3. 读取JSON文件 ```typescript try { const filePath = `${sandboxDir}/config.json`; // 检查文件是否存在 if (!fs.accessSync(filePath)) { console.log("文件不存在"); return; } // 读取文件内容 const file = fs.openSync(filePath, fs.OpenMode.READ_ONLY); const stat = fs.statSync(filePath); const buf = new ArrayBuffer(stat.size); fs.readSync(file.fd, buf); fs.closeSync(file); // 解码并解析JSON const decoder = new util.TextDecoder('utf-8'); const jsonStr = decoder.decodeWithStream(buf); const jsonData = JSON.parse(jsonStr); console.log("解析结果:", jsonData.username); // 输出: 张三 } catch (err) { console.error(`读取失败: ${err.code}, ${err.message}`); } ``` ### 🔒 关键配置 在`module.json5`中添加文件操作权限: ```json "requestPermissions": [ { "name": "ohos.permission.FILE_ACCESS_PERSIST", "reason": "读写应用内部文件" } ] ``` ### ⚠️ 注意事项 1. 沙盒路径无需额外权限申请,但需确保使用`context.filesDir`获取路径[^2] 2. 文件操作必须使用`@ohos.file.fs`模块API 3. 临时目录文件会在关闭后自动删除,持久存储需使用沙盒路径[^2] 4. 读写操作需裹在`try-catch`中处理异常 ### 🌰 完整示例 可在[《鸿蒙生态应用开发V2.0白皮书》](https://developer.harmonyos.com/documentation)的"本地文件管理"章节查看完整案例代码[^1][^3]。 --- ### 🔍 相关问题 1. **如何在鸿蒙应用间安全共享JSON文件?** 建议使用分布式数据管理或安全目录共享机制,避免直接暴露沙盒路径。 2. **JSON文件超过10MB时的优化读取方案?** 可采用流式读取(`createStream`)分块处理,避免内存溢出: ```typescript const stream = fs.createStream(filePath, 'r+'); let chunk = ''; stream.on('data', (data) => { chunk += data; }); stream.on('end', () => { const obj = JSON.parse(chunk); }); ``` 3. **如何监听JSON文件变更?** 使用`fileio`模块的观察者模式: ```typescript const observer = fs.createWatcher(filePath, { recursive: false }, (event) => { if (event.event === 'change') { console.log("文件被修改"); } }); ``` 需要完整示例代码可参考[《鸿蒙开发进阶》](https://developer.harmonyos.com/documentation)第7章[^3]。 [^1]: 鸿蒙学习文档与开发环境搭建指南 [^2]: DevEco Studio设备文件访问机制说明 [^3]: 鸿蒙官方联合发布的学习资源路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值