鸿蒙OpenHarmony【HPM Part开发】

打印 上一主题 下一主题

主题 823|帖子 823|积分 2484

HPM Part开发指导概述

通常情况下,[DevEco Marketplace]中能找到您开发常用的资源,可以通过依赖将所需的资源引入工程中。若现有的资源不能完全满足,可以本身开发并将其以HPM Part的格式发布。安装好hpm-cli工具后,就可以进行Part的开发了。
说明: 下述操纵发起在Ubuntu 18.04及以上版本运行。
安装HPM下令行工具

在进行HPM Part开发之前,起首必要安装包管理器下令行工具hpm-cli。Hpm-cli是一个基于Node.js开发的跨平台的下令行工具,而要运行hpm下令,必要先安装Node.js,然后利用npm来安装hpm。
安装Node.js及hpm-cli


  • 安装Node.js。 从官网下载并在本地安装Node.js.
    推荐安装[Node.js]最新的LTS版本 (不低于12.x)。
  • 通过Node.js自带的npm安装hpm-cli下令行工具。执行以下下令:
    1. npm install -g @ohos/hpm-cli
    复制代码
  • 安装完成后执行如下下令,表现hpm版本,即安装成功。
    1. hpm -V  或 hpm --version
    复制代码
  • (可选)假如必要升级hpm版本,请执行如下下令:
    1. npm update -g @ohos/hpm-cli
    复制代码
配置hpm-cli(可选)

安装完hpm下令行工具后,假如必要更改配置信息(如署理,shell路径),可执行以下下令可以查看hpm配置:
  1. hpm config
复制代码
上述下令执行后将会表现hpm的默认配置,您可以根据本身必要对默认配置进行修改,以下是hpm的常用配置:
  1. registry = https://hpm.harmonyos.com
  2. ### login Settings
  3. # loginUser = invitation_code
  4. #### Path Settings
  5. shellPath = C:\WINDOWS\System32\cmd.exe
  6. # shellPath = C:\Program Files\Git\bin\sh.exe
  7. # globalRepo = C:\Users\username.hpm\global
  8. #### Network Settings
  9. # no_proxy = *.server.com
  10. # http_proxy = http://user:pwd@proxy_server:port
  11. # https_proxy = http://user:pwd@proxy_server:port
  12. # strictSsl = true
  13. #### Other Settings
  14. # privateSupport = true|false
  15. # ignoreBundles = @ohos/llvm,@ohos/gn,
  16. # OSPlatform = Auto|linux|darwin|win32
复制代码
创建HPM Part

创建HPM Part有以下两种方式,开发者可根据本身的必要选择利用。
利用模板创建HPM Part


  • 请执行如下下令创建目录:
    1. hpm init
    2. -t default  mybundle
    复制代码
    说明: -t后的default表现利用名为’default’模板创建(也可以换作其他的模板,如simple、dist等)
    生成目录结构如下:
    1. /
    2. ├── headers            # 头文件(样例)
    3. │   └── main.h
    4. └── src                # 源代码(样例)
    5. │    └─ main.c
    6. ├── bundle.json        # 元数据声明文件
    7. └── LICENSE            # 许可协议文本
    8. └── Makefile           # 编译描述文件(样例)
    9. └── README.md          # Part的自述文件
    复制代码
  • 接下来根据必要,实现Part内部的功能代码,以及编译脚本。
    1. hpm init
    2. -t {templatename} -d {dir} {name}
    复制代码
    说明:

    • -t {templatename} :指的是模板名称。
    • -d {dir}:是要创建的Part所存放的路径。
    • name:为要创建的Part名称。
       
hpm-cli除了提供了少量默认模板之外,其他模板均存储在[DevEco Marketplace],可以利用下令hpm search -t template从[DevEco Marketplace]搜刮模板。

将现有工程定义为Part

假如您已经有了代码工程,必要分发的hpm平台,只必要在当前工程目录下(例如mybundle2),执行如下下令,系统会引导您输入组件名称和版本等信息。
  1. hpm init
