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