移植案例与原理 - HPM包描述文件bundle.json

news2024/12/24 21:53:20

发现各个子系统、组件、三方库目录下都添加了bundle.json,了解下该文件的用途、用法并快速记录下。

1、HPM Bundle的基本概念

Bundle是OpenHarmony中一个用来表示分发单元的术语,等同于包,一个Bundle中通常包含以下内容:

  • 被分发的二进制文件(二进制类型)
  • 被分发的源代码文件(源代码/代码片段类型)
  • 编译脚本(发行版类型需要)
  • 自身的说明文件
    • bundle.json:元数据声明(名称,版本,依赖等)
    • LICENSE:许可协议文本
    • README.md:自述文件
    • CHANGELOG.md:变更日志(可选)

一个Bundle被发布到HPM服务器( https://hpm.harmonyos.com )后,另外一些开发者就可以通过hpm包管理器下载安装使用 。一个Bundle在命名空间内拥有唯一的名称(命名格式为:@scope/name),可以进行独立的版本演进。

一个bundle包通常具有如下代码组织结构:

demo
├── headers            # 头文件(样例)
│   └── main.h
└── src                # 源代码(样例)
│    └─ main.c
├── bundle.json        # 元数据声明文件
└── LICENSE            # 许可协议文本
└── Makefile           # 编译描述文件(样例)
└── README.md          # Bundle的自述文件

2、bundle.json文件格式定义

文件bundle.json一般具有如下格式,对各个属性值的解释见注释部分。因为是json文件,注意下是对象还是数组。对象由花括号{}括起来的逗号分割的成员构成,成员是字符串键和值由逗号分割的键值对组成。数组是由方括号[]括起来的一组值构成。

{
  "name": "@ohos/<component_name>",                                                     # HPM部件的英文名称, 由@符合、组织名称、部件名称组成。
  "description": "component description",                                               # 部件描述
  "version": "3.1.0",                                                                   # 版本号,3.1 应该取的OpenHarmony版本号
  "homePage": "https://gitee.com/openharmony",                                          # 部件的主页
  "license": "BSD 3-claus",                                                             # 部件的版权协议,根据部件license情况填写
  "publishAs": "code-segment",                                                          # 发布形式,一般为代码片段code-segment
  "segment": {                                                                          # 部件的代码路径
    "destPath": "<subsystem>/<component_name>"
  },
  "dirs": [],                                                                           # HPM包的目录结构
  "scripts": {},                                                                        # HPM包定义需要执行的脚本
  "component": {                                                                        # 部件的属性信息
    "name": "<component_name>"                                                          # 部件的名称,和"@ohos/<component_name>"中的名称应该是一致的。
    "subsystem": "xxx subsystem",                                                      # 部件所属子系统
    "syscap": [ "SystemCapability.<Subsystem>.<Feature>.<Subfeature>" ]                 # 部件为应用提供的系统能力
    "features": [ "<component_name>_<feature>" ]                                        # 部件的特性列表
    "adapted_system_type": [ "<system_type>" ]                                          # 部件适用的系统类型:轻量(mini)、小型(small)和标准(standard)
    "rom": "xxxKB",                                                                     # ROM占用
    "ram": "xxxKB",                                                                     # RAM占用
    "deps": {                                                                     
      "components": [                                                                   # 部件依赖的其他部件
        "xxx_component"
      ], 
      "third_party": [                                                                  # 部件依赖的三方开源软件
        "<third_party_software_name>"
      ]
    },
    "build": {                                                                          # 部件编译构建配置,可以多个
     "sub_component": [ "//<domain>/<subsystem>/<component_name>/<sub_component>" ],    # 部件的子部件编译入口
     "inner_kits": [                                                                    # 部件内部接口,可以多个
       {
         "header": {                                                                                    # 内部头文件信息
           "header_base": "<domain>/<subsystem>/<component_name>/interface/innerkits/<sub_component>",  # 内部头文件目录
           "header_files": [ "xxx.h" ]                                                                  # 头文件名称
         },
         "name": "<domain>/<subsystem>/<component_name>/interface/innerkits/<sub_component>"            # 内部接口名称
       }
     ]
     "test": [ "<domain>/<subsystem>/<component_name>/test" ]                           # 部件测试用例编译入口,可以多个测试套入口
   } 
  }
}

3、bundle.json示例

查看bundle.json文件的分布,在各个子系统,三方库下都存在。在开发板移植时,是不需要的。如果需要开发HPM包,是需要编写bundle.json文件的。可以随便打开一个查看具体的示例。

~/openharmony$ find ./ -name bundle.json
./ark/js_runtime/bundle.json
......
./base/account/os_account/bundle.json
......
./build/common/bundle.json
./developtools/bytrace_standard/bundle.json
......
./drivers/adapter/bundle.json
./drivers/peripheral/audio/bundle.json
......
./foundation/aafwk/standard/bundle.json
......
./kernel/linux/build/bundle.json
./kernel/liteos_a/bundle.json
./kernel/liteos_m/bundle.json
./test/xts/acts/bundle.json
......
./third_party/abseil-cpp/bundle.json
......
./utils/native/bundle.json
......

看下分布式软总线的示例openharmony\foundation\communication\dsoftbus\bundle.json。⑴处定义HPM包的名字,和⑶处的部件名称一样,都为dsoftbus_standard。⑵处的脚本,类似npm包一样,在执行hpm install时,来安装这个hpm包。⑷处设置该hpm包属于哪个子系统,已经适配的子系统类型,包含的特性等。⑸设置依赖的其他部件和三方库。⑹处设置该hpm包的编译构建信息。⑺处设置该hpm包的测试套信息。

{
⑴  "name": "@openharmony/dsoftbus_standard",
    "version": "3.1.0",
    "description": "dsoftbus_standard",
    "publishAs": "code-segment",
    "scripts": {
⑵     "install": "DEST_PATH=${DEP_BUNDLE_BASE}/foundation/communication/dsoftbus && mkdir -p $DEST_PATH && cp -r ./* $DEST_PATH"
    },
    "author": {},
    "repository": "",
    "license": "Apache License 2.0",
    "component": {
⑶    "name": "dsoftbus_standard",
⑷    "subsystem": "communication",
      "adapted_system_type": [
        "mini",
        "small",  
        "standard"
      ],
      "features": [
        "dsoftbus_standard_feature_conn_p2p",
        "dsoftbus_standard_feature_disc_ble",
        "dsoftbus_standard_feature_conn_br",
        "dsoftbus_standard_feature_conn_ble"
      ],
      "rom": "967KB",
      "ram": "28MB",
⑸    "deps": {
        "components": [
          "libhilog",
          "libipc_single",
          "libwifi_sdk",
          "libsystem_ability_fwk",
          "libsyspara",
          "samgr_proxy",
          "utils_base"
        ],
        "third_party": [
          "libcoap",
          "libmbedtls",
          "bounds_checking_function"
        ]
      },
⑹    "build": {
        "sub_component": [
          "//foundation/communication/dsoftbus/core:softbus_server",
          "//foundation/communication/dsoftbus/sdk:softbus_client",
          "//foundation/communication/dsoftbus/core/frame/standard/sa_profile:softbus_sa_profile",
          "//foundation/communication/dsoftbus/tools:tool"
        ],
        "inner_kits": [
          {
            "name": "//foundation/communication/dsoftbus/sdk:softbus_client",
            "header": {
              "header_files": [
                "bus_center/softbus_bus_center.h",
                "common/softbus_common.h",
                "discovery/discovery_service.h",
                "transport/session.h"
              ],
              "header_base": "//foundation/communication/dsoftbus/interfaces/kits"
            }
          }
        ],
⑺      "test": [
          "//foundation/communication/dsoftbus/tests/adapter/unittest:unittest",
          "//foundation/communication/dsoftbus/tests/sdk/discovery/unittest:unittest",
          "//foundation/communication/dsoftbus/tests/sdk/transmission/trans_channel:unittest",
          "//foundation/communication/dsoftbus/tests/sdk/bus_center/unittest:unittest",
          "//foundation/communication/dsoftbus/tests/core/authentication:unittest",
          "//foundation/communication/dsoftbus/tests/core/bus_center/lnn:unittest",
          "//foundation/communication/dsoftbus/tests/core/common/utils:unittest",
          "//foundation/communication/dsoftbus/tests/core/connection:connectionTest",
          "//foundation/communication/dsoftbus/tests/core/discovery/manager:unittest",
          "//foundation/communication/dsoftbus/tests/core/transmission/trans_channel/tcp_direct:unittest"
        ]
      }
    }
  }

小结

本文介绍了HPM包描述文件bundle.json信息。

如果大家想要更加深入的学习 OpenHarmony(鸿蒙南向) 开发的全栈内容,不妨可以参考以下相关学习文档进行学习,助你快速提升自己:

OpenHarmony 开发环境搭建:https://qr18.cn/CgxrRy

《OpenHarmony源码解析》:https://qr18.cn/CgxrRy

  • 搭建开发环境
  • Windows 开发环境的搭建
  • Ubuntu 开发环境搭建
  • Linux 与 Windows 之间的文件共享
  • ……

系统架构分析:https://qr18.cn/CgxrRy

  • 构建子系统
  • 启动流程
  • 子系统
  • 分布式任务调度子系统
  • 分布式通信子系统
  • 驱动子系统
  • ……

OpenHarmony 设备开发学习手册:https://qr18.cn/CgxrRy

在这里插入图片描述

OpenHarmony面试题(内含参考答案):https://qr18.cn/CgxrRy

写在最后

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
  • 想要获取更多完整鸿蒙最新学习资源,请移步前往小编:https://qr21.cn/FV7h05

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1843162.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

股票核心因子解读以及如何从接口获取股票数据信息

目录 1 股票基础信息1.1 股票核心因子1.2 获取股票信息 2 如何从接口获取股票数据2.1 yfinance2.2 finnhub-python2.3 alpha_vantage2.4 efinance2.4 Tushare 3 如何从各大金融平台获取咨询信息3.1 国外3.2 国内 1 股票基础信息 1.1 股票核心因子 基本面因子 因子名称计算公…

23种设计模式之桥接模式

桥接模式 1、定义 桥接模式&#xff1a;将抽象部分与它的实现部分解耦&#xff0c;使得两者都能独立变化 2、桥接模式结构 Abstraction&#xff08;抽象类&#xff09;&#xff1a;它是用于定义抽象类的&#xff0c;通常是抽象类而不是接口&#xff0c;其中定义了一个Imple…

基于JSP的高校信息资源共享平台

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果你对高校信息资源共享平台感兴趣或者有相关需求&#xff0c;可以通过文末的联系方式找到我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;IDEA…

2024/6/20 驱动day7GPIO子系统

GPIO子系统点六盏灯 #include <linux/init.h> #include <linux/module.h> #include <linux/of.h> #include <linux/gpio.h> #include <linux/of_gpio.h> struct device_node* node; struct device_node* child_node1; struct device_node* child…

CRMEB多商户阿里云集群部署流程

注意: 1.所有服务创建时地域一定要选择一致,这里我用的是杭州K区 2.文件/图片上传一定要用类似oss的云文件服务, 本文不做演示 一、 创建容器镜像服务&#xff0c;容器镜像服务(aliyun.com) ,个人版本就可以 先创建一个命名空间然后创建一个镜像仓库查看并记录镜像公网地址创建…

基于功率谱密度的旋转机械故障诊断方法(MATLAB R2021b)

关于功率谱密度&#xff0c;可以参考如下文章&#xff1a; https://zhuanlan.zhihu.com/p/417454806 在实际应用中&#xff0c;一个信号我们不可能获得无穷长时间段内的点&#xff0c;对于数字信号&#xff0c;只能通过采样的方式获得N个离散的点。实际信号基本上是随机信号&…

机器学习——RNN、LSTM

RNN 特点&#xff1a;输入层是层层相关联的&#xff0c;输入包括上一个隐藏层的输出h1和外界输入x2&#xff0c;然后融合一个张量&#xff0c;通过全连接得到h2&#xff0c;重复 优点&#xff1a;结构简单&#xff0c;参数总量少&#xff0c;在短序列任务上性能好 缺点&#x…

当游戏遭遇安全问题,我们应该怎么做?

在游戏安全领域&#xff0c;专业性最差、但最常见的案例类型是DDoS攻击&#xff08;分布式拒绝服务攻击&#xff09;。出于它的特性&#xff0c;中小厂商、独立开发者较容易遭受这类攻击。 例如&#xff0c;今年2月29日上线的手游《雷索纳斯》就遭受了名为ACCN组织发起的DDoS攻…

Windows反截屏开发实现

文章目录 Windows反截屏开发实现1. SetWindowDisplayAffinity2. 反截屏系统3. 总结 Windows反截屏开发实现 最近在我们云桌面中需要做到反截屏能力&#xff0c;所谓反截屏就是我们无法通过截图软件&#xff08;微信&#xff0c;QQ&#xff0c;截图等程序&#xff09;截取桌面的…

RTSP/Onvif安防监控平台EasyNVR抓包命令tcpdump使用不了的解决方法

安防视频监控汇聚EasyNVR智能安防视频监控平台&#xff0c;是基于RTSP/Onvif协议的安防视频平台&#xff0c;可支持将接入的视频流进行全平台、全终端分发&#xff0c;分发的视频流包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等格式。平台可提供的视频能力包括&#xff1a;…

FLEXPART拉格朗日粒子扩散模式建模技术及研究大气污染物源-汇关系

原文链接&#xff1a;FLEXPART拉格朗日粒子扩散模式建模技术及研究大气污染物源-汇关系 当前&#xff0c;大气污染是我国重要的环境问题之一。为了高效、精准地治理区域大气污染&#xff0c;需要弄清污染物的来源。拉格朗日粒子扩散模式FLEXPART通过计算点、线、面或体积源释放…

RocketMQ快速入门:如何保证消息不丢失|保证消息可靠性(九)

0. 引言 在金融、电商等对数据完整性要求极高的行业&#xff0c;消息的丢失可能会导致数据不一致&#xff0c;严重影响业务逻辑和数据统计&#xff0c;也影响客户体验&#xff0c;所以在很多业务场景下&#xff0c;我们都要求数据不能丢失。而rocketmq中&#xff0c;如何对消息…

jar包运行脚本

start&#xff1a; # 启动项目 #!/bin/bash nohup java -jar audit-2.1.0.jar > app.log 2>&1 & quit&#xff1a; # 关闭程序 #!/bin/bash PID$(pgrep -f audit-2.1.0.jar) # 根据应用程序名称查找进程ID kill -9 $PID # 结束进程使用 sh命令运行

泛微开发修炼之旅--22泛微实现免登陆得解决方案之一

文章链接&#xff1a;22泛微实现免登陆得解决方案之一

SSM旅游系统

摘要 旅游业正处于快速发展阶段&#xff0c;旅游系统的建设已经成为了旅游业发展的重要核心问题。在这样的背景下&#xff0c;SSM框架正逐步发展为一种主要的架构。但目前青海省旅游业信息化的发展仍面临诸多问题&#xff0c;包括系统功能不完善、用户体验不佳、数据管理不规范…

【记录】使用远程SSH配置d2l环境(含装pytorch,同时适用于本地anaconda)

文章目录 前言一、从创建新环境开始二、使用步骤1.安装pytorch2.安装 d2l 包3.安装其他包4.使用jupyter notebook 前言 记录一下如何利用使用命令行进行anaconda配置 d2l环境、pytorch并进行训练深度学习模型。 一、从创建新环境开始 如果是本地直接装一个 anaconda 软件就行…

Matlab数学建模实战应用:案例4 - 图像处理

目录 前言 一、图像处理基础 二、Matlab图像处理工具箱 三、案例&#xff1a;图像锐化、去噪和分割 步骤 1&#xff1a;读取和显示图像 步骤 2&#xff1a;图像锐化 步骤 3&#xff1a;图像去噪 步骤 4&#xff1a;图像分割 完整代码示例 四、实际应用 实例总结 总…

多路输出调光无频闪36V48V60V/300W恒流舞台灯调光芯片FP7126 LED舞台帕灯/激光灯控制IC,无频闪无噪音,多路共阳,调光深度0.1%

方案背景 在舞台演出中&#xff0c;灯光扮演着非常重要的角色&#xff0c;它不仅可以烘托氛围&#xff0c;营造氛围&#xff0c;更能够为表演者增添光彩&#xff0c;塑造形象。在博物馆场所中&#xff0c;突出展品细节。根据灯光用途和适用类型&#xff0c;舞台灯可以细分为聚光…

软硬件节水“组合拳”,助力智慧灌区信息化建设!

水资源短缺已成为全球共同面临的挑战&#xff0c;尤其在农业灌溉领域&#xff0c;其影响尤为显著。农业作为水资源消耗的主要行业之一&#xff0c;在日益严峻的水资源形势下&#xff0c;构建节水型灌区的紧迫性日益凸显。 节水型灌区的建设&#xff0c;旨在通过优化灌溉方式、减…