【木棉花】 知识分享——HarmonyOS APP和HAP的组成(下) 原创 精华

发布于 2022-1-24 10:20
浏览
1收藏

春节不停更,此文正在参加「星光计划-春节更帖活动」​​

 前言

     在上一期知识分享中,我们已经初步了解APP与HAP的内部结构。本期,我们将详细地讨论config.json所包含的元素与子元素,以寻求对HAP的组成和工作原理更加深入的认识与理解。

【木棉花】 知识分享——HarmonyOS APP和HAP的组成(下)-开源基础软件社区

正文

   接下来我将对配置文件(即config.json)的组成与结构展开系统的阐述。

【木棉花】 知识分享——HarmonyOS APP和HAP的组成(下)-开源基础软件社区

      配置文件一共包含了五大元素,分别是:配置文件的内部结构app对象的内部结构deviceConfig对象的内部结构module对象的内部结构HAP与HAR的配置文件的合并

【木棉花】 知识分享——HarmonyOS APP和HAP的组成(下)-开源基础软件社区

   配置文件的内部结构由app,deviceConfig和module三部分构成,缺一不可。其中,app表示应用的全局配置信息,deviceConfig表示应用在具体设备(如手机,平板,智能穿戴等)上的配置信息,module则表示HAP的配置信息。

【木棉花】 知识分享——HarmonyOS APP和HAP的组成(下)-开源基础软件社区

   app对象的内部结构由bundleName,vendor和version三部分构成,当然也是缺一不可。其中,bundleName用于标识应用的包名,确保应用的唯一性,vendor表示对应用的开发厂商的描述,version则表示应用的版本号。这三者所涵盖的相关信息便构成了一个应用的全局配置信息。

【木棉花】 知识分享——HarmonyOS APP和HAP的组成(下)-开源基础软件社区

      deviceConfig对象包含了具体设备上的应用配置信息,它的的内部结构可由default(通用设备),phone(手机),tablet(平板),tv(智慧屏),car(车机),wearable(智能穿戴)等属性组成。需要注意的是,deviceConfig对象内一定要带有default属性,而其他的属性则可以被缺省。

      phone是deviceConfig中的一个重要属性,所以在这里,我将对phone对象的内部结构展开详细讨论。

【木棉花】 知识分享——HarmonyOS APP和HAP的组成(下)-开源基础软件社区

    phone对象由四个属性组成,分别是jointUserId,process,supportBackup和compressNativeLibs(图中未给出jointUserId与process)。其中,jointUserId表示应用的共享userId(通常情况下,不同的应用运行在不同的进程中,应用的资源是无法共享的,如果开发者的多个应用之间需要共享资源,则可以通过相同的jointUserId实现,前提是应用的签名相同),但当API的版本高于3时,该字段将不再予以配置;process表示应用或者Ability的进程名;supportBackup表示应用是否支持备份与恢复,若对其配置为”false”,则不支持此功能;CompressNativeLibs表示Libs库是否以压缩存储的方式打包到HAP包,若配置为”false”,则libs库以不压缩的方式存储,那么HAP包在安装时就无需解压libs,运行时会直接从HAP内加装libs库。

    回到之前的话题,我们继续展开关于配置文件所含元素的阐述。

【木棉花】 知识分享——HarmonyOS APP和HAP的组成(下)-开源基础软件社区

    module对象包含了HAP的五种配置信息——package,name,description,supportedModesdeviceType。其中,package表示HAP的包结构名称,它是采用反向域名格式命名的;name表示HAP的包名,也采用反向域名的格式命名;description表示HAP的描述信息;supportedModes表示应用支持的运行模式(当前仅定义了驾驶模式);deviceType表示允许Ability运行的设备类型(包括phone,tablet,tv,car,wearable,liteWearable等)。

   module对象的内部结构主要由distro,ablilties,js,shortcuts,defPermissionsreqPermissions共六个元素组成。其中,distro表示HAP发布的具体描述;abilities表示当前模块内的所有Ability;js表示基于JS UI框架开发的JS模块集合;shortcuts表示应用的快捷方式信息;defpermissions表示应用定义的权限;reqPermissions表示应用运行时向系统申请的权限。

   distrojsabilites是module中三个重要的对象,这里我将详细说明这三者内部的结构或属性。

