9、鸿蒙学习-开发及引用静态共享包(API 9)

news/2024/7/21 8:55:56 标签: harmonyos, 学习, 华为

HAR(Harmony Archive)是静态共享包,可以包含代码、C++库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。

接下来,将简单介绍库模块的工程结构,如下图所示:

相关字段的描述如下,其余字段与Entry或Feature模块相关字段相同,可参考工程介绍。

  • libs:用于存放.so文件。
  • src > main > cpp > types:用于存放C++ API描述文件,子目录按照so维度进行划分。
  • src > main > cpp > types > liblibrary > index.d.ts:描述C++接口的方法名、入参、返回参数等信息。
  • src > main > cpp > types > liblibrary > oh-package.json5:描述so三方包声明文件入口和so包名信息。
  • src > main > cpp > CMakeLists.txt:CMake配置文件,提供CMake构建脚本。
  • src > main > cpp > hello.cpp:共享包C++代码源文件。
  • index.ets:共享包导出声明的入口。

 

创建库模块

1、鼠标移到工程目录顶部,单击右键,选择New > Module,在工程中添加模块。

2、在Choose Your Ability Template界面中,选择Static Library,并单击Next

3、在Configure New Module界面中,设置新添加的模块信息,设置完成后,单击Finish完成创建。

  • Module name:新增模块的名称。
  • Language:开发语言。
  • Device type:支持的设备类型。
  • Enable native:是否创建一个用于调用C++代码的模块。

 创建完成后,会在工程目录中生成库模块及相关文件。

编译库模块

开发完库模块后,选中模块名,然后通过DevEco Studio菜单栏的Build > Make Module ${libraryName}进行编译构建,生成HAR。HAR可用于工程其它模块的引用,或将HAR上传至ohpm仓库,供其他开发者下载使用。若部分源码文件不需要打包至HAR中,可通过创建.ohpmignore文件,配置打包时要忽略的文件/文件夹。

编译构建的HAR可在模块下的build目录下获取,包格式为*.har。

 

在编译构建HAR时,请注意以下事项:

  • 在编译构建HAR的过程中,不会将模块中的C++代码直接打包进.har文件中,而是将C++代码编译成动态依赖库.so文件放置在.har文件中的libs目录下。
  • 在编译构建HAR的过程中,会生成资源文件ResourceTable.txt,以便编辑器可以对HAR中的资源文件进行联想。因此,如果不使用DevEco Studio对HAR进行构建,则DevEco Studio的编辑器会无法联想HAR中的资源。

发布HAR

发布打包的HAR,可供其他开发者安装和引用。接下来将介绍如何发布共享包

1、在库模块中(与src文件夹同一级目录下),添加如下文件:

  • 新建README.md文件:在README.md文件中必须包含包的介绍和引用方式,还可以根据包的内容添加更详细介绍。
  • 新建CHANGELOG.md文件:填写HAR的版本更新记录。
  • 添加LICENSE文件:LICENSE许可文件。

2、重新编译库模块,生成*.har文件。

3、利用工具ssh-keygen生成公、私钥,可执行以下命令:

ssh-keygen -m PEM -t RSA -b 4096 -f your_key_path

说明

OHPM包管理器只支持加密密钥认证,请在生成公私钥时输入密码。

4、登录OpenHarmony三方库中心仓官网,单击主页右上角的个人中心,新增OHPM公钥,将公钥文件(your_publicKey.pub)的内容粘贴到公钥输入框中。

5、打开命令行工具,执行如下命令设置私钥路径。

ohpm config set key_path your_key_path

6、登录OpenHarmony三方库中心仓,单击主页右上角的个人中心,复制发布码,获取发布码并配置到 .ohpmrc 文件中,可执行如下命令:

ohpm config set publish_id your_publish_id

7、执行如下命令发布HAR,<HAR路径>需指定为.har文件的具体路径。

ohpm publish <HAR路径>

引用HAR文件和资源

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

1、引用ohpm仓中的HAR,首先需要设置三方HAR的仓库信息。DevEco Studio默认仓库地址为OpenHarmony三方库中心仓,如果您需要设置自定义仓库,请在DevEco Studio的Terminal窗口执行如下命令(执行命令前,请确保将DevEco Studio中ohpm安装bin目录配置在“环境变量-系统变量-PATH”中,第一次配置环境变量后,需重启DevEco Studio):