复制代码

  • 输入名称后回车(如mybundle2)。
  • 接下来依次输入版本、描述等信息后,会在当前目录下会生成一个bundle.json文件。
  • 也可以打开bundle.json文件。
    1. $ hpm init
    2. Your bundle will be created in directory ~\demo\mybundle2? bundle name mybundle2? version 1.0.0...Initialization finished.
    复制代码
  • 打开bundle.json文件修改其他信息(如作者、代码仓库、代码目录、下令脚本、依赖组件等),如下(仅表现):
    1. {
    2. "name": "mybundle2",
    3. "version": "1.0.0",
    4. "publishAs": "code-segment",
    5. "dirs":{
    6.     ".":["README.md"],
    7.     "src":["test.c"],
    8.     "header":["header/test.h" ],   
    9.     "src/common":["src/common/foobar.txt"]
    10.   },
    11. "scripts": {
    12.     "build": "make -${args}"
    13.   },
    14. "dependencies": {
    15.     "@ohos/cjson": "^1.0.0",
    16.     "@ohos/foobar": "^1.2.0"
    17.   }
    18. }
    复制代码
定义发行版

发行版的元数据文件中定义了其依赖的Parts,以及如何编译、链接这些Parts,生成镜像文件的编译脚本。
下方以bundle.json中定义为示例,以下示例的编译下令dist,采用hb编译框架描述。
  1. {
  2.   "name": "@your/dist_name",
  3.   "version": "2.2.0",
  4.   "publishAs": "distribution",
  5.   "description": "describe it",
  6.   "scripts": {
  7.     "config_hb": "hb set -root $DEP_BUNDLE_BASE",
  8.     "dist": "PATH=/root/.local/bin:${DEP_OHOS_gn}:${DEP_OHOS_ninja}/ninja:${DEP_OHOS_llvm}/llvm/bin:${DEP_OHOS_hc_gen}/hc-gen:${PATH} && ./scripts/dist.sh"
  9.   },
  10.   "envs": {
  11.     "debug": false
  12.   },
  13.   "dirs": {
  14.     "scripts": "scripts/*"
  15.   },
  16.   "dependencies": {
  17.     "@ohos/build_lite": "2.2.0",
  18.     "@ohos/gn": "1.1.1",
  19.     "@ohos/llvm": "1.1.1",
  20.     "@ohos/hc_gen": "1.1.0",
  21.     "@ohos/ninja": "1.1.0",
  22.     ......
  23.   },
  24.   "ohos": {
  25.     "os": "2.2-Beta",
  26.     "board": "hi3516",
  27.     "kernel": "liteos-a"
  28.   },
  29.   "keywords": ["hispark", "hi3516"],
  30.   "repository": "https://gitee.com/openharmony/your-project",
  31.   "license": "Apache V2"
  32. }
复制代码
编译构建

完成代码开发后,假如Part的代码是可以独立编译的,可以配置编译工具和脚本以完成二进制的生成。
hpm-cli具备下令集成的本领,开发者可以选择任意的适合项目所采用的语言编译工具(如make,gcc,gn等)。只需在当前项目的bundle.json文件中定义scripts脚本中的build下令,就可以通过执行hpm build
执行编译。
定义编译脚本

以编译一个app目录下helloworld可执行文件为例:
  1. app
  2. ├── BUILD.gn
  3. ├── include
  4. │   └── helloworld.h
  5. └── src
  6.     └── helloworld.c
复制代码
在helloworld.c同级目录下新建一个BUILD.gn
  1. touch BUILD.gn
  2. vim BUILD.gn
复制代码
以下是BUILD.gn的样例,仅供参考
  1. executable("hello_world") {
  2.     sources = [
  3.         "src/helloworld.c"
  4.     ]
  5.     include_dirs = [
  6.         "include"
  7.     ]
  8. }
复制代码
说明:
   

  • “executable”是gn内置模板,可以用“gn help executable ”查看利用方法。
  • “sources ”是源码路径,“include_dirs ”是头文件路径。
  执行编译

在当前文件夹下,执行编译下令:
  1. hpm build
复制代码
在完成一系列的编译动作后,表现build succeed。查抄编译的输出结果:

编译image

在当前发行版根目录下,执行如下下令。
  1. hpm dist
复制代码
hpm-cli工具会主动执行编译,生成镜像文件,如:
  1. out
  2. |-xxdist.img
  3. |-xx.file
复制代码
发布上架

要发布Part到hpm,你必要先具备账号,并创建构造,创建构造的条件及详细步调请参考[DevEco Marketplace]上的帮助说明。
完成账号申请和构造创建(或者加入一个现有的构造)后,您必要根据个人的邀请码(在[DevEco Marketplace]的个人中心页查看),在本机生成公钥,并在[DevEco Marketplace]的个人中心进行配置。
  1. hpm config
  2. set loginUser {your-invitation-code}hpm gen-keys
