1e41f4b71Sopenharmony_ci# HAP Build Guide
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci## Overview
4e41f4b71Sopenharmony_ci
5e41f4b71Sopenharmony_ci### Basic Concepts
6e41f4b71Sopenharmony_ci| Term| Description|
7e41f4b71Sopenharmony_ci| -------------- | ---------------------- |
8e41f4b71Sopenharmony_ci| HAP            | Harmony Ability Package, released as a HAP file, with the file name extension .hap. One HAP file describes all content of an application, including code, resources, third-party libraries, and an application configuration file.|
9e41f4b71Sopenharmony_ci| Ability        | An abstraction of a functionality that an application can provide. It is the minimum unit for the system to schedule the application. An application can contain one or more **Ability** instances.|
10e41f4b71Sopenharmony_ci| FA             | Feature Ability, an ability that provides a UI for user interaction in the ability framework of the FA model. The FA supports only the Page ability template.|
11e41f4b71Sopenharmony_ci| PA             | Particle Ability, an ability that does not have a UI in the ability framework of the FA model. It provides services and support for FAs. For example, a PA can function as a background service to provide computing power or as a data store to provide data access capabilities. The PA supports three types of templates: Service, Data, and Form ability templates.|
12e41f4b71Sopenharmony_ci| FA model        | One of the two ability framework models. The FA model applies to application development using API version 8 and earlier versions. The FA model provides FAs and PAs. The FA supports the Page ability template, and the PA supports the Service, Data, and Form ability templates. For details, see [FA Model Overview](../../application-dev/quick-start/application-package-structure-fa.md).|
13e41f4b71Sopenharmony_ci| Stage model| One of the two ability framework models. The stage model applies to application development using API version 9 and later versions. The stage model provides abilities and Extension abilities. The latter ones are extended to Service Extension abilities, Form Extension abilities, Data Share Extension abilities, and more.|
14e41f4b71Sopenharmony_ci
15e41f4b71Sopenharmony_ci### Function
16e41f4b71Sopenharmony_ciThe HAP provides HAP build functions and supports FA and stage models.
17e41f4b71Sopenharmony_ci
18e41f4b71Sopenharmony_ci## How to Develop
19e41f4b71Sopenharmony_ci
20e41f4b71Sopenharmony_ci### OpenHarmony Templates
21e41f4b71Sopenharmony_ci#### ohos_hap
22e41f4b71Sopenharmony_ci
23e41f4b71Sopenharmony_ciThis template declares a HAP target, which generates a HAP that will be packaged into the system image.
24e41f4b71Sopenharmony_ci
25e41f4b71Sopenharmony_ci| Variable| Description|
26e41f4b71Sopenharmony_ci| --------- | ---- |
27e41f4b71Sopenharmony_ci| hap_profile | Configuration file of the HAP. It is **config.json** for the FA model and **module.json** for the stage model.|
28e41f4b71Sopenharmony_ci| raw_assets | Raw assets, which are directly copied to the **assets** directory of the HAP.|
29e41f4b71Sopenharmony_ci| resources | Resource files, which are stored in the **assets/entry/resources** directory after build.|
30e41f4b71Sopenharmony_ci| js_assets | JS resources, which are stored in the **assets/js/default** directory after built.|
31e41f4b71Sopenharmony_ci| ets_assets | eTS resources, which are stored in the **assets/js/default** directory after built.|
32e41f4b71Sopenharmony_ci| deps | Dependencies of the target.|
33e41f4b71Sopenharmony_ci| shared_libraries | Native libraries on which the target depends.|
34e41f4b71Sopenharmony_ci| hap_name | HAP name, which is optional. By default, it is the target name.|
35e41f4b71Sopenharmony_ci| final_hap_path | Path of the generated HAP. This variable is optional. It takes precedence over **hap_name**.|
36e41f4b71Sopenharmony_ci| subsystem_name | Name of the subsystem that the HAP belongs to. The name must be consistent with that defined in **ohos.build**. Otherwise, the HAP will fail to be installed in the system image.|
37e41f4b71Sopenharmony_ci| part_name | Name of the part that the HAP belongs to. The name must be the same as that of **subsystem_name**.|
38e41f4b71Sopenharmony_ci| js2abc | Whether to convert JS code of the HAP into ARK bytecode.|
39e41f4b71Sopenharmony_ci| ets2abc | Whether to convert eTS code of the HAP into ARK bytecode.|
40e41f4b71Sopenharmony_ci| certificate_profile | Certificate profile used to sign the HAP.|
41e41f4b71Sopenharmony_ci| certificate_file | Certificate file. The certificate and profile must be applies from the official OpenHarmony website.|
42e41f4b71Sopenharmony_ci| keystore_path | Keystore file, which is used for signature.|
43e41f4b71Sopenharmony_ci| keystore_password | Keystore password, which is used for signature.|
44e41f4b71Sopenharmony_ci| key_alias | Alias of a key.|
45e41f4b71Sopenharmony_ci| module_install_name | Name of the HAP during installation.|
46e41f4b71Sopenharmony_ci| module_install_dir | Installation path of the HAP in the system. The default path is **system/app**.|
47e41f4b71Sopenharmony_ci| js_build_mode | Build mode of the HAP, which can be **release** or **debug**. This variable is optional. The default value is **release**.|
48e41f4b71Sopenharmony_ci
49e41f4b71Sopenharmony_ci#### ohos_app_scope
50e41f4b71Sopenharmony_ciDeclares the AppScope module of the HAP. The **app_profile** and **sources** variables of the target will be concatenated to a specific **entry** for build. This template is used only in the stage model.
51e41f4b71Sopenharmony_ci
52e41f4b71Sopenharmony_ci| Variable| Description|
53e41f4b71Sopenharmony_ci| --------- | ---- |
54e41f4b71Sopenharmony_ci| app_profile | **app.json** file in the AppScope module of the HAP. This variable is used only in the stage model.|
55e41f4b71Sopenharmony_ci| sources | Resources in the AppScope module of the HAP. This variable is used only in the stage model.|
56e41f4b71Sopenharmony_ci
57e41f4b71Sopenharmony_ci#### ohos_js_assets
58e41f4b71Sopenharmony_ciProvides JS or eTS code, which is stored in the **assets/js/default** directory after built. In the stage model, this template is stored in the **assets/js** or **assets/ets** directory, depending on the programming language.
59e41f4b71Sopenharmony_ci
60e41f4b71Sopenharmony_ci| Variable| Description|
61e41f4b71Sopenharmony_ci| --------- | ---- |
62e41f4b71Sopenharmony_ci| hap_profile | Configuration file of the HAP. It is **config.json** for the FA model and **module.json** for the stage model.|
63e41f4b71Sopenharmony_ci| source_dir | JS or eTS code path, which is compatible with the **ability** directory of the FA model.|
64e41f4b71Sopenharmony_ci| ets2abc | eTS code path. This variable is used only for widget configuration. In other development scenarios, use the configuration in the **ohos_hap** template.|
65e41f4b71Sopenharmony_ci| js2abc | JS code path. This variable is used only for widget configuration. In other development scenarios, use the configuration in the **ohos_hap** template.|
66e41f4b71Sopenharmony_ci
67e41f4b71Sopenharmony_ci#### ohos_assets
68e41f4b71Sopenharmony_ciProvides raw assets, which are directly copied to the **assets** directory of the HAP.
69e41f4b71Sopenharmony_ci
70e41f4b71Sopenharmony_ci| Variable| Description|
71e41f4b71Sopenharmony_ci|---------- | ---- |
72e41f4b71Sopenharmony_ci| sources | Path of the raw assets.|
73e41f4b71Sopenharmony_ci
74e41f4b71Sopenharmony_ci#### ohos_resources
75e41f4b71Sopenharmony_ciResource files, which are stored in the **assets/entry/resources** directory for the FA model and in the **resources** directory for the stage model.
76e41f4b71Sopenharmony_ci
77e41f4b71Sopenharmony_ci| Variable| Description|
78e41f4b71Sopenharmony_ci| --------- | ---- |
79e41f4b71Sopenharmony_ci| hap_profile | Configuration file of the HAP. It is **config.json** for the FA model and **module.json** for the stage model.|
80e41f4b71Sopenharmony_ci| sources | Resource file path.|
81e41f4b71Sopenharmony_ci| deps | Dependencies of the target. You must configure dependencies on the **ohos_app_scope** target for the stage model.|
82e41f4b71Sopenharmony_ci
83e41f4b71Sopenharmony_ci### Procedure
84e41f4b71Sopenharmony_ci
85e41f4b71Sopenharmony_ci1. Save the developed application example to the **applications/standard/** directory.
86e41f4b71Sopenharmony_ci
87e41f4b71Sopenharmony_ci2. Configure the GN script **applications/standard/example/BUILD.gn**.<br>The following is an example of the FA model. For details about more **BUILD.gn** configurations, see [GN Script Configuration Example](#gn-script-configuration-example).
88e41f4b71Sopenharmony_ci   ```
89e41f4b71Sopenharmony_ci   import("//build/ohos.gni") # Import ohos.gni.
90e41f4b71Sopenharmony_ci
91e41f4b71Sopenharmony_ci   ohos_hap("example") {
92e41f4b71Sopenharmony_ci     hap_profile = "./src/main/config.json" # config.json
93e41f4b71Sopenharmony_ci     js_assets = ["./src/main/js/default"]
94e41f4b71Sopenharmony_ci     raw_assets = ["./raw_assets"]
95e41f4b71Sopenharmony_ci     resources = ["./src/main/resources"]
96e41f4b71Sopenharmony_ci     shared_libraries = [
97e41f4b71Sopenharmony_ci       "//third_party/libpng:libpng", # Native library
98e41f4b71Sopenharmony_ci     ]
99e41f4b71Sopenharmony_ci     certificate_profile = "../signature/systemui.p7b" # Certificate profile
100e41f4b71Sopenharmony_ci     hap_name = "SystemUI-NavigationBar" # HAP name
101e41f4b71Sopenharmony_ci     part_name = "prebuilt_hap"
102e41f4b71Sopenharmony_ci     subsystem_name = "applications"
103e41f4b71Sopenharmony_ci   }
104e41f4b71Sopenharmony_ci   ```
105e41f4b71Sopenharmony_ci
106e41f4b71Sopenharmony_ci3. Modify the **applications/standard/hap/ohos.build** file.<br>The following is an example:
107e41f4b71Sopenharmony_ci   ```
108e41f4b71Sopenharmony_ci   {
109e41f4b71Sopenharmony_ci     "subsystem": "applications",
110e41f4b71Sopenharmony_ci     "parts": {
111e41f4b71Sopenharmony_ci       "prebuilt_hap": {
112e41f4b71Sopenharmony_ci         "module_list": [
113e41f4b71Sopenharmony_ci           ...
114e41f4b71Sopenharmony_ci           "//applications/standard/example:example" # Add a build target.
115e41f4b71Sopenharmony_ci         ]
116e41f4b71Sopenharmony_ci       }
117e41f4b71Sopenharmony_ci     }
118e41f4b71Sopenharmony_ci   }
119e41f4b71Sopenharmony_ci   ```
120e41f4b71Sopenharmony_ci
121e41f4b71Sopenharmony_ci4. Start build.
122e41f4b71Sopenharmony_ci   ```
123e41f4b71Sopenharmony_ci   # Perform full building.
124e41f4b71Sopenharmony_ci   ./build.sh --product-name {product_name}
125e41f4b71Sopenharmony_ci
126e41f4b71Sopenharmony_ci   # Build the HAP only.
127e41f4b71Sopenharmony_ci   ./build.sh --product-name {product_name} --build-target applications/standard/example:example
128e41f4b71Sopenharmony_ci   ```
129e41f4b71Sopenharmony_ci
130e41f4b71Sopenharmony_ci
131e41f4b71Sopenharmony_ciThe build target is generated. The following shows the decompressed HAP in the FA model.
132e41f4b71Sopenharmony_ci```
133e41f4b71Sopenharmony_ci  Length      Date    Time    Name
134e41f4b71Sopenharmony_ci---------  ---------- -----   ----
135e41f4b71Sopenharmony_ci     1439  2009-01-01 00:00   assets/raw_assets                                 -----> raw_assets
136e41f4b71Sopenharmony_ci      354  2009-01-01 00:00   assets/entry/resources.index                      ------> resources
137e41f4b71Sopenharmony_ci        1  2009-01-01 00:00   assets/entry/resources/base/media/attributes.key  ------> resources
138e41f4b71Sopenharmony_ci        1  2009-01-01 00:00   assets/entry/resources/base/media/constants.key   ------> resources
139e41f4b71Sopenharmony_ci        1  2009-01-01 00:00   assets/entry/resources/base/media/contents.key    ------> resources
140e41f4b71Sopenharmony_ci     6790  2009-01-01 00:00   assets/entry/resources/base/media/icon.png        ------> resources
141e41f4b71Sopenharmony_ci        1  2009-01-01 00:00   assets/entry/resources/base/media/nodes.key       ------> resources
142e41f4b71Sopenharmony_ci    11170  2009-01-01 00:00   assets/js/default/app.js                          ------> js_assets
143e41f4b71Sopenharmony_ci       48  2009-01-01 00:00   assets/js/default/i18n/en-US.json                 ------> js_assets
144e41f4b71Sopenharmony_ci       50  2009-01-01 00:00   assets/js/default/i18n/zh-CN.json                 ------> js_assets
145e41f4b71Sopenharmony_ci      224  2009-01-01 00:00   assets/js/default/manifest.json                   ------> js_assets
146e41f4b71Sopenharmony_ci    41481  2009-01-01 00:00   assets/js/default/pages/index/index.js            ------> js_assets
147e41f4b71Sopenharmony_ci      909  2009-01-01 00:00   config.json                                       ------> hap_profile
148e41f4b71Sopenharmony_ci   266248  2009-01-01 00:00   libs/libpng.z.so                                  ------> shared_libraries
149e41f4b71Sopenharmony_ci```
150e41f4b71Sopenharmony_ci
151e41f4b71Sopenharmony_ci### GN Script Configuration Example
152e41f4b71Sopenharmony_ci- Example of multiple abilities in the FA model
153e41f4b71Sopenharmony_ci
154e41f4b71Sopenharmony_ci   ```
155e41f4b71Sopenharmony_ci   import("//build/ohos.gni")
156e41f4b71Sopenharmony_ci
157e41f4b71Sopenharmony_ci   ohos_hap("dataability") {
158e41f4b71Sopenharmony_ci     hap_profile = "entry/src/main/config.json"
159e41f4b71Sopenharmony_ci     deps = [
160e41f4b71Sopenharmony_ci       ":dataability_js_assets",
161e41f4b71Sopenharmony_ci       ":dataability_resources",
162e41f4b71Sopenharmony_ci     ]
163e41f4b71Sopenharmony_ci     certificate_profile = "signature/openharmony_sx.p7b"
164e41f4b71Sopenharmony_ci     hap_name = "dataability"
165e41f4b71Sopenharmony_ci     part_name = "prebuilt_hap"
166e41f4b71Sopenharmony_ci     subsystem_name = "applications"
167e41f4b71Sopenharmony_ci   }
168e41f4b71Sopenharmony_ci
169e41f4b71Sopenharmony_ci   ohos_js_assets("dataability_js_assets") {
170e41f4b71Sopenharmony_ci     ets2abc = true
171e41f4b71Sopenharmony_ci     source_dir = "entry/src/main/ets"
172e41f4b71Sopenharmony_ci     hap_profile = "entry/src/main/config.json"
173e41f4b71Sopenharmony_ci   }
174e41f4b71Sopenharmony_ci
175e41f4b71Sopenharmony_ci   ohos_resources("dataability_resources") {
176e41f4b71Sopenharmony_ci     sources = [
177e41f4b71Sopenharmony_ci       "entry/src/main/resources",
178e41f4b71Sopenharmony_ci     ]
179e41f4b71Sopenharmony_ci     hap_profile = "entry/src/main/config.json"
180e41f4b71Sopenharmony_ci   }
181e41f4b71Sopenharmony_ci
182e41f4b71Sopenharmony_ci   ```
183e41f4b71Sopenharmony_ci
184e41f4b71Sopenharmony_ci- Example of a JS widget in the FA model
185e41f4b71Sopenharmony_ci
186e41f4b71Sopenharmony_ci   ```
187e41f4b71Sopenharmony_ci   import("//build/ohos.gni")
188e41f4b71Sopenharmony_ci   
189e41f4b71Sopenharmony_ci   ohos_hap("FormOfFaJs") {
190e41f4b71Sopenharmony_ci     hap_profile = "entry/src/main/config.json"
191e41f4b71Sopenharmony_ci     deps = [
192e41f4b71Sopenharmony_ci       ":FormOfFaJs_js_assets",
193e41f4b71Sopenharmony_ci       ":FormOfFaJs_resources",
194e41f4b71Sopenharmony_ci     ]
195e41f4b71Sopenharmony_ci     certificate_profile = "signature/openharmony_sx.p7b"
196e41f4b71Sopenharmony_ci     hap_name = "FormOfFaJs"
197e41f4b71Sopenharmony_ci     part_name = "prebuilt_hap"
198e41f4b71Sopenharmony_ci     subsystem_name = "applications"
199e41f4b71Sopenharmony_ci   }
200e41f4b71Sopenharmony_ci   
201e41f4b71Sopenharmony_ci   ohos_js_assets("FormOfFaJs_js_assets") {
202e41f4b71Sopenharmony_ci     hap_profile = "entry/src/main/config.json"
203e41f4b71Sopenharmony_ci     js2abc = true
204e41f4b71Sopenharmony_ci     source_dir = "entry/src/main/js"
205e41f4b71Sopenharmony_ci   }
206e41f4b71Sopenharmony_ci   
207e41f4b71Sopenharmony_ci   ohos_resources("FormOfFaJs_resources") {
208e41f4b71Sopenharmony_ci     sources = [
209e41f4b71Sopenharmony_ci       "entry/src/main/resources",
210e41f4b71Sopenharmony_ci     ]
211e41f4b71Sopenharmony_ci     hap_profile = "entry/src/main/config.json"
212e41f4b71Sopenharmony_ci   }
213e41f4b71Sopenharmony_ci   ```
214e41f4b71Sopenharmony_ci
215e41f4b71Sopenharmony_ci- Example of an eTS widget in the FA model
216e41f4b71Sopenharmony_ci
217e41f4b71Sopenharmony_ci   ```
218e41f4b71Sopenharmony_ci   import("//build/ohos.gni")
219e41f4b71Sopenharmony_ci   
220e41f4b71Sopenharmony_ci   ohos_hap("FormOfFaEts") {
221e41f4b71Sopenharmony_ci     hap_profile = "entry/src/main/config.json"
222e41f4b71Sopenharmony_ci     deps = [
223e41f4b71Sopenharmony_ci       ":FormOfFaEts_js_assets",
224e41f4b71Sopenharmony_ci       ":FormOfFaEts_form_js_assets",
225e41f4b71Sopenharmony_ci       ":FormOfFaEts_resources",
226e41f4b71Sopenharmony_ci     ]
227e41f4b71Sopenharmony_ci     certificate_profile = "signature/openharmony_sx.p7b"
228e41f4b71Sopenharmony_ci     hap_name = "FormOfFaEts"
229e41f4b71Sopenharmony_ci     part_name = "prebuilt_hap"
230e41f4b71Sopenharmony_ci     subsystem_name = "applications"
231e41f4b71Sopenharmony_ci   }
232e41f4b71Sopenharmony_ci   
233e41f4b71Sopenharmony_ci   ohos_js_assets("FormOfFaEts_js_assets") {
234e41f4b71Sopenharmony_ci     hap_profile = "entry/src/main/config.json"
235e41f4b71Sopenharmony_ci     ets2abc = true
236e41f4b71Sopenharmony_ci     source_dir = "entry/src/main/ets"
237e41f4b71Sopenharmony_ci   }
238e41f4b71Sopenharmony_ci   
239e41f4b71Sopenharmony_ci   ohos_js_assets("FormOfFaEts_form_js_assets") {
240e41f4b71Sopenharmony_ci     hap_profile = "entry/src/main/config.json"
241e41f4b71Sopenharmony_ci     js2abc = true
242e41f4b71Sopenharmony_ci     source_dir = "entry/src/main/js"
243e41f4b71Sopenharmony_ci   }
244e41f4b71Sopenharmony_ci   
245e41f4b71Sopenharmony_ci   ohos_resources("FormOfFaEts_resources") {
246e41f4b71Sopenharmony_ci     sources = [
247e41f4b71Sopenharmony_ci       "entry/src/main/resources",
248e41f4b71Sopenharmony_ci     ]
249e41f4b71Sopenharmony_ci     hap_profile = "entry/src/main/config.json"
250e41f4b71Sopenharmony_ci   }
251e41f4b71Sopenharmony_ci   ```
252e41f4b71Sopenharmony_ci
253e41f4b71Sopenharmony_ci- Example of the stage model
254e41f4b71Sopenharmony_ci
255e41f4b71Sopenharmony_ci   ```
256e41f4b71Sopenharmony_ci   import("//build/ohos.gni")
257e41f4b71Sopenharmony_ci   
258e41f4b71Sopenharmony_ci   ohos_hap("actmoduletest") {
259e41f4b71Sopenharmony_ci     hap_profile = "entry/src/main/module.json"
260e41f4b71Sopenharmony_ci     deps = [
261e41f4b71Sopenharmony_ci       ":actmoduletest_js_assets",
262e41f4b71Sopenharmony_ci       ":actmoduletest_resources",
263e41f4b71Sopenharmony_ci     ]
264e41f4b71Sopenharmony_ci     certificate_profile = "signature/openharmony_sx.p7b"
265e41f4b71Sopenharmony_ci     hap_name = "actmoduletest"
266e41f4b71Sopenharmony_ci     part_name = "prebuilt_hap"
267e41f4b71Sopenharmony_ci     subsystem_name = "applications"
268e41f4b71Sopenharmony_ci   }
269e41f4b71Sopenharmony_ci   
270e41f4b71Sopenharmony_ci   ohos_app_scope("actmoduletest_app_profile") {
271e41f4b71Sopenharmony_ci     app_profile = "AppScope/app.json"
272e41f4b71Sopenharmony_ci     sources = [ "AppScope/resources" ]
273e41f4b71Sopenharmony_ci   }
274e41f4b71Sopenharmony_ci   
275e41f4b71Sopenharmony_ci   ohos_js_assets("actmoduletest_js_assets") {
276e41f4b71Sopenharmony_ci     ets2abc = true
277e41f4b71Sopenharmony_ci     source_dir = "entry/src/main/ets"
278e41f4b71Sopenharmony_ci   }
279e41f4b71Sopenharmony_ci   
280e41f4b71Sopenharmony_ci   ohos_resources("actmoduletest_resources") {
281e41f4b71Sopenharmony_ci     sources = [
282e41f4b71Sopenharmony_ci       "entry/src/main/resources",
283e41f4b71Sopenharmony_ci     ]
284e41f4b71Sopenharmony_ci     deps = [
285e41f4b71Sopenharmony_ci       ":actmoduletest_app_profile",
286e41f4b71Sopenharmony_ci     ]
287e41f4b71Sopenharmony_ci     hap_profile = "entry/src/main/module.json"
288e41f4b71Sopenharmony_ci   }
289e41f4b71Sopenharmony_ci   ```
290e41f4b71Sopenharmony_ci
291e41f4b71Sopenharmony_ci- Example of a widget in the stage model
292e41f4b71Sopenharmony_ci
293e41f4b71Sopenharmony_ci   ```
294e41f4b71Sopenharmony_ci   import("//build/ohos.gni")
295e41f4b71Sopenharmony_ci   
296e41f4b71Sopenharmony_ci   ohos_hap("FormOfStageEts") {
297e41f4b71Sopenharmony_ci     hap_profile = "entry/src/main/module.json"
298e41f4b71Sopenharmony_ci     deps = [
299e41f4b71Sopenharmony_ci       ":FormOfStageEts_js_assets",
300e41f4b71Sopenharmony_ci       ":FormOfStageEts_form_js_assets",
301e41f4b71Sopenharmony_ci       ":FormOfStageEts_resources",
302e41f4b71Sopenharmony_ci     ]
303e41f4b71Sopenharmony_ci     js_build_mode = "debug" # The default value is release.
304e41f4b71Sopenharmony_ci     certificate_profile = "signature/openharmony_sx.p7b"
305e41f4b71Sopenharmony_ci     hap_name = "FormOfStageEts"
306e41f4b71Sopenharmony_ci     part_name = "prebuilt_hap"
307e41f4b71Sopenharmony_ci     subsystem_name = "applications"
308e41f4b71Sopenharmony_ci   }
309e41f4b71Sopenharmony_ci   
310e41f4b71Sopenharmony_ci   ohos_js_assets("FormOfStageEts_js_assets") {
311e41f4b71Sopenharmony_ci     hap_profile = "entry/src/main/module.json"
312e41f4b71Sopenharmony_ci     ets2abc = true
313e41f4b71Sopenharmony_ci     source_dir = "entry/src/main/ets"
314e41f4b71Sopenharmony_ci   }
315e41f4b71Sopenharmony_ci   
316e41f4b71Sopenharmony_ci   ohos_js_assets("FormOfStageEts_form_js_assets") {
317e41f4b71Sopenharmony_ci     hap_profile = "entry/src/main/module.json"
318e41f4b71Sopenharmony_ci     js2abc = true
319e41f4b71Sopenharmony_ci     source_dir = "entry/src/main/js"
320e41f4b71Sopenharmony_ci   }
321e41f4b71Sopenharmony_ci   
322e41f4b71Sopenharmony_ci   ohos_app_scope("FormOfStageEts_app_profile") {
323e41f4b71Sopenharmony_ci     app_profile = "AppScope/app.json"
324e41f4b71Sopenharmony_ci     sources = [ "AppScope/resources" ]
325e41f4b71Sopenharmony_ci   }
326e41f4b71Sopenharmony_ci   
327e41f4b71Sopenharmony_ci   ohos_resources("FormOfStageEts_resources") {
328e41f4b71Sopenharmony_ci     sources = [
329e41f4b71Sopenharmony_ci       "entry/src/main/resources",
330e41f4b71Sopenharmony_ci     ]
331e41f4b71Sopenharmony_ci     deps = [
332e41f4b71Sopenharmony_ci       ":FormOfStageEts_app_profile",
333e41f4b71Sopenharmony_ci     ]
334e41f4b71Sopenharmony_ci     hap_profile = "entry/src/main/module.json"
335e41f4b71Sopenharmony_ci   }
336e41f4b71Sopenharmony_ci   ```
337