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