商道如狼道 发表于 2024-9-21 17:53:55

鸿蒙南向开发实战:HAP编译

根本概念

术语含义HAPHarmony Ability Package,一个HAP文件包含应用的所有内容,由代码、资源、三方库及应用配置文件构成,其文件后缀名为.hap。Ability应用的告急构成部分,是应用所具备能力的抽象。Ability是体系调度应用的最小单元,是可以大概完成一个独建功能的组件,一个应用可以包含一个或多个Ability。FAFeature Ability,是FA模型的Ability框架下具有UI界面的Ability范例,用于与用户进行交互。Feature Ability唯一对应一种模板,即Page模板(Page Ability)。PAParticle Ability,是在FA模型的Ability框架下无界面的Ability,主要为Feature Ability提供服务与支持,比方作为配景服务提供计算能力,或作为数据仓库提供数据访问能力。Particle Ability有三种模板,分别为Service模板(Service Ability)、Data模板(Data Ability)、以及Form模板(Form Ability)。FA模型两种Ability框架模型布局的其中一种。是Ability框架在API 8及更早版本采用FA模型。FA模型将Ability分为FA(Feature Ability)和PA(Particle Ability)两种范例,其中FA支持Page Ability模板,PA支持Service ability、Data ability、以及Form ability模板。Stage模型两种Ability框架模型布局的其中一种。从API 9开始支持。Stage模型将Ability分为Ability和ExtensionAbility两大类,其中ExtensionAbility又被扩展为ServiceExtensionAbility、FormExtensionAbility、DataShareExtensionAbility等等一系列ExtensionAbility。 功能简介

提供HAP编译构建功能,支持FA模型、Stage模型。
开发引导

编译子体系提供的模板

ohos_hap

声明一个HAP目的,该目的会天生一个HAP,最终将会打包到system镜像中。
支持的变量说明hap_profileHAP的config.json,Stage模型对应module.json。raw_assets原始assets,这些assets会直接拷贝到HAP的assets目录下。resources资源文件,编译后放置在assets/entry/resources目录下js_assetsjs资源,编译后放置在assets/js/default目录下。ets_assetsets资源,编译后放置在assets/js/default目录下deps当前目的的依靠shared_libraries当前目的依靠的native库hap_nameHAP的名字,可选,默以为目的名final_hap_path用户可以订定天生的HAP的位置,可选,final_hap_path中会覆盖hap_name。subsystem_nameHAP从属的子体系名,需要和ohos.build中的名字对应,否则将导致无法安装到system镜像中。part_nameHAP从属的部件名,同subsystem_name。js2abc是否需要将该HAP的js代码转换为ARK的字节码。ets2abc是否需要将该HAP的ets代码转换为ARK的字节码。certificate_profileHAP对应的授权文件,用于签名。certificate_file证书文件,证书文件和授权文件,应用开发者需要去OpenHarmony官网申请。keystore_pathkeystore文件,用于签名。keystore_passwordkeystore的暗码,用于签名。key_aliaskey的别名。module_install_name安装时的HAP名称。module_install_dir安装到system中的位置,默认安装在system/app目录下。js_build_mode可选,用于配置HAP是“release”照旧“debug”模型编译,默认“release”。 ohos_app_scope

声明一个HAP的AppScope模块,该目的的app_profile和sources会在编译时拼接到具体的entry内编译,该模板只在Stage模型下使用。
支持的变量说明app_profileHAP的AppScope中的app.json,只在Stage模型下使用。sourcesHAP的AppScope中的资源resources,只在Stage模型下使用。 ohos_js_assets

js或ets代码,编译后放置在assets/js/default目录下,stage模型根据代码分别放置到js或ets目录。
支持的变量说明hap_profileHAP的config.json,Stage模型对应module.json。source_dirjs或ets代码路径,兼容FA模型的单ability配置到ability目录。ets2abc当前为ets代码,主要用于卡片配置,其他应用可不配,使用ohos_hap中的配置。js2abc当前为js代码,主要用于卡片配置,其他应用可不配,使用ohos_hap中的配置。 ohos_assets

原始assets,这些assets会直接拷贝到HAP的assets目录下。
支持的变量说明sources原始assets的路径。 ohos_resources

资源文件,FA模型编译后放置在assets/entry/resources目录下,Stage模型编译后放置在resources目录下。
支持的变量说明hap_profileHAP的config.json,Stage模型对应module.json。sources资源文件路径。deps当前目的的依靠。Stage模型需要配置对ohos_app_scope目的的依靠。 操纵步调


[*] 将开发完成的应用example放到applications/standard/目录下。
[*] 配置gn脚本applications/standard/example/BUILD.gn,FA模型简朴示比方下(更多BUILD.gn配置见gn脚本配置示例):
import("//build/ohos.gni") # 引用ohos.gni

ohos_hap("example") {
hap_profile = "./src/main/config.json" # config.json
js_assets = ["./src/main/js/default"]
raw_assets = ["./raw_assets"]
resources = ["./src/main/resources"]
shared_libraries = [
    "//third_party/libpng:libpng", # native库
]
certificate_profile = "../signature/systemui.p7b" # Cer文件
hap_name = "SystemUI-NavigationBar" # 名字
part_name = "prebuilt_hap"
subsystem_name = "applications"
}
[*] 修改applications/standard/hap/ohos.build,示比方下:
{
"subsystem": "applications",
"parts": {
    "prebuilt_hap": {
      "module_list": [
      ...
      "//applications/standard/example:example" # 添加编译目标
      ]
    }
}
}
[*] 编译命令:
# 全量编译
./build.sh --product-name {product_name}

# 单独编译HAP
./build.sh --product-name {product_name} --build-target applications/standard/example:example
[*] 编译产物,FA模型简朴例子HAP解压视图如下:
Length      Date    Time    Name
------------------- -----   ----
   14392009-01-01 00:00   assets/raw_assets                                 -----> raw_assets
      3542009-01-01 00:00   assets/entry/resources.index                      ------> resources
      12009-01-01 00:00   assets/entry/resources/base/media/attributes.key------> resources
      12009-01-01 00:00   assets/entry/resources/base/media/constants.key   ------> resources
      12009-01-01 00:00   assets/entry/resources/base/media/contents.key    ------> resources
   67902009-01-01 00:00   assets/entry/resources/base/media/icon.png      ------> resources
      12009-01-01 00:00   assets/entry/resources/base/media/nodes.key       ------> resources
    111702009-01-01 00:00   assets/js/default/app.js                        ------> js_assets
       482009-01-01 00:00   assets/js/default/i18n/en-US.json               ------> js_assets
       502009-01-01 00:00   assets/js/default/i18n/zh-CN.json               ------> js_assets
      2242009-01-01 00:00   assets/js/default/manifest.json                   ------> js_assets
    414812009-01-01 00:00   assets/js/default/pages/index/index.js            ------> js_assets
      9092009-01-01 00:00   config.json                                       ------> hap_profile
   2662482009-01-01 00:00   libs/libpng.z.so                                  ------> shared_libraries
gn脚本配置示例



[*] FA模型多ability示例
import("//build/ohos.gni")

ohos_hap("dataability") {
hap_profile = "entry/src/main/config.json"
deps = [
    ":dataability_js_assets",
    ":dataability_resources",
]
certificate_profile = "signature/openharmony_sx.p7b"
hap_name = "dataability"
part_name = "prebuilt_hap"
subsystem_name = "applications"
}

ohos_js_assets("dataability_js_assets") {
ets2abc = true
source_dir = "entry/src/main/ets"
hap_profile = "entry/src/main/config.json"
}

ohos_resources("dataability_resources") {
sources = [
    "entry/src/main/resources",
]
hap_profile = "entry/src/main/config.json"
}
[*] FA模型Js卡片示例
import("//build/ohos.gni")

ohos_hap("FormOfFaJs") {
hap_profile = "entry/src/main/config.json"
deps = [
    ":FormOfFaJs_js_assets",
    ":FormOfFaJs_resources",
]
certificate_profile = "signature/openharmony_sx.p7b"
hap_name = "FormOfFaJs"
part_name = "prebuilt_hap"
subsystem_name = "applications"
}

ohos_js_assets("FormOfFaJs_js_assets") {
hap_profile = "entry/src/main/config.json"
js2abc = true
source_dir = "entry/src/main/js"
}

ohos_resources("FormOfFaJs_resources") {
sources = [
    "entry/src/main/resources",
]
hap_profile = "entry/src/main/config.json"
}
[*] FA模型Ets卡片示例
import("//build/ohos.gni")

ohos_hap("FormOfFaEts") {
hap_profile = "entry/src/main/config.json"
deps = [
    ":FormOfFaEts_js_assets",
    ":FormOfFaEts_form_js_assets",
    ":FormOfFaEts_resources",
]
certificate_profile = "signature/openharmony_sx.p7b"
hap_name = "FormOfFaEts"
part_name = "prebuilt_hap"
subsystem_name = "applications"
}

ohos_js_assets("FormOfFaEts_js_assets") {
hap_profile = "entry/src/main/config.json"
ets2abc = true
source_dir = "entry/src/main/ets"
}

ohos_js_assets("FormOfFaEts_form_js_assets") {
hap_profile = "entry/src/main/config.json"
js2abc = true
source_dir = "entry/src/main/js"
}

ohos_resources("FormOfFaEts_resources") {
sources = [
    "entry/src/main/resources",
]
hap_profile = "entry/src/main/config.json"
}
[*] Stage模型简朴示例
import("//build/ohos.gni")

ohos_hap("actmoduletest") {
hap_profile = "entry/src/main/module.json"
deps = [
    ":actmoduletest_js_assets",
    ":actmoduletest_resources",
]
certificate_profile = "signature/openharmony_sx.p7b"
hap_name = "actmoduletest"
part_name = "prebuilt_hap"
subsystem_name = "applications"
}

ohos_app_scope("actmoduletest_app_profile") {
app_profile = "AppScope/app.json"
sources = [ "AppScope/resources" ]
}

ohos_js_assets("actmoduletest_js_assets") {
ets2abc = true
source_dir = "entry/src/main/ets"
}

ohos_resources("actmoduletest_resources") {
sources = [
    "entry/src/main/resources",
]
deps = [
    ":actmoduletest_app_profile",
]
hap_profile = "entry/src/main/module.json"
}
[*] Stage模型卡片示例
import("//build/ohos.gni")

ohos_hap("FormOfStageEts") {
hap_profile = "entry/src/main/module.json"
deps = [
    ":FormOfStageEts_js_assets",
    ":FormOfStageEts_form_js_assets",
    ":FormOfStageEts_resources",
]
js_build_mode = "debug"# 默认release
certificate_profile = "signature/openharmony_sx.p7b"
hap_name = "FormOfStageEts"
part_name = "prebuilt_hap"
subsystem_name = "applications"
}

ohos_js_assets("FormOfStageEts_js_assets") {
hap_profile = "entry/src/main/module.json"
ets2abc = true
source_dir = "entry/src/main/ets"
}

ohos_js_assets("FormOfStageEts_form_js_assets") {
hap_profile = "entry/src/main/module.json"
js2abc = true
source_dir = "entry/src/main/js"
}

ohos_app_scope("FormOfStageEts_app_profile") {
app_profile = "AppScope/app.json"
sources = [ "AppScope/resources" ]
}

ohos_resources("FormOfStageEts_resources") {
sources = [
    "entry/src/main/resources",
]
deps = [
    ":FormOfStageEts_app_profile",
]
hap_profile = "entry/src/main/module.json"
}
最后

有很多小伙伴不知道学习哪些鸿蒙开发技能?不知道需要重点把握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。以是有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习黑白常有必要的。 
这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必把握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技能、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技能知识点。
盼望这一份鸿蒙学习资料可以大概给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!
假如你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行职员,可以直接领取这份资料
 获取这份完备版高清学习门路,请点击→纯血版全套鸿蒙HarmonyOS学习资料
鸿蒙(HarmonyOS NEXT)最新学习门路

https://i-blog.csdnimg.cn/blog_migrate/15a41c202968249002b9e71d35d047b0.png


[*]  HarmonOS基础技能
https://i-blog.csdnimg.cn/blog_migrate/d15791a8d9157b12cf470e6e20e199cd.png


[*]HarmonOS就业必备技能 https://i-blog.csdnimg.cn/blog_migrate/219a3f80b24947602f5ce80869c0f0d1.png
[*] HarmonOS多媒体技能
https://i-blog.csdnimg.cn/blog_migrate/f76470c4171a878d5f6071f6d009b828.png


[*]鸿蒙NaPi组件进阶
https://i-blog.csdnimg.cn/blog_migrate/8755cfeac3a887ec19fb168f7164234c.png


[*]HarmonOS高级技能
https://i-blog.csdnimg.cn/blog_migrate/1e210328c1ebf43f08d3b6c5f5c13b48.png


[*]初识HarmonOS内核 https://i-blog.csdnimg.cn/blog_migrate/24384aae472f78c055f7bf545467db7f.png
[*]实战就业级设备开发
https://i-blog.csdnimg.cn/blog_migrate/9b0c4eb9a30ca059d28eceb4727b593e.png
 有了门路图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套体系性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。
获取以上完备版高清学习门路,请点击→纯血版全套鸿蒙HarmonyOS学习资料
《鸿蒙 (OpenHarmony)开发入门教学视频》

https://i-blog.csdnimg.cn/blog_migrate/9b893c2a4956d6ce72b63212f9216eab.png
《鸿蒙生态应用开发V2.0白皮书》

https://i-blog.csdnimg.cn/blog_migrate/343917b8910aff13b48316fe3db39da6.jpeg
《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建
https://i-blog.csdnimg.cn/blog_migrate/2e05bbd2cb0f05ec297905ba57f803c2.png
 《鸿蒙开发基础》



[*]ArkTS语言
[*]安装DevEco Studio
[*]运用你的第一个ArkTS应用
[*]ArkUI声明式UI开发
[*].……
https://i-blog.csdnimg.cn/blog_migrate/48e16dbee395ba8de1264149330856d4.png
 《鸿蒙开发进阶》



[*]Stage模型入门
[*]网络管理
[*]数据管理
[*]电话服务
[*]分布式应用开发
[*]通知与窗口管理
[*]多媒体技能
[*]安全技能
[*]任务管理
[*]WebGL
[*]国际化开发
[*]应用测试
[*]DFX面向未来计划
[*]鸿蒙体系移植和裁剪定制
[*]……
https://i-blog.csdnimg.cn/blog_migrate/adf72eca696abc1415cd768fceda1af7.png
《鸿蒙进阶实战》



[*]ArkTS实践
[*]UIAbility应用
[*]网络案例
[*]……
https://i-blog.csdnimg.cn/blog_migrate/c077a46bb540fc657713d99f39e9c74c.png
 获取以上完备鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料
总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑衅,也是一个时机。只有积极应对变化,不绝学习和提升本身,他们才能在这个厘革的期间中立于不败之地。 
https://i-blog.csdnimg.cn/blog_migrate/926f3f942f098baebec15ecf79df9ca9.png


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 鸿蒙南向开发实战:HAP编译