• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# hap的编译
2
3## 术语
4
5gn 目标:
6
7## hap包的构成
8
9L2上的hap包由资源,raw assets,js assets,native库,config.json等部分构成。
10
11
12## 编译系统提供的模板
13
14编译系统提供了4个模板,用来编译hap包。
15
16模板集成在ohos.gni中,使用之前需要引用build/ohos.gni
17
18### ohos_resources
19
20- 声明一个资源目标。资源目标被restool编译之后会生成index文件,hap中会打包资源源文件和index文件。
21- 该目标会同时生成资源编译后的ResourceTable.h,直接依赖该目标就可以引用该头文件
22
23- 资源目标的目标名必须以"resources"或"resource"或"res"结尾,否则编译检查时会报错
24- 支持的变量:
25  1. sources: 资源的路径,变量类型是list,可以写多个路径
26  2. hap_profile: 编译资源时需要提供对应hap包的config.json
27  3. deps: 当前目标的依赖,可选
28
29### ohos_assets
30
31- 声明一个资产目标
32- 注意拼写:assets不是assert
33- assets目标的目标名必须以"assets"或"asset"结尾
34- 支持的变量:
35  1. sources:raw assets所在路径,变量类型是list,可以写多个路径
36  2. deps: 当前目标的依赖,可选
37
38## ohos_js_assets
39
40- 声明一个JS 资源目标,JS资源是L2 hap包的可执行部分
41- JS assets目标的目标名必须以"assets"或"asset"结尾
42- 支持的变量:
43  1. source_dir: JS 资源的路径,变量类型是string,只能写一个
44  2. deps: 当前目标的依赖,可选
45
46### ohos_hap
47
48- 声明一个hap目标,该目标会生成一个hap包,最终将会打包到system镜像中
49
50- 支持的变量:
51
52  1.  hap_profile: hap包的config.json
53
54  2. deps: 当前目标的依赖
55
56  3. shared_libraries: 当前目标依赖的native库
57
58  4. hap_name: hap包的名字,可选,默认为目标名
59
60  5. final_hap_path: 用户可以制定生成的hap的位置,可选,final_hap_path中会覆盖hap_name
61
62  6. subsystem_name: hap包从属的子系统名,需要和ohos.build中的名字对应,否则将导致无法安装到system镜像中
63
64  7. part_name: hap包从属的部件名,同subsystem_name
65
66  8. js2abc: 是否需要将该hap包转换为ARK的字节码
67
68     签名篇见:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/%E9%85%8D%E7%BD%AEOpenHarmony%E5%BA%94%E7%94%A8%E7%AD%BE%E5%90%8D%E4%BF%A1%E6%81%AF.md
69
70  9. certificate_profile: hap对应的授权文件,用于签名
71
72  10. certificate_file: 证书文件,证书文件和授权文件,应用开发者需要去openharmony官网申请
73
74  11. keystore_path: keystore文件,用于签名
75
76  12. keystore_password: keystore的密码,用于签名
77
78  13. key_alias: key的别名
79
80  14. module_install_name:安装时的hap包名称
81
82  15. module_install_dir: 安装到system中的位置,默认安装在system/app目录下
83
84## 一个例子
85
86```json
87import("//build/ohos.gni") # 引用ohos.gni
88
89ohos_hap("clock") {
90  hap_profile = "./src/main/config.json" # config.json
91  deps = [
92    ":clock_js_assets", # JS assets
93    ":clock_resources", # 资源
94  ]
95  shared_libraries = [
96    "//third_party/libpng:libpng", # native库
97  ]
98  certificate_profile = "../signature/systemui.p7b" # Cer文件
99  hap_name = "SystemUI-NavigationBar" # 名字
100  part_name = "prebuilt_hap"
101  subsystem_name = "applications"
102}
103ohos_js_assets("clock_js_assets") {
104  source_dir = "./src/main/js/default"
105}
106ohos_resources("clock_resources") {
107  sources = [ "./src/main/resources" ]
108  hap_profile = "./src/main/config.json"
109}
110```
111
112