鸿蒙OpenHarmony开发板解析:【 部件配置规则】

部件

部件配置规则

部件的bundle.json放在部件源码的根目录下。以泛sensor子系统的sensor服务部件为例,部件属性定义描述文件字段说明如下:

开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。

{
    "name": "@ohos/sensor_lite",                                         # HPM部件英文名称,格式"@组织/部件名称"
    "description": "Sensor services",                                     # 部件功能一句话描述    
    "version": "3.1",                                                     # 版本号,版本号与OpenHarmony版本号一致
    "license": "MIT",                                                     # 部件License
    "publishAs": "code-segment",                                         # HPM包的发布方式,当前默认都为code-segment
    "segment": {                                        
        "destPath": ""            
    },                                                                     # 发布类型为code-segment时为必填项,定义发布类型code-segment的代码还原路径(源码路径)            
    "dirs": {"base/sensors/sensor_lite"},                                 # HPM包的目录结构,字段必填内容可以留空
    "scripts": {},                                                         # HPM包定义需要执行的脚本,字段必填,值非必填
    "licensePath": "COPYING",            
    "readmePath": {
        "en": "README.rst"
    },
    "component": {                                                         # 部件属性
        "name": "sensor_lite",                                             # 部件名称        
        "subsystem": "",                                                 # 部件所属子系统
        "syscap": [],                                                     # 部件为应用提供的系统能力
        "features": [],                                                  # 部件对外的可配置特性列表,一般与build中的sub_component对应,可供产品配置
        "adapted_system_type": [],                                         # 轻量(mini)小型(small)和标准(standard),可以是多个
        "rom": "92KB",                                                   # 部件ROM值
        "ram": "~200KB",                                                 # 部件RAM估值       
        "deps": {                      
        "components": [                                                  # 部件依赖的其他部件
          "samgr_lite",
          "ipc_lite"
        ],
        "third_party": [                                                 # 部件依赖的三方开源软件
          "bounds_checking_function"
        ],
        "hisysevent_config": []                                          # 部件HiSysEvent打点配置文件编译入口
      }         
        "build": {                                                         # 编译相关配置
            "sub_component": [
                ""//base/sensors/sensor_lite/services:sensor_service"",  # 部件编译入口
            ],                                                             # 部件编译入口,模块在此处配置
            "inner_kits": [],                                             # 部件间接口
            "test": []                                                     # 部件测试用例编译入口
        }
    }
 }
注意:lite上旧的部件在build/lite/components目录下对应子系统的json文件中,路径规则为:  {领域}/{子系统}/{部件} ,部件目录树规则如下:
component
├── interfaces
│   ├── innerkits  # 系统内接口,部件间使用
│   └── kits       # 应用接口,应用开发者使用
├── frameworks     # framework实现
├── services       # service实现
└── BUILD.gn       # 部件编译脚本

部件配置中需要配置部件的名称、源码路径、功能简介、是否必选、编译目标、RAM、ROM、编译输出、已适配的内核、可配置的特性和依赖等属性定义。

注意:部件配置中HiSysEvent打点配置文件使用说明,请参考文档 HiSysEvent打点配置。

新增部件时需要在对应子系统json文件中添加相应的部件定义。产品所配置的部件必须在某个子系统中被定义过,否则会校验失败。

