• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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