1# 标准系统如何添加一个模块 2 3要添加的模块可以分为以下三种情况,对原有的配置文件进行不同程度的修改。 4 5+ 在原有部件中添加一个模块 6+ 新建部件并在其中添加模块 7+ 新建子系统并在该子系统的部件下添加模块 8 9## 在原有部件中添加一个模块 10 111. 在模块目录下配置BUILD.gn,根据类型选择对应的模板。 12 13 **支持的模板类型:** 14 15 ``` 16 ohos_executable 17 ohos_shared_library 18 ohos_static_library 19 ohos_source_set 20 21 # 预编译模板: 22 ohos_prebuilt_executable 23 ohos_prebuilt_shared_library 24 ohos_prebuilt_etc 25 ``` 26 27 **例子:** 28 29 *ohos_shared_library示例* 30 31 32 ``` 33 import("//build/ohos.gni") 34 ohos_shared_library("helloworld") { 35 sources = [] 36 include_dirs = [] 37 cflags = [] 38 cflags_c = [] 39 cflags_cc = [] 40 ldflags = [] 41 configs = [] 42 deps =[] # 部件内模块依赖 43 44 # 跨部件模块依赖定义, 45 # 定义格式为 "部件名:模块名称" 46 # 这里依赖的模块必须是依赖的部件声明在inner_kits中的模块 47 external_deps = [ 48 "part_name:module_name", 49 ] 50 51 output_name = "" # 可选,模块输出名 52 output_extension = "" # 可选,模块名后缀 53 module_install_dir = "" # 可选,缺省在/system/lib64或/system/lib下, 模块安装路径,模块安装路径,从system/,vendor/后开始指定 54 relative_install_dir = "" # 可选,模块安装相对路径,相对于/system/lib64或/system/lib;如果有module_install_dir配置时,该配置不生效 55 56 part_name = "" # 必选,所属部件名称 57 } 58 ``` 59 60 _ohos\_executable示例:_ 61 62 ohos\_executable模板属性和ohos\_shared\_library基本一致 63 64 _注意:可执行模块(即ohos\_executable模板定义的)默认是不安装的,如果要安装,需要指定install\_enable = true_ 65 66 _ohos\_prebuilt\_etc示例:_ 67 68 ``` 69 import("//build/ohos.gni") 70 ohos_prebuilt_etc("etc_file") { 71 source = "file" 72 deps = [] # 部件内模块依赖 73 module_install_dir = "" # 可选,模块安装路径,从system/,vendor/后开始指定 74 relative_install_dir = "" # 可选,模块安装相对路径,相对于system/etc;如果有module_install_dir配置时,该配置不生效 75 part_name = "" # 必选,所属部件名称 76 } 77 ``` 78 792. 修改包含该模块所属部件的ohos.build配置文件 80 81 以下是一个ohos.build文件 82 83 ```build 84 { 85 "subsystem": "arkui", 86 "parts": { 87 "napi": { 88 "module_list": [ 89 "//foundation/arkui/napi:napi_packages" 90 ], 91 "inner_kits": [ 92 ], 93 "test_list": [ 94 "//foundation/arkui/napi:napi_packages_test", 95 "//foundation/arkui/napi/test/unittest:unittest" 96 ] 97 } 98 } 99 } 100 ``` 101 102 **文件说明:** 103 104 subsystem定义了子系统的名称;parts定义了子系统包含的部件。 105 106 一个部件包含部件名,部件包含的模块module_list,部件提供给其它部件的接口inner_kits,部件的测试用例test_list。 107 108 **修改内容:** 109 110 要添加一个模块到已有部件中去,只需要在该部件的module_list中添加新加模块的gn编译目标;假如该模块提供给其它模块接口,需要在inner_kits中添加对应的配置;如果有该模块的测试用例,需要添加到test_list中去。 111 112## 新建部件并在其中添加模块 113 1141. 在模块目录下配置BUILD.gn,根据类型选择对应的模板。 115 116 这一步与在原有部件中添加一个模块的方法基本一致,只需注意该模块对应BUILD.gn文件中的part_name为新建部件的名称即可。 117 1182. 修改或者新建ohos.build配置文件 119 120 ```build 121 { 122 "subsystem": "子系统名", 123 "parts": { 124 "新建部件名": { 125 "module_list": [ 126 "部件包含模块的gn目标" 127 ], 128 "inner_kits": [ 129 ], 130 "test_list": [ 131 "测试用例", 132 ] 133 } 134 } 135 } 136 ``` 137 138 在原有子系统中添加一个新的部件,有两种方法,一种是在该子系统原有的ohos.build文件中添加该部件,另一种是新建一个ohos.build文件,注意无论哪种方式该ohos.build文件均在对应子系统所在文件夹下。 139 140 ohos.build文件包含两个部分,第一部分subsystem说明了子系统的名称,parts定义了该子系统包含的部件,要添加一个部件,需要把该部件对应的内容添加进parts中去。添加的时候需要指明该部件包含的模块module_list,假如有提供给其它部件的接口,需要在inner_kits中说明,假如有测试用例,需要在test_list中说明,inner_kits与test_list没有也可以不添加。 141 1423. 在productdefine/common/products目录下的产品配置文件(json格式)中添加对应的部件,直接添加到原有部件后即可。 143 144 ```json 145 { 146 "parts":{ 147 "部件所属子系统名:部件名":{} 148 } 149 } 150 ``` 151 152## 新建子系统并在该子系统的部件下添加模块 153 1541. 在模块目录下配置BUILD.gn,根据类型选择对应的模板。这一步与新建部件并在其中添加模块中对应的步骤并无区别。 155 1562. 在新建的子系统目录下每个部件对应的文件夹下创建ohos.build文件,定义部件信息。这一步与新建部件并在其中添加模块中对应的步骤并无区别。 157 1583. 修改build目录下的subsystem_config.json文件 159 160 ```json 161 { 162 "子系统名": { 163 "path": "子系统目录", 164 "name": "子系统名", 165 ... 166 } 167 } 168 ``` 169 170 该文件定义了有哪些子系统以及这些子系统所在文件夹路径,添加子系统时需要说明子系统path与name,分别表示子系统路径和子系统名。 171 1724. 在productdefine/common/products目录下的产品配置如Hi3516DV300.json中添加对应的部件,直接添加到原有部件后即可。 173 174 ```json 175 { 176 ... 177 "parts":{ 178 "部件所属子系统名:部件名":{} 179 } 180 } 181 ``` 182 183 **成功添加验证:** 184 185 + 在输出文件夹的对应子系统文件夹下的部件文件夹下的BUILD.gn文件中module_list包含了新建模块的BUILD.gn中定义的目标。 186 + 编译完成后打包到image中去,生成对应的so文件或者二进制文件 187 188## 配置文件说明 189 190鸿蒙操作系统的配置文件主要有四个 191 1921. productdefine/common/products目录下的产品名.json文件 193 194 ```json 195 { 196 "product_name": "Hi3516DV300", 197 "product_company": "hisilicon", 198 "product_device": "hi3516dv300", 199 "version": "2.0", 200 "type": "standard", 201 "parts":{ 202 "arkui:ace_engine_standard":{}, 203 "arkui:napi":{}, 204 "account:os_account":{}, 205 "distributeddatamgr:native_appdatamgr":{}, 206 "distributeddatamgr:distributeddatamgr":{}, 207 "distributeddatamgr:appdatamgr_jskits":{} 208 } 209 } 210 ``` 211 212 指明了产品名,产品厂商,产品设备,版本,要编译的系统类型,以及产品包含的部件。 213 2142. build目录下的subsystem_config.json文件 215 216 ```json 217 { 218 "arkui": { 219 "project": "hmf/ace", 220 "path": "foundation/arkui", 221 "name": "arkui", 222 "dir": "foundation" 223 } 224 } 225 ``` 226 227 该文件对子系统进行了说明,我们需要该子系统定义中的name与path,分别表示子系统的名称和所在文件夹路径。 228 2293. 子系统中ohos.build文件 230 231 ```build 232 { 233 "subsystem": "arkui", 234 "parts": { 235 "napi": { 236 "module_list": [ 237 "//foundation/arkui/napi:napi_packages" 238 ], 239 "inner_kits": [ 240 ], 241 "test_list": [ 242 "//foundation/arkui/napi:napi_packages_test", 243 "//foundation/arkui/napi/test/unittest:unittest" 244 ] 245 } 246 } 247 } 248 ``` 249 250 ohos.build文件定义了子系统包含的部件。 251 252 每个部件定义它所包含的模块目标module_list,以及部件间交互的接口inner_kits,测试用例test_list。部件包含的模块目标module_list是必须要说明的。 253 2544. 每个模块对应的BUILD.gn文件 255 256 可以使用提供的模板,也可以使用gn语法规则自定义编写。 257 258