[转载] 标准系统如何添加一个模块
标准系统如何添加一个模块
转载自通晓开发板代码库文档:
https://gitee.com/isoh_edu/txsmartropenharmony/blob/main/build/docs/标准系统如何添加一个模块.md
要添加的模块可以分为以下三种情况,对原有的配置文件进行不同程度的修改。
- 在原有部件中添加一个模块
- 新建部件并在其中添加模块
- 新建子系统并在该子系统的部件下添加模块
在原有部件中添加一个模块
-
在模块目录下配置BUILD.gn,根据类型选择对应的模板。
支持的模板类型:
ohos_executable ohos_shared_library ohos_static_library ohos_source_set # 预编译模板: ohos_prebuilt_executable ohos_prebuilt_shared_library ohos_prebuilt_etc例子:
ohos_shared_library示例
import("//build/ohos.gni") ohos_shared_library("helloworld") { sources = [] include_dirs = [] cflags = [] cflags_c = [] cflags_cc = [] ldflags = [] configs = [] deps =[] # 部件内模块依赖 # 跨部件模块依赖定义, # 定义格式为 "部件名:模块名称" # 这里依赖的模块必须是依赖的部件声明在inner_kits中的模块 external_deps = [ "part_name:module_name", ] output_name = "" # 可选,模块输出名 output_extension = "" # 可选,模块名后缀 module_install_dir = "" # 可选,缺省在/system/lib64或/system/lib下, 模块安装路径,模块安装路径,从system/,vendor/后开始指定 relative_install_dir = "" # 可选,模块安装相对路径,相对于/system/lib64或/system/lib;如果有module_install_dir配置时,该配置不生效 part_name = "" # 必选,所属部件名称 }ohos_executable示例:
ohos_executable模板属性和ohos_shared_library基本一致
注意:可执行模块(即ohos_executable模板定义的)默认是不安装的,如果要安装,需要指定install_enable = true
ohos_prebuilt_etc示例:
import("//build/ohos.gni") ohos_prebuilt_etc("etc_file") { source = "file" deps = [] # 部件内模块依赖 module_install_dir = "" # 可选,模块安装路径,从system/,vendor/后开始指定 relative_install_dir = "" # 可选,模块安装相对路径,相对于system/etc;如果有module_install_dir配置时,该配置不生效 part_name = "" # 必选,所属部件名称 } -
修改包含该模块所属部件的ohos.build配置文件
以下是一个ohos.build文件
{ "subsystem": "ace", "parts": { "napi": { "module_list": [ "//foundation/ace/napi:napi_packages" ], "inner_kits": [ ], "test_list": [ "//foundation/ace/napi:napi_packages_test", "//foundation/ace/napi/test/unittest:unittest" ] } } }文件说明:
subsystem定义了子系统的名称;parts定义了子系统包含的部件。
一个部件包含部件名,部件包含的模块module_list,部件提供给其它部件的接口inner_kits,部件的测试用例test_list。
修改内容:
要添加一个模块到已有部件中去,只需要在该部件的module_list中添加新加模块的gn编译目标;假如该模块提供给其它模块接口,需要在inner_kits中添加对应的配置;如果有该模块的测试用例,需要添加到test_list中去。
新建部件并在其中添加模块
-
在模块目录下配置BUILD.gn,根据类型选择对应的模板。
这一步与在原有部件中添加一个模块的方法基本一致,只需注意该模块对应BUILD.gn文件中的part_name为新建部件的名称即可。
-
修改或者新建ohos.build配置文件
{ "subsystem": "子系统名", "parts": { "新建部件名": { "module_list": [ "部件包含模块的gn目标" ], "inner_kits": [ ], "test_list": [ "测试用例", ] } } }在原有子系统中添加一个新的部件,有两种方法,一种是在该子系统原有的ohos.build文件中添加该部件,另一种是新建一个ohos.build文件,注意无论哪种方式该ohos.build文件均在对应子系统所在文件夹下。
ohos.build文件包含两个部分,第一部分subsystem说明了子系统的名称,parts定义了该子系统包含的部件,要添加一个部件,需要把该部件对应的内容添加进parts中去。添加的时候需要指明该部件包含的模块module_list,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test_list中说明,inner_kits与test_list没有也可以不添加。
-
在productdefine/common/products目录下的产品配置文件(json格式)中添加对应的部件,直接添加到原有部件后即可。
{ "parts":{ "部件所属子系统名:部件名":{} } }
新建子系统并在该子系统的部件下添加模块
-
在模块目录下配置BUILD.gn,根据类型选择对应的模板。这一步与新建部件并在其中添加模块中对应的步骤并无区别。
-
在新建的子系统目录下每个部件对应的文件夹下创建ohos.build文件,定义部件信息。这一步与新建部件并在其中添加模块中对应的步骤并无区别。
-
修改build目录下的subsystem_config.json文件
{ "子系统名": { "path": "子系统目录", "name": "子系统名", ... } }该文件定义了有哪些子系统以及这些子系统所在文件夹路径,添加子系统时需要说明子系统path与name,分别表示子系统路径和子系统名。
-
在productdefine/common/products目录下的产品配置如Hi3516DV300.json中添加对应的部件,直接添加到原有部件后即可。
{ ... "parts":{ "部件所属子系统名:部件名":{} } }成功添加验证:
- 在输出文件夹的对应子系统文件夹下的部件文件夹下的BUILD.gn文件中module_list包含了新建模块的BUILD.gn中定义的目标。
- 编译完成后打包到image中去,生成对应的so文件或者二进制文件
配置文件说明
鸿蒙操作系统的配置文件主要有四个
-
productdefine/common/products目录下的产品名.json文件
{ "product_name": "Hi3516DV300", "product_company": "hisilicon", "product_device": "hi3516dv300", "version": "2.0", "type": "standard", "parts":{ "ace:ace_engine_standard":{}, "ace:napi":{}, "account:os_account_standard":{}, "distributeddatamgr:native_appdatamgr":{}, "distributeddatamgr:distributeddatamgr":{}, "distributeddatamgr:appdatamgr_jskits":{}, } }指明了产品名,产品厂商,产品设备,版本,要编译的系统类型,以及产品包含的部件。
-
build目录下的subsystem_config.json文件
{ "ace": { "project": "hmf/ace", "path": "foundation/ace", "name": "ace", "dir": "foundation" } }该文件对子系统进行了说明,我们需要该子系统定义中的name与path,分别表示子系统的名称和所在文件夹路径。
-
子系统中ohos.build文件
{ "subsystem": "ace", "parts": { "napi": { "module_list": [ "//foundation/ace/napi:napi_packages" ], "inner_kits": [ ], "test_list": [ "//foundation/ace/napi:napi_packages_test", "//foundation/ace/napi/test/unittest:unittest" ] } } }ohos.build文件定义了子系统包含的部件。
每个部件定义它所包含的模块目标module_list,以及部件间交互的接口inner_kits,测试用例test_list。部件包含的模块目标module_list是必须要说明的。
-
每个模块对应的BUILD.gn文件
可以使用提供的模板,也可以使用gn语法规则自定义编写。

浙公网安备 33010602011771号