新增并编译部件

  1. 添加部件。 本节以添加一个自定义的部件为例,描述如何编译部件,编译库、编译可执行文件等。

    示例部件partA由feature1、feature2和feature3组成,feature1的编译目标为一个动态库,feature2的目标为一个可执行程序,feature3的目标为一个etc配置文件。

    示例部件partA的配置需要添加到一个子系统中,本次示例将添加到subsystem_examples子系统中(subsystem_examples子系统定义在test/examples/目录)。

    示例部件partA的完整目录结构如下:

    test/examples/partA
    ├── feature1
    │   ├── BUILD.gn
    │   ├── include
    │   │   └── helloworld1.h
    │   └── src
    │       └── helloworld1.cpp
    ├── feature2
    │   ├── BUILD.gn
    │   ├── include
    │   │   └── helloworld2.h
    │   └── src
    │       └── helloworld2.cpp
    └── feature3
        ├── BUILD.gn
        └── src
            └── config.conf

    示例1:编写动态库gn脚本test/examples/partA/feature1/BUILD.gn,示例如下:

    config("helloworld_lib_config") {
     include_dirs = [ "include" ]
    }
    
    ohos_shared_library("helloworld_lib") {
      sources = [
        "include/helloworld1.h",
        "src/helloworld1.cpp",
      ]
      public_configs = [ ":helloworld_lib_config" ]
      part_name = "partA"
    }

    示例2:编写可执行文件gn脚本test/examples/partA/feature2/BUILD.gn,示例如下:

    ohos_executable("helloworld_bin") {
      sources = [
        "src/helloworld2.cpp"
      ]
      include_dirs = [ "include" ]
      deps = [                                # 依赖部件内模块
        "../feature1:helloworld_lib"
      ]
      external_deps = [ "partB:module1" ]     # (可选)如果有跨部件的依赖,格式为“部件名:模块名”
      install_enable = true                   # 可执行程序缺省不安装,需要安装时需要指定
      part_name = "partA"
    }

    示例3:编写etc模块gn脚本test/examples/partA/feature3/BUILD.gn,示例如下:

    ohos_prebuilt_etc("feature3_etc") {
      source = "src/config.conf"
      relative_install_dir = "init"    #可选,模块安装相对路径,相对于默认安装路径;默认在/system/etc目录
      part_name = "partA"
    }

    示例4:在部件的bundle.json中添加模块配置:test/examples/bundle.json。每个部件都有一个bundle.json配置文件,在部件的根目录下。示例见:部件的bundle.json

  2. 将部件添加到产品配置中。 在产品的配置中添加部件,产品对应的配置文件://vendor/{product_company}/{product-name}/config.json。下面以vendor/hisilicon/hispark_taurus_standard/config.json为例:
  {
        "product_name": "hispark_taurus_standard",
        "device_company": "hisilicon",
        "device_build_path": "device/board/hisilicon/hispark_taurus/linux",
        "target_cpu": "arm",
        "type": "standard",
        "version": "3.0",
        "board": "hispark_taurus",
        "inherit": [ "productdefine/common/base/standard_system.json",
                    "productdefine/common/inherit/ipcamera.json"
        ],
        "enable_ramdisk": true,
        "subsystems": [
          {
            "subsystem": "subsystem_examples",                              # 部件所属子系统
            "components": [
              {
                "component": "partA",                                       # 部件名称
                "features": []                                              # 部件对外的可配置特性列表
              }
            ]
          },
        ······
      }
 

搜狗高速浏览器截图20240326151344.png


从中可以看出产品名称、芯片厂家等;inherit指出依赖的通用组件;subsystems指出通用组件以外的部件。

在产品配置文件中添加 "subsystem_examples:partA",表示该产品中会编译并打包partA到版本中。

  1. 编译。 主要有两种编译方式,命令行方式和hb方式,下面以命令行方式为例:

    部件可以使用"--build-target 部件名"进行单独编译,以编译产品hispark_taurus_standard的musl部件为例,编译命令如下:

    ./build.sh --product-name hispark_taurus_standard --build-target musl --ccache

    也可以编译相应产品,以编译hispark_taurus_standard为例,编译命令如下:

    ./build.sh --product-name hispark_taurus_standard --ccache
  2. 编译输出。 编译所生成的文件都归档在out/hispark_taurus/目录下,结果镜像输出在 out/hispark_taurus/packages/phone/images/ 目录下。

鸿蒙开发岗位需要掌握那些核心要领?

目前还有很多小伙伴不知道要学习哪些鸿蒙技术?不知道重点掌握哪些?为了避免学习时频繁踩坑,最终浪费大量时间的。

自己学习时必须要有一份实用的鸿蒙(Harmony NEXT)资料非常有必要。 这里我推荐,根据鸿蒙开发官网梳理与华为内部人员的分享总结出的开发文档。内容包含了:【ArkTS、ArkUI、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战】等技术知识点。

废话就不多说了,接下来好好看下这份资料。

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。鸿蒙OpenHarmony知识←前往。下面是鸿蒙开发的学习路线图。

针对鸿蒙成长路线打造的鸿蒙学习文档。鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,帮助大家在技术的道路上更进一步。

其中内容包含:

《鸿蒙开发基础》鸿蒙OpenHarmony知识←前往

  1. ArkTS语言
  2. 安装DevEco Studio
  3. 运用你的第一个ArkTS应用
  4. ArkUI声明式UI开发
  5. .……

《鸿蒙开发进阶》鸿蒙OpenHarmony知识←前往

  1. Stage模型入门
  2. 网络管理
  3. 数据管理
  4. 电话服务
  5. 分布式应用开发
  6. 通知与窗口管理
  7. 多媒体技术
  8. 安全技能
  9. 任务管理
  10. WebGL
  11. 国际化开发
  12. 应用测试
  13. DFX面向未来设计
  14. 鸿蒙系统移植和裁剪定制
  15. ……

《鸿蒙开发实战》鸿蒙OpenHarmony知识←前往

  1. ArkTS实践
  2. UIAbility应用
  3. 网络案例
  4. ……

最后

鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

爬虫爬取必应和百度搜索界面的图片

爬虫爬取必应和百度搜索界面的图片 爬取bing搜索图片界面爬取百度搜索界面图片结果如下 爬取bing搜索图片界面 浏览器驱动下载地址 对应版本即可 浏览器驱动 mad直接用 import os import re from selenium import webdriver from selenium.webdriver import Keys from sel…

ai智能机器人电销的发展现状如何?

在移动互联网时代,人们对于营销的需求越来越高,而传统的营销方式已经无法满足人们的需求。下面我们来看看智能机器人电销的发展现状如何? 智能机器人电销作为一种全新的营销方式,正在迅速崛起。据市场机构统计,未来几…

基于OceanBase+Flink CDC,云粒智慧实时数仓演进之路

摘要:本文整理自云粒智慧高级技术专家付大伟在 4 月 20 日的 2024 OceanBase 开发者大会上的分享,讲述了其数据中台在传统数仓技术框架下做的一系列努力后,跨进 FlinkCDC 结合 OceanBase 的实时数仓演进过程。 内容主要分为以下几个部分: 业务…

武汉星起航:展望跨境电商新篇章,创新发展助力品牌国际化

随着全球经济一体化的深入发展,跨境电商行业正迎来前所未有的发展机遇。在这个充满机遇的时代,武汉星起航电子商务有限公司以其独特的自营亚马逊跨境电商模式和卖家孵化服务,成为了行业内的一股强劲力量。展望未来,武汉星起航将继…

刷!简单的转录组分析+Cytoscape三小时工作量,思路易复现

说在前面 两样本孟德尔随机化应该大伙都了解的不少,不过今天看到一篇,有点“料”的文章,一句话总结:Cytoscape乱拳打死老师傅,通篇除了WGCNA、差异分析是作为常规的转录组分析方法,剩下的几乎都是ClueGO的…

AndroidStudio开发实现一个音乐播放器

文章目录 项目概述开发环境项目结构功能演示和分析视频演示主要功能点源码获取 项目概述 此次项目使用AndroidStudio开发一个音乐播放器。包含登录注册功能,播放暂停等功能,自动检索和手动检索Mp3功能。还使用Sqlite数据库做了一个音乐收藏,…

使用网络工具监控网络性能

网络工具和实用程序有助于有效地检测网络问题,诊断其原因和位置,以及缓解和解决问题,这有助于确保网络环境的稳定性,使用户免受设备连接问题带来的麻烦。 网络工具已经成为每个网络管理员用于有效诊断和处理网络问题的解决方案中…

.Net MAUI 搭建Android 开发环境

一、 安装最新版本 VS 2022 安装时候选择上 .Net MAUI 跨平台开发 二、安装成功后,创建 .Net MAUI 应用 三、使用 VS 自带的 Android SDK 下载 ,Android镜像、编译工具、加速工具 四、使用Vs 自带的 Android Avd 创建虚拟机 五、使用 Android 手机真机调试

vue3 自定义调控参数-简易生成器

vue3 自定义调控参数-简易生成器 文章目录 封装生成器控件如下父组件使用如下: 此功能好像是某厂的在线视频笔试题,当时写完也没有结果。。。我觉得此 demo 适用场景:自定义动态表单时需要定制字段、用户自定义信息等 封装生成器控件如下 /…

社媒营销必看:Instagram网页版使用指南

Instagram在全球有超过10亿的月活跃用户。其每日故事功能有超过5亿的使用量,Instagram用户每天喜欢超过4 亿个帖子——据Instagram的2024年最新报告,粉丝数在10万以下的小品牌在故事上的点击率增长了35%,少于1万个粉丝的品牌的帖子到达率增长…

【懂车帝注册安全报告-无法登陆的背后是?】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露 短信盗刷的安全问题,影响业务及导致用户投诉 带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

设置smb共享的几个注意事项

samba用户名和密码是可以设置为和创建linux时的系统用户名一样的,方法如下: 1.sudo vi /etc/samba/smb.conf 2.在最下行添加配置 3.添加samba用户名和密码,这里选择和系统用户名一样 sudo smbpasswd -a xuyy 4.重启samba服务 sudo syste…

Linux Ubuntu(玩客云) qBittorrent docker BT下载(qbittorrent 密码错误无法登录 ip地址被禁止登录等)

提示: 需要提前安装Docker 根据qBittorrent官网的更新日志https://www.qbittorrent.org/news ,4.6.1.0包含一个重大更新。可以看到自4.6.1.0开始,qBittorrent将弃用adminadmin默认密码,采用随机密码,将在终端控制台输出…

Audition处理音频文件背景音(保留人声)

音频文件背景音可以使用Adobe Audition进行处理,Adobe Audition的下载与安装见之前博客: Adobe Audition 2024 下载与安装-CSDN博客https://blog.csdn.net/xiaoxian666/article/details/138612837?spm1001.2014.3001.5502 一、选中一段不含人声的背景…

【分治算法】【Python实现】循环赛日程表

文章目录 [toc]问题描述分治算法示例Python实现 无运动员数量约束循环赛日程表算法示例Python实现 个人主页:丷从心 系列专栏:分治算法 学习指南:Python学习指南 问题描述 设有 n 2 k n 2^{k} n2k个运动员要进行网球循环赛,设…

MySQL利用变量进行查询操作

新建连接,自带world数据库,里面自带city表格。 # MySQL利用变量进行查询操作 set cityNameHaarlemmermeer; select * from city where NamecityName;# 多个结果查询 set cityName1Haarlemmermeer; set cityName2Breda; set cityName3Willemstad; selec…

友思特分享 | 激发专属跃迁:用于皮肤医美和光学研究种子源的DPSS激光器

导读 紧凑、坚固、稳定和提供高质量光束的友思特DPSS激光器因其卓越的性能,可作为激光种子源,广泛应用于皮肤医美、非线性光学OPO,以及全息投影技术。 激光(Laser)的诞生是上个世纪科学技术的巨大飞跃,其发…

【工具】如何提取一个mp4文件的关键帧

文章目录 怎么做如何安装ffmepgUbuntu 或 DebianCentOS 或 FedoramacOSWindows其他 Linux 发行版 实践什么是关键帧 怎么做 你可以使用ffmpeg这个强大的多媒体处理工具来提取mp4文件中的关键帧。以下是一个示例命令,可以使用ffmpeg从mp4文件中提取关键帧&#xff1…

Ansible-inventory和playbook

文章目录 一、inventory 主机清单1、列表表示2、inventory 中的变量3、变量3.1 主机变量3.2 组变量3.3 组嵌套 二、playbook剧本1、playbook的组成2、编写剧本2.1 剧本制作2.2 准备nginx.conf2.3 运行剧本2.4 查看webservers服务器2.5 补充参数 3、剧本定义、引用变量3.1 剧本制…

java爬虫代理ip(java爬虫代码示例)

java爬虫代理ip 在编写java爬虫时,经常会遇到需要使用代理IP来访问目标网站的情况。这时候,我们就需要编写代码来实现代理IP的功能。接下来,我们将为大家介绍如何在java爬虫中使用代理IP,以及给出相应的代码示例。 首先&#xff…
最新文章