复制代码
生成的文件将会存放在~\Users\yourname.hpm\key下,将公钥文件(publicKey_your-accout.pem)中内容拷贝到hpm个人中心的SSH公钥中。
完成上述操纵后,你就具备了在您的构造内发布Part的权限了。
在Part所在目录,执行下令hpm publish
,将会完成组件的打包发布操纵。
  1. hpm publish
复制代码
说明:
   

  • 为避免Part名称辩论,发布的Part的名称需限定在构造范围内,即命名为@org_name/bundle_name的格式。
  • 你的账号也必须是org_name内的成员,才可以发布或更新构造内的Part。
  • 发布的组件,必要通过安全及内容考核,才气正式见效。
  利用HPM Part

利用Part

通常开发一个项目,必要引用其他的组件以加速特定功能的开发,可以采用安装依赖的方式。
起首去[DevEco Marketplace],根据关键字去搜刮满足您的需求的组件,找到合适的组件后,将其引入到您的工程。典范的操纵步调包括:

  • 利用hpm init
    下令创建一个包描述文件(名为bundle.json,包含了依赖和一些其他的元数据,如名称、版本等)。
  • 利用hpm install 下令安装依赖(依赖写入bundle.json的dependencies字段)。
  • 代码中共引用头文件,实现功能。
  • 利用hpm build
    下令执行编译,输出编译结果。
在您的Part工程中(工程目录中必须包含bundle.json文件)执行如下下令:
  1. $ hpm install @scope/the_bundle
复制代码
引用的Part将会被安装到你的工程所在的目录的ohos_bundle下
  1. project
  2. ├── ohos_bundle            
  3. │   └── scope
  4. │    └─ the_bundle     # <---引用的组件将会出现在这
  5. └── src               
  6. │    └─ main.c
  7. ├── bundle.json        # 元数据声明文件
  8. └── LICENSE            
  9. └── Makefile           
  10. └── README.md         
复制代码
打开bundle.json文件,可以看到Part已经被引入到您的工程的依赖中。
  1. {
  2.   "dependencies": {
  3.     "@scope/the_bundle": "^1.0.0"
  4.   }
  5. }
复制代码
您也可以一次性在此文件中编辑多个Part的依赖
  1. {
  2.   "dependencies": {
  3.     "@scope/the_bundle1": "^1.0.0",
  4.     "@scope/the_bundle2": "^2.0.0",
  5.     "@scope/the_bundle3": "^3.0.0",
  6.     "@scope/the_bundle4": "^1.1.0"
  7.   }
  8. }
复制代码
再执行hpm install下令,将会一次性将所有未安装的Part一次性全部下载并安装完成。
安装全局Part

假如引用的Part是多个项目共用的组件(如编译工具链),你可以全局安装
在您的Part工程中(工程目录中必须包含bundle.json文件)执行如下下令:
  1. $ hpm install -g @scope/the_tool
复制代码
引用的Part将会被安装到你在hpm config
中设置的globalRepo所指定的目录下:
  1. ~.hpm\global\ohos_bundles            
  2. │   └── scope
  3. │    └─ the_tool     # <---引用的组件将会出现在这
复制代码
说明:
   

  • 在项目安装的Part,在执行hpm编译下令时可以通过引用情况变量DEP_SCOPE_bundle_name,例如: 通过hpm i @opensource/gn安装后,可以编辑bundle.json中的编译脚本,如下:
    1. "scripts": {
    2.     "build": "${DEP_OPENSOURCE_gn}/gn  --version"
    3.   },
    复制代码
    然后就可以通过执行hpm build
    将调用gn的功能。
  • 在全局安装的Part,可以通过设置系统情况变量,直接调用,或者hpm config
    set key value的方式,通过${key}/tool_name的方式引用,例如:
    1. hpm i -g @ohos/opensource/gnhpm config
    2. BUILD_SYS_GN ~/.hpm/global/ohos_bundles/opensource/gn
    复制代码
    可以编辑bundle.json中的编译脚本,如下:
    1. "scripts": {
    2.     "build": "${BUILD_SYS_GN}/gn  --version"
    3.   },
    复制代码
    然后就可以通过执行hpm build
    将调用gn的功能。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连全瓷种植牙齿制作中心

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表