# 标准系统如何添加一个模块 要添加的模块可以分为以下三种情况,对原有的配置文件进行不同程度的修改。 + 在原有部件中添加一个模块 + 新建部件并在其中添加模块 + 新建子系统并在该子系统的部件下添加模块 ## 在原有部件中添加一个模块 1. 在模块目录下配置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 = "" # 必选,所属部件名称 } ``` 2. 修改包含该模块所属部件的ohos.build配置文件 以下是一个ohos.build文件 ```build { "subsystem": "arkui", "parts": { "napi": { "module_list": [ "//foundation/arkui/napi:napi_packages" ], "inner_kits": [ ], "test_list": [ "//foundation/arkui/napi:napi_packages_test", "//foundation/arkui/napi/test/unittest:unittest" ] } } } ``` **文件说明:** subsystem定义了子系统的名称;parts定义了子系统包含的部件。 一个部件包含部件名,部件包含的模块module_list,部件提供给其它部件的接口inner_kits,部件的测试用例test_list。 **修改内容:** 要添加一个模块到已有部件中去,只需要在该部件的module_list中添加新加模块的gn编译目标;假如该模块提供给其它模块接口,需要在inner_kits中添加对应的配置;如果有该模块的测试用例,需要添加到test_list中去。 ## 新建部件并在其中添加模块 1. 在模块目录下配置BUILD.gn,根据类型选择对应的模板。 这一步与在原有部件中添加一个模块的方法基本一致,只需注意该模块对应BUILD.gn文件中的part_name为新建部件的名称即可。 2. 修改或者新建ohos.build配置文件 ```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没有也可以不添加。 3. 在productdefine/common/products目录下的产品配置文件(json格式)中添加对应的部件,直接添加到原有部件后即可。 ```json { "parts":{ "部件所属子系统名:部件名":{} } } ``` ## 新建子系统并在该子系统的部件下添加模块 1. 在模块目录下配置BUILD.gn,根据类型选择对应的模板。这一步与新建部件并在其中添加模块中对应的步骤并无区别。 2. 在新建的子系统目录下每个部件对应的文件夹下创建ohos.build文件,定义部件信息。这一步与新建部件并在其中添加模块中对应的步骤并无区别。 3. 修改build目录下的subsystem_config.json文件 ```json { "子系统名": { "path": "子系统目录", "name": "子系统名", ... } } ``` 该文件定义了有哪些子系统以及这些子系统所在文件夹路径,添加子系统时需要说明子系统path与name,分别表示子系统路径和子系统名。 4. 在productdefine/common/products目录下的产品配置如Hi3516DV300.json中添加对应的部件,直接添加到原有部件后即可。 ```json { ... "parts":{ "部件所属子系统名:部件名":{} } } ``` **成功添加验证:** + 在输出文件夹的对应子系统文件夹下的部件文件夹下的BUILD.gn文件中module_list包含了新建模块的BUILD.gn中定义的目标。 + 编译完成后打包到image中去,生成对应的so文件或者二进制文件 ## 配置文件说明 鸿蒙操作系统的配置文件主要有四个 1. productdefine/common/products目录下的产品名.json文件 ```json { "product_name": "Hi3516DV300", "product_company": "hisilicon", "product_device": "hi3516dv300", "version": "2.0", "type": "standard", "parts":{ "arkui:ace_engine_standard":{}, "arkui:napi":{}, "account:os_account":{}, "distributeddatamgr:native_appdatamgr":{}, "distributeddatamgr:distributeddatamgr":{}, "distributeddatamgr:appdatamgr_jskits":{} } } ``` 指明了产品名,产品厂商,产品设备,版本,要编译的系统类型,以及产品包含的部件。 2. build目录下的subsystem_config.json文件 ```json { "arkui": { "project": "hmf/ace", "path": "foundation/arkui", "name": "arkui", "dir": "foundation" } } ``` 该文件对子系统进行了说明,我们需要该子系统定义中的name与path,分别表示子系统的名称和所在文件夹路径。 3. 子系统中ohos.build文件 ```build { "subsystem": "arkui", "parts": { "napi": { "module_list": [ "//foundation/arkui/napi:napi_packages" ], "inner_kits": [ ], "test_list": [ "//foundation/arkui/napi:napi_packages_test", "//foundation/arkui/napi/test/unittest:unittest" ] } } } ``` ohos.build文件定义了子系统包含的部件。 每个部件定义它所包含的模块目标module_list,以及部件间交互的接口inner_kits,测试用例test_list。部件包含的模块目标module_list是必须要说明的。 4. 每个模块对应的BUILD.gn文件 可以使用提供的模板,也可以使用gn语法规则自定义编写。