ohpm config set registry your_registry1,your_registry2

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

然后通过如下两种方式设置三方包依赖信息:

(1)方式一:在Terminal窗口中,执行如下命令安装三方包,DevEco Studio会自动在工程的oh-package.json5中自动添加三方包依赖。

ohpm install @ohos/lottie

(2)方式二:在工程的oh-package.json5中设置三方包依赖,配置示例如下:

"dependencies": {
  "@ohos/lottie": "^2.0.0"
}

依赖设置完成后,需要执行ohpm install命令安装依赖包,依赖包会存储在工程的oh_modules目录下。

ohpm install

2、引用本地文件夹,有如下两种方式:

(1)方式一:在Terminal窗口中,执行如下命令进行安装,并会在oh-package.json5中自动添加依赖。

ohpm install ../folder

 (2)方式二:在工程的oh-package.json5中设置三方包依赖,配置示例如下:

"dependencies": {
  "package": "file:./package.har"
}

依赖设置完成后,需要执行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依赖,才会被当做依赖使用,并在编译构建过程中进行相应的处理。

具体实操可参考大佬的文章:全网首发:超细节发布一个鸿蒙OHPM开源包 - 掘金

参考:文档中心


http://www.niftyadmin.cn/n/5472746.html

相关文章

fastjson list转json

1&#xff0c;内容是字符串 String json JSON. toJSONString(list); 结果:["111" ,“222”] 2,内容是时间 SerializeConfig config new SerializeConfig(); config. put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss")); Strin…

Vue3:对ref、reactive的一个性能优化API

一、情景说明 我们知道&#xff0c;在Vue3中&#xff0c;想要创建响应式的变量&#xff0c;就要用到ref、reactive来包裹一下数据即可。 但是&#xff0c;这里有个损耗性能的地方 就是&#xff0c;被它包裹的数据&#xff0c;都会构建成响应式的&#xff0c;无论多少层次&…

NFS环境搭建与在K8s的应用

第一部分&#xff1a;配置 docker 1.1、配置Nginx&#xff0c;转发 nexus 上传包的请求 sudo tee /etc/nginx/conf.d/k8s.conf <<-‘EOF’ HTTPS 服务器块 server { listen 443 ssl; server_name sls.registry.k8s; # SSL 证书配置 ssl_certificate /home/projectnam…

vue 打包 插槽 inject reactive draggable 动画 foreach pinia状态管理

在Vue项目中&#xff0c;当涉及到打包、插槽&#xff08;Slots&#xff09;、inject/reactive、draggable、transition、foreach以及pinia时&#xff0c;这些都是Vue框架的不同特性和库&#xff0c;它们各自在Vue应用中有不同的用途。下面我将逐一解释这些概念&#xff0c;并说…

npm 与 yarn 命令比较

npm 和 yarn 都是 JavaScript 的包管理工具&#xff0c;用于管理项目中的依赖包。 安装速度 yarn: 速度较快&#xff0c;因为它会缓存已下载的包&#xff0c;并在安装时利用并行下载来最大化资源利用率。 npm: 速度较慢&#xff0c;尤其是在网络不稳定的情况下&#xff0c;可…

剖析C++中的继承

剖析C继承 文章目录 剖析C继承前言一、继承的概念1. 概念2. 定义方式3. 注意要点 二、基类与派生类对象赋值转换三、继承中的作用域四、基类与派生类默认成员函数调用关系五、继承与友元函数六、继承与静态成员七、菱形继承总结 前言 ​ 继承是C中非常重要的一大特性&#xff…

Day3-struct类型、列转行、行转列、函数

Hive 数据类型 struct类型 struct&#xff1a;结构体&#xff0c;对应了Java中的对象&#xff0c;实际上是将数据以json形式来进行存储和处理 案例 原始数据 a tom,19,male amy,18,female b bob,18,male john,18,male c lucy,19,female lily,19,female d henry,18,male davi…

Cortex-M7 内存模型

1 前言 如图1所示&#xff0c; Cortex-M7最大支持4GB的内存寻址&#xff0c;并对内存映射(memory map)做了初步的规定&#xff0c;将整个内存空间划分为了多个内存区域(region)。每个内存区域有着既定的内存类型(memory type)和内存属性(memory attribute)&#xff0c;这两者决…