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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

承接上一篇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的相关子系统或者框架的可以留言或私信。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

“Openharmony的编译构建--进阶篇2” 的相关文章