HAP是利用装置的根本单位,在DevEco Studio工程目录中,一个HAP对应一个Module。利用打包时,每个Module生成一个.hap文件。
利用如果蕴含多个Module,在利用市场上架时,会将多个.hap文件打包成一个.app文件(称为Bundle),但在云端散发和端侧装置时,依然是以HAP为根本单位。
为了可能失常散发和装置利用,须要保障一个利用装置到设施时,Module的名称、Ability的名称不反复,并且只有一个Entry类型的Module与指标设施绝对应。
DevEco Studio会在编译构建时,对HAP进行上述唯一性校验,如果校验不通过,将会编译失败或给出告警。
阐明
以后仅在API 8的工程中,针对distrofilter进行打包校验。
Module校验逻辑
校验目标:同一指标设施上Module惟一。
1.校验Module的Name。如果多个Module的Name不同,则校验通过。如果Name雷同,持续校验deviceType。
2.校验设施类型deviceType。如果deviceType不相交,则校验通过。如果deviceType相交,持续校验distroFilter。
deviceType不相交是指两个Module的deviceType中配置了齐全不同的设施,例如:
//Module1和Module2配置了齐全不同的设施,deviceType不相交。//Module1{ "deviceType": ["TV", "tablet"]}//Module2{ "deviceType": ["car", "router"]}
deviceType相交是指两个Module的deviceType中蕴含了雷同的设施,例如:
//Module1和Module2因为都蕴含“tablet”设施,导致deviceType相交。//Module1{ "deviceType": ["TV", "tablet"]}//Module2{ "deviceType": ["car", "tablet"]}
3.校验散发规定distroFilter。如果distroFilter不相交,则校验通过。如果distroFilter相交,则无奈保障Module唯一性,校验失败,打包失败。
distroFilter中蕴含属性apiVersion、screenShape、screenWindow、screenDensity和countryCode。相交的相干含意如下:
- distroFilter不相交:如果两个distroFilter中任意一个属性不相交,则两个distroFilter不相交。
- distroFilter相交:如果两个distroFilter中所有属性都相交,则两个distroFilter相交。
例如,两个Module中的apiVersion、screenShape、screenWindow、screenDensity都相交,但countryCode不相交,则能够辨别两个Module,校验通过。
//Module1和Module2的两个distroFilter中,countryCode不相交,则两个distroFilter不相交。//Module1{ "distroFilter": { "apiVersion" : { "policy": "include", "value": [8,9] }, "screenShape": { "policy": "include", "value": ["rect"] }, "screenWindow": { "policy": "include", "value": ["454*454", "466*466"] }, "screenDensity": { "policy": "include", "value": ["ldpi", "xldpi"] }, "countryCode": { "policy": "include", "value": ["CN", "HK"] } }}//Module2{ "distroFilter": { "apiVersion" : { "policy": "include", "value": [8,9] }, "screenShape": { "policy": "include", "value": ["rect"] }, "screenWindow": { "policy": "include", "value": ["454*454", "466*466"] }, "screenDensity": { "policy": "include", "value": ["ldpi", "xldpi"] }, "countryCode": { "policy": "include", "value": ["USA", "UK"] } }}
Ability校验逻辑
校验目标:同一指标设施上Ability惟一。
1.校验Ability的Name。如果多个Ability的Name不同,则校验通过。如果Name雷同,持续校验Ability所属Module的deviceType。
2.校验Ability所属Module的deviceType。如果deviceType不相交,校验通过。如果deviceType相交,持续校验Ability所属Module的distroFilter。
例如,两个Ability的Name雷同,但其所属Module的deviceType不相交,校验通过。
//Ability1和Ability2尽管名称雷同,但因为其所属Module的deviceType不相交,所以能够辨别两个Ability,校验通过。//Ability1{ "module": { "name": "module_sample1", "deviceType": ["TV", "tablet"], "abilities": [ { "name": "ability_sample" } ] }}//Ability2{ "module": { "name": "module_sample2", "deviceType": ["car", "router"], "abilities": [ { "name": "ability_sample" } ] }}
3.校验Ability所属Module的distroFilter。如果distroFilter不相交,校验通过。如果distroFilter相交,校验失败,抛出告警。
例如,两个Ability的Name雷同,其所属Module的deviceType也相交,但其所属Module的distroFilter不相交,校验通过。
//Ability1和Ability2的Name雷同,而且其所属Module的deviceType相交,但其所属Module的DistroFilter不相交,所以能够辨别两个Ability,校验通过。//Ability1{ "module": { "name": "module_sample", "deviceType": ["TV", "tablet"], "metadata": [ { "name": "distroFilter_config" "resource": "$profile:distroFilter_config_sample1" } ], "abilities": [ { "name": "ability_sample" } ] }}//Ability1所属Module的distroFilter{ "distroFilter": { "apiVersion" : { "policy": "include", "value": [8,9] }, "screenShape": { "policy": "include", "value": ["rect"] }, "screenWindow": { "policy": "include", "value": ["454*454", "466*466"] }, "screenDensity": { "policy": "include", "value": ["ldpi", "xldpi"] }, "countryCode": { "policy": "include", "value": ["CN", "HK"] } }}//Ability2{ "module": { "name": "module_sample2", "deviceType": ["TV", "tablet"], "metadata": [ { "name": "distroFilter_config" "resource": "$profile:distroFilter_config_sample2" } ], "abilities": [ { "name": "ability_sample" } ] }}//Ability2所属Module的distroFilter{ "distroFilter": { "apiVersion" : { "policy": "include", "value": [8,9] }, "screenShape": { "policy": "include", "value": ["rect"] }, "screenWindow": { "policy": "include", "value": ["454*454", "466*466"] }, "screenDensity": { "policy": "include", "value": ["ldpi", "xldpi"] }, "countryCode": { "policy": "include", "value": ["USA", "UK"] } }}
Entry校验逻辑
校验目标:指标设施只有一个Entry类型的Module与之对应,Feature类型的Module通过deviceType及distroFilter指明的指标设施都须要存在Entry类型的Module。
1.校验Feature类型的Module通过deviceType及distroFilter指明的指标设施都存在Entry类型的Module。
例如,Bundle中存在一个Entry类型Module1,其反对设施为tablet和wearable,其散发规定为circle和rect形态的屏幕,同时存在一个Feature类型的Module2,通过散发规定可知,其能够散发到rect形态的tablet和wearable设施上,而rect形态的tablet和wearable设施上存在Entry类型的Module1,校验通过。
//Entry类型Module1{ "module": { "name": "module_sample1", "type": "entry", "deviceType": ["tablet", "wearable"], "metadata": [ { "name": "distroFilter_config", "resource": "$profile:distroFilter_config1" } ] }}//Module1的distroFilter,distroFilter_config1.json{ "screenShape":{ "policy": "include", "value": ["circle", "rect"] }}//Feature类型Module2{ "module": { "name": "module_sample2", "type": "feature", "deviceType": ["tablet", "wearable"], "metadata": [ { "name": "distroFilter_config", "resource": "$profile:distroFilter_config2" } ] }}//Module2的distroFilter,distroFilter_config2.json{ "screenShape":{ "policy": "include", "value": ["rect"] }}
2.校验指标设施只有一个Entry类型的Module与之对应。
a.校验Entry类型Module的deviceType。如果deviceType不相交,校验通过。如果deviceType相交,持续校验Entry类型Module的distroFilter。
例如,同一个Bundle中存在两个Entry类型的Module,别离为Module1和Module2,两者的deviceType不相交,能够无效辨别两个Module,校验通过。
//Entry类型Module1{ "module": { "name": "module_sample1", "type": "entry", "deviceType": ["tablet"] }}//Entry类型Module2{ "module": { name: "module_sample2", "type": "entry", "deviceType": ["wearable"] }}
b.校验Entry类型Module的distroFilter。如果distroFilter不相交,校验通过。如果distroFilter相交,校验失败,打包失败。
例如,同一个Bundle中存在两个Entry类型的Module,别离为Module1和Module2,两者的deviceType相交,但两者的distroFilter不相交,能够无效辨别两个Module,校验通过。
//Entry类型Module1{ "module": { "name": "module_sample1", "type": "entry", "deviceType": ["wearable"], "metadata": [ { "name":"distroFilter_config" "resource": "$profile:distroFilter_sample1" } ] }}//Module1的distroFilter,distroFilter_sample1.json{ "distroFilter": { "screenShape":{ "policy": "include", "value": ["rect"] } }}//Entry类型Module1{ "module": { "name": "module_sample2", "type": "entry", "deviceType": ["wearable"], "metadata": [ { "name":"distroFilter_config" "resource": "$profile:distroFilter_sample2" } ] }}//Module2的distroFilter,distroFilter_sample2.json{ "distroFilter": { "screenShape":{ "policy": "include", "value": ["circle"] } }}
那么要想成为一名鸿蒙高级开发,以上知识点是必须要把握的,除此之外,还须要把握一些鸿蒙利用开发相干的一些技术,须要咱们独特去摸索。
为了可能让大家跟上互联网时代的技术迭代,在这里我特邀了几位行业大佬整顿出一份最新版的鸿蒙学习晋升材料,有须要的小伙伴自行支付,限时开源,先到先得~~~~
支付以下高清学习路线原图请点击→《鸿蒙全套学习指南》纯血鸿蒙HarmonyOS根底技能学习路线图
支付以上残缺高清学习路线图,请点击→《鸿蒙根底入门学习指南》小编本人整顿的局部学习材料(蕴含有高清视频、开发文档、电子书籍等)
以上分享的学习路线都适宜哪些人跟着学习?
-应届生/计算机专业
通过学习鸿蒙新兴技术,入行互联网,将来高起点待业。
-0根底转行
提前布局新方向,抓住风口,自我晋升,取得更多就业机会。
-技术晋升/进阶跳槽
倒退瓶颈期,晋升职场竞争力,疾速把握鸿蒙技术,享受蓝海红利。
最初
鸿蒙开发学习是一个系统化的过程,从基础知识的学习到实战技能的锻炼,再到对前沿技术的摸索,每一环节都至关重要。心愿这份教程材料能帮忙您疾速入门并在鸿蒙开发之路上步步攀升,成就一番事业。让咱们一起乘风破浪,拥抱鸿蒙生态的广大将来!
如果你感觉这篇内容对你有帮忙,我想麻烦大家动动小手给我:点赞,转发,有你们的 『点赞和评论』,才是我发明的能源。
关注我,同时能够期待后续文章ing,不定期分享原创常识。
想要获取更多残缺鸿蒙最新VIP学习材料,请点击→《鸿蒙 (Harmony OS)开发学习手册》