首页 > 其他分享 >Openharmony的编译构建--进阶篇2

Openharmony的编译构建--进阶篇2

时间:2023-04-23 11:33:17浏览次数:48  
标签:subsystem Openharmony name 编译 -- 进阶篇 hap path assets

承接上一篇Openharmony的编译构建--进阶篇1中说明了在Openharmony V3.1的如何在标准系统即L2设备一个模块的两种情况,此篇对第三种情况进行说明。

四、新建子系统并在该子系统的部件下添加模块

1.在模块目录下配置BUILD.gn,根据类型选择对应的模板

2.新建包含该模块所属部件的bundle.json

此前两步与前面介绍的两种方式并无区别。

3.修改//build/subsystem_config.json

比如:在foundation目录下新建test_subsystem,将第一步与第二步新建的bundle.json与BUILD.gn移入。

修改bundle.json中"subsystem": "test_subsystem",并且BUILD.gn中的subsystem_name = "test_subsystem",part_name = ""进行修改。

{
  "ace": {
    "path": "foundation/ace",
    "name": "ace"
  },
  "ai": {
    "path": "foundation/ai",
    "name": "ai"
  },
  "account": {					# 子系统
    "path": "base/account",		# 子系统目录
    "name": "account"			# 子系统名称
  },
  # 新增示例如下:
  "test_subsystem": {
    "path": "foundation/test_subsystem",
    "name": "test_subsystem"
  }, 
...
}

4.//productdefine/common/products/rk3568.json文件添加部件"account:os_account_test":{}

不再赘述。

Openharmony里执行

./build.sh --product-name rk3568

编译完成后,在//out/rk3568/test_subsystem/目录下可以找到编译完成的可执行文件与动态库。

五、BUILD.gn的其它模板

一些常用的模板类型:

# 生成系统hap
ohos_hap	
# 拷贝文件
ohos_copy
# 源目标集合
ohos_source_set
# 执行脚本,支持shell、python
action
# 工作集
group
# 配置集合
config

ohos_hap例子

ohos_hap("clock")
  hap_profile = "./src/main/config.json" # config.json
  js_assets = ["./src/main/js/defaults"]
  raw_assets = ["./raw_assets"]
  resources = ["./src/main/resources"]
  shared_libraries = ["//third_party/libpng:libpng"] # native库
  certificate_profile = "../signature/systemui.p7b"	 # Cer文件
  hap_name = "SystemUI-NavigationBar" 	# hap包名字
  part_name = "prebuilt_hap"
  subsystem_name = "application"
}
  • 声明一个hap目标,该目标会生成一个hap包,最终将会打包到system镜像中
  • 支持的变量

1.hap_profile:hap包的config.json

2.js_assets:js资源,编译后放置在assets/js/default目录下

3.raw_assets:原始assets,这些assets会直接拷贝到hap包的assets目录下

4.resources:资源文件,编译后放置在assets/entry/resources目录下

5.deps:当前目标的依赖

6.shared_libraries:当前目标依赖的native库

7.hap_name:hap包的名字,可选,默认为目标名

8.final_hap_path:用户可以制定生成的hap的位置,可选,final_hap_path中会覆盖hap_name

9.subsystem_name: hap包从属的子系统名,需要和bundle.json中的名字对应,否则将导致无法安装 到system镜像中

10.part_name: hap包从属的部件名。同subsystem_name

11.js2abc: 是否需要将该hap包转换为ARK的字节码

12.certificate_profile: hap对应的授权文件,用于签名

13.certificate_file: 证书文件,证书文件和授权文件,应用开发者需要去openharmony官网申请

14.keystore_path: keystore文件,用于签名

15.keystore_password: keystore的密码,用于签名

16.key_alias: key的别名

17.module_install_name: 安装时的hap包名称

18.module_install_dir: 安装到system中的位置,默认安装在system/app目录下

ohos_source_set例子:

ohos_source_set("glib_source") {
  source = [
  	"glib/deprecated/gallocator.c",
  	"glib/deprecated/gcache.c",
  	"glib/deprecated/grel.c",
  	...
  ]
  configs = [ ":glib_config"]
}

ohos_shared_library("glib") {
  deps = [ ":glib_source"]
  part_name = "multimedia_media_standard"
  subsystem_name = "multimedia"
}

action例子:

action("gen_config_header") {
  script = "//third_party/ffmpeg/ohos_config.sh"
  
  args = [
    rebase_path("//third_party/ffmpeg", root_build_dir),
    rebase_path("${target_gen_dir}/include/", root_build_dir),
  ]
  
  outputs = [ "${target_gen_dir}/include/config.h"]
}

六、Openharmony编译构建的运行机制

Openharmony侧的编译构建流程主要包含编译命令行解析,调用gn,执行ninja:

  • 命令行解析:解析待编译的产品名称,加载相关配置
  • 调用gn:根据命令行解析的产品名称和编译类型,配置编译工具链和全局的编译选项
  • 执行ninja:启动编译并生成对应的产品版本。

后续更精彩

1.L0与L1的编译构建过程以及后续V3.2版本的构建流程稍有不同,但是如果了解了Openharmony的编译构建的运行机制,可以理解相应的产品的编译过程。如果在技术朋友在此方面有疑惑时,可以留言与私信,或者如果提问的朋友相对较多时,再开一篇进行解析说明。

2.各位朋友和技术爱好者有想了解Openharmony的相关子系统或者框架的,可以留言或私信。

标签:subsystem,Openharmony,name,编译,--,进阶篇,hap,path,assets
From: https://blog.51cto.com/u_15304012/6216927

相关文章

  • Cookie基本使用
    cookie是什么?是由服务器端生成,发送给User-Agent(一般指浏览器),浏览器将cookie以键值对的形式保存到某个目录下的文本文件内。下次请求该网站时就把cookie发送回服务器。(cookie就是一个小文件,浏览器对其大小一般限制在4k,用来记录一些信息(一般用作标识))为什么有cookie?web应用程......
  • c++第十天
    指针复习:  什么是指针:    数据类型定义指针变量整型内存编号访问对应内存  为什么使用指针:    1、函数之间共享变量      输入、输出    2、提高传参效率      指针变量4\8字节    3、使用堆内存时......
  • 手把手教你使用Flask搭建ES搜索引擎(预备篇)
    今日鸡汤我死国生,我死犹荣,身虽死精神长生,成功成仁,实现大同。--赵博生/1前言/    Elasticsearch是一个开源的搜索引擎,建立在一个全文搜索引擎库ApacheLucene™基础之上。    那么如何实现 Elasticsearch和Python 的对接成为我们所关心的问题了(怎么什么都要和Pyt......
  • 一篇文章带你用Python网络爬虫实现网易云音乐歌词抓取
    前几天小编给大家分享了数据可视化分析,在文尾提及了网易云音乐歌词爬取,今天小编给大家分享网易云音乐歌词爬取方法。本文的总体思路如下:找到正确的URL,获取源码;利用bs4解析源码,获取歌曲名和歌曲ID;调用网易云歌曲API,获取歌词;将歌词写入文件,并存入本地。本文的目的是获取网易云......
  • 优化配置Little Snitch for Mac的规则和设置
    LittleSnitchforMac是一款专业的macOS防火墙软件,它可以帮助你控制应用程序是否访问网络或者磁盘,并对系统不可信的进程和信息进行监控。如果你想保护你的Mac的网络安全,那么你需要了解如何配置和优化LittleSnitchforMac的规则和设置。本文将为你介绍一些基本的操作和技巧,让你能......
  • 3个迹象表明,企业是时候搭建CDP了!
    和过去任何时代相比,当下的数字化程度都更加深入,且还在持续加速的进程中。如今,客户数据的重要性已经毋庸置疑。企业应该如何应用数字化改进客户体验,以及由此产生的海量客户数据,已经成为新的焦点。许多企业通过使用客户数据平台(CDP),游刃有余地驾驭了众多品牌和客户的复杂数据。那么问......
  • 会话跟踪技术
    会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开链接,会话结束。在一次会话中可以包含多次请求和响应。会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据。HTTP协议是无状态的,每次浏览器向服......
  • SpringBoot中底层对 /health 的请求是怎么处理的?
     在SpringBoot应用程序中,/health端点是通过HealthEndpointbean来处理的。当您访问/health端点时,SpringBoot会调用HealthEndpointbean的health()方法来检查应用程序的健康状态,并返回相应的响应。HealthEndpointbean是通过HealthEndpointAutoConfiguration自......
  • 王道408操作系统-4.2文件目录 习题总结
    错题复盘第一题散列法一般不用来检索目录,因为想要避免散列冲突就需要大量的存储空间来存放目录,造成不必要的浪费。在树形目录中检索时,应从当前目录开始逐级检索。在上图中,当我想要查找文件N时,使用文件路径/D/p/N查找,很明显分量名P不在D之下,继续往下查找没有任何意义,这时就......
  • 01 | ranges的初步印象(新旧做法的对比)
    1.ranges::sort——给容器排序在这之前我们需要采用标准库的sort算法并且需要传入两个迭代器。但是现在我们可以这样,使用ranges命名空间下的sort函数,仅需要传入一个容器的名字即可。以下是涉及到的concepts2.views的概念——给对象进行筛选、转换、复制我们可以将一个......