【木棉花】 知识分享——HarmonyOS APP和HAP的组成(下)-开源基础软件社区

  distro对象deliveryWithInstallmoduleNamemoduleTypeinstallationFree四个属性构成。其中,deliveryWithInstall表示当前HAP是否支持随应用安装,若把此属性配置为true,则表示支持此功能,若把此属性配置为false,则反之;moduleName表示当前HAP的名称;moduleType表示当前HAP的类型(显然,HAP的类型分为entry和feature);installationFree表示当前HAP是否支持免安装特性,若把此属性配置为true,则表示支持此功能,若把此属性配置为false,则反之。

【木棉花】 知识分享——HarmonyOS APP和HAP的组成(下)-开源基础软件社区

  js对象name,pages,window,type这四个属性构成。其中,name表示JS Conponent的名字(默认值为default);pages表示JS Conponent的页面用于列举JS Component中每个页面的路由信息(页面路径+页面名称);window用于定义与显示窗口相关的配置,并且:window对象涵盖designWidth和autoDesignWidth这两个重要属性,其中designWidth用于表示页面设计基准宽度,而autoDesignWidth用于表示页面设计基准宽度是否自动计算(当将其配置为true时,designWidth项会被忽略,设计基准宽度由系统自动计算得出);type表示JS应用的类型,若对其取值为normal,则标识该JS Component为应用实例,若对其取值为form,则标识该JS Component为卡片实例。

  abilities对象的内部属性则比较复杂,为了便于区分,这里将其属性划分为核心属性和次要属性。

【木棉花】 知识分享——HarmonyOS APP和HAP的组成(下)-开源基础软件社区

   abilities对象的核心属性包括name,launchType,visible,permissions,skills,typeorientation七种。其中,name表示Ability的名称;launchtype表示Ability的启动模式;visible表示此Ability是否可被其他应用调用;permissions表示其他应用的Ability调用此Ability时需要申请的权限;skills表示Ability能够接收的Intent的特征;type表示Ability的类型;orientation表示Ability的显示模式(该标签仅适用于page类型的Ability)。

【木棉花】 知识分享——HarmonyOS APP和HAP的组成(下)-开源基础软件社区

   abilites的次要属性包括descriptioniconlabelurireadPermissionwritePermissionmissionformsEnabledforms九种。其中,description表示对Ability的描述,icon表示Ability图标资源文件的索引;label表示Ability对用户显示的名称;uri表示Ability的统一资源标识符(对于data类型的Ability则不可缺省uri);readPermission表示读取Ability数据时所需要的权限;writePermission表示向Ability写入数据时所需要的权限;mission表示Ability指定的任务栈(仅适用于page类型的Ability);formsEnabled表示Ability是否支持卡片功能;forms表示服务卡片的属性。

  这里我们继续深入研究abilities的两个属性——skillsforms

【木棉花】 知识分享——HarmonyOS APP和HAP的组成(下)-开源基础软件社区

   skills对象的内部结构由actions,entitiesuris三个属性组成。其中,actions表示能够接受的Intent的action值(可包含多个action),entities表示能够接收的Intent的Ability的类别(可以包含一个或多个entity),uris表示能够接收的Intent的uri(可以包含一个或多个uri)。

【木棉花】 知识分享——HarmonyOS APP和HAP的组成(下)-开源基础软件社区

    forms对象的内部结构由name,description,isDefault,typecolorMode五个属性组成。其中,name表示卡片的类名;description表示卡片的描述;isDefault表示该卡片是否为默认卡片(每个Ability有且只有一个默认卡片),若对其配置为true,则该卡片设定为默认卡片,若对其配置为false,则反之;type表示卡片的类型,共分为Java(Java卡片)和JS(JS卡片)两种;colorMode表示卡片的主题样式,可取值为auto(自适应),dark(深色主题)或者light(浅色主题)。

    最后我们回到关于配置文件所含元素的讨论。

【木棉花】 知识分享——HarmonyOS APP和HAP的组成(下)-开源基础软件社区

    我将阐述的最后一个元素是“HAP与HAR的配置文件的合并”。如果应用模块中调用了HAR,在编译构建HAP时,需要将HAP的config.json文件与一个或多个HAR的cofig.json文件合并为单个config.json文件。在合并过程中,不同文件的同一个标签的取值可能发生冲突。此时则需要通过mergeRule来解决冲突。

    以上便是对config.json配置文件)所包含的元素与子元素的系统描述,相信读完这篇文章以后,你的心中也已经描摹好了一张关于HAP内部结构和功能的完整图谱。

结语

本次的知识分享就到此结束了,鉴于笔者能力有限,文章如有错误和不足之处,希望读者批评指正。

【木棉花】 知识分享——HarmonyOS APP和HAP的组成(下)-开源基础软件社区

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2022-1-24 10:20:45修改
2
收藏 1
回复
举报
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
    相关推荐