1# hap的编译 2 3## 术语 4 5gn 目标: 6 7## hap包的构成 8 9OpenHamony上的hap包由资源,raw assets,js assets,native库,config.json等部分构成。 10 11 12## 编译系统提供的模板 13 14编译系统提供了ohos_hap模板,用来编译hap包。 15 16模板集成在ohos.gni中,使用之前需要引用build/ohos.gni 17 18### ohos_hap 19 20- 声明一个hap目标,该目标会生成一个hap包,最终将会打包到system镜像中 21 22- 支持的变量: 23 24 1. hap_profile: hap包的config.json 25 26 2. raw_assets: 原始assets,这些assets会直接拷贝到hap包的assets目录下 27 28 3. resources: 资源文件,编译后放置在assets/entry/resources目录下 29 30 4. js_assets: js资源,ace编译后放置在assets/js/default目录下 31 32 5. deps: 当前目标的依赖 33 34 6. shared_libraries: 当前目标依赖的native库 35 36 7. hap_name: hap包的名字,可选,默认为目标名 37 38 8. final_hap_path: 用户可以制定生成的hap的位置,可选,final_hap_path中会覆盖hap_name 39 40 9. subsystem_name: hap包从属的子系统名,需要和ohos.build中的名字对应,否则将导致无法安装到system镜像中 41 42 10. part_name: hap包从属的部件名,同subsystem_name 43 44 11. js2abc: 是否需要将该hap包转换为ARK的字节码 45 46 签名篇见:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/configuring-openharmony-app-signature.md 47 48 12. certificate_profile: hap对应的授权文件,用于签名 49 50 13. certificate_file: 证书文件,证书文件和授权文件,应用开发者需要去openharmony官网申请 51 52 14. keystore_path: keystore文件,用于签名 53 54 15. keystore_password: keystore的密码,用于签名 55 56 16. key_alias: key的别名 57 58 17. module_install_name:安装时的hap包名称 59 60 18. module_install_dir: 安装到system中的位置,默认安装在system/app目录下 61 62## 一个例子 63 64```json 65import("//build/ohos.gni") # 引用ohos.gni 66 67ohos_hap("clock") { 68 hap_profile = "./src/main/config.json" # config.json 69 js_assets = ["./src/main/js/default"] 70 raw_assets = ["./raw_assets"] 71 resources = ["./src/main/resources"] 72 shared_libraries = [ 73 "//third_party/libpng:libpng", # native库 74 ] 75 certificate_profile = "../signature/systemui.p7b" # Cer文件 76 hap_name = "SystemUI-NavigationBar" # 名字 77 part_name = "prebuilt_hap" 78 subsystem_name = "applications" 79} 80``` 81 82### hap解压视图 83 84``` 85 Length Date Time Name 86--------- ---------- ----- ---- 87 1439 2009-01-01 00:00 assets/raw_assets -----> raw_assets 88 354 2009-01-01 00:00 assets/entry/resources.index ------> resources 89 1 2009-01-01 00:00 assets/entry/resources/base/media/attributes.key ------> resources 90 1 2009-01-01 00:00 assets/entry/resources/base/media/constants.key ------> resources 91 1 2009-01-01 00:00 assets/entry/resources/base/media/contents.key ------> resources 92 6790 2009-01-01 00:00 assets/entry/resources/base/media/icon.png ------> resources 93 1 2009-01-01 00:00 assets/entry/resources/base/media/nodes.key ------> resources 94 11170 2009-01-01 00:00 assets/js/default/app.js ------> js_assets 95 48 2009-01-01 00:00 assets/js/default/i18n/en-US.json ------> js_assets 96 50 2009-01-01 00:00 assets/js/default/i18n/zh-CN.json ------> js_assets 97 224 2009-01-01 00:00 assets/js/default/manifest.json ------> js_assets 98 41481 2009-01-01 00:00 assets/js/default/pages/index/index.js ------> js_assets 99 909 2009-01-01 00:00 config.json ------> hap_profile 100 266248 2009-01-01 00:00 libs/libpng.z.so ------> shared_libraries 101 102``` 103 104