WX20240202-102226@2x.png
比如我们有很多个模块划分,首页啊,订单啊 每个模块创建的时候都会有module.json5
先看下整体最简单模块标签 然后一一列举每个标签作用
{
"module": {
//标识当前Module的名称,标签值采用字符串表示(最大长度31个字节),该名称在整个应用要唯一,仅支持英文字符。
"name": "entry",
//标识当前Module的类型。类型有两种,分别:- entry:应用的主模块。feature:应用的动态特性模块。
"type": "entry",
//标识当前Module的描述信息,标签值是字符串类型(最长255字节)或对描述内容的字符串资源索引。
"description": "$string:module_desc",
//标识当前Module的入口UIAbility名称或者
"mainElement": "EntryAbility",
"deviceTypes": [
"tv",
"tablet"
],
/标识当前Module是否在用户主动安装的时候安装,表示该Module对应的HAP是否跟随应用一起安装。
"deliveryWithInstall": true,
// 标识当前Module是否支持免安装特性。
// - true:表示支持免安装特性,且符合免安装约束。
//
// - false:表示不支持免安装特性。
// - 当应用的entry类型Module的该字段配置为true时,该应用的feature类型的该字
"installationFree": false,
//标识当前Module的profile资源,用于列举每个页面信息。 其实就是路由,点进去你会发现是你在此module下配置跳转的路由信息
"pages": "$profile:main_pages",
"virtualMachine": "ark",
}
}
当然这些只是最基本(最不全的)module信息了 module.json5里内容很多,主要列举:
- deviceTypes
- pages
- metadata
- abilities
- extensionAbilities
- requestPermissions
- testRunner
deviceTypes标签
标识当前Module可以运行在哪类设备上
- phone 手机
- table 平板类
- car 车机
- wearable 手表
- tv 智慧屏
{
"module": {
"name": "myHapName",
"type": "feature",
"deviceTypes" : [
"phone"
"tablet"
"car"
"wearable"
"tv"
]
}
}
pages标签
标识当前Module的profile资源,用于列举每个页面信息。其实就是路由配置
WX20240204-085649@2x.png
abilities
描述UIAbility组件的配置信息,标签值为数组类型,该标签下的配置只对当前UIAbility生效
{
"module": {
"name": "myHapName",
"type": "feature",
"abilities": [{
"name": "EntryAbility",//abilities名称
"srcEntry": "./ets/entryability/EntryAbility.ts",//abilities路径
"launchType":"singleton",//启动模式 三种singleton(单实例),multiton(多实例),specified(指定实例)
"description": "$string:description_main_ability",//abilities描述信息
"icon": "$media:icon",
"label": "Login",
"permissions": [],//标识当前UIAbility组件自定义的权限信息。当其他应用访问该UIAbility时,需要申请相应的权限信息。
"metadata": [],
// 标识当前UIAbility组件是否可以被其他应用调用。
// - true:表示可以被其他应用调用。
// - false:表示不可以被其他应用调用
//!!!注意如果是启动页 就是第一个页面如果是false是无法被调起的app 会报错
"exported": true,
//标识当前UIAbility组件是否可以迁移。
//- true:表示可以被迁移。
//- false:表示不可以被迁移
"continuable": true,
//标识当前UIAbility组件或ExtensionAbility组件能够接收Want特征集,为数组格式。
"skills": [{
"actions": ["ohos.want.action.home"],
"entities": ["entity.system.home"],
"uris": []
}],
}
}
Skills
- actions 表示调用方要执行的通用操作(如查看、分享、应用详情)。在隐式Want中,您可定义该字段,配合uri或parameters来表示对数据要执行的操作。如打开,查看该uri数据。例如,当uri为一段网址,action为ohos.want.action.viewData则表示匹配可查看该网址的Ability。在Want内声明action字段表示希望被调用方应用支持声明的操作。在被调用方应用配置文件skills字段内声明actions表示该应用支持声明操作。
ACTION_HOME:启动应用入口组件的动作,需要和ENTITY_HOME配合使用;系统桌面应用图标就是显式的入口组件,点击也是启动入口组件;入口组件可以配置多个。
ACTION_CHOOSE:选择本地资源数据,例如联系人、相册等;系统一般对不同类型的数据有对应的Picker应用,例如联系人和图库。
ACTION_VIEW_DATA:查看数据,当使用网址uri时,则表示显示该网址对应的内容。
ACTION_VIEW_MULTIPLE_DATA:发送多个数据记录的操作
- entities 表示目标Ability的类别信息(如浏览器、视频播放器),在隐式Want中是对action的补充。在隐式Want中,开发者可定义该字段,来过滤匹配应用的类别,例如必须是浏览器。在Want内声明entities字段表示希望被调用方应用属于声明的类别。在被调用方应用配置文件skills字段内声明entites表示该应用支持的类别。
ENTITY_DEFAULT:默认类别无实际意义。
ENTITY_HOME:主屏幕有图标点击入口类别。
ENTITY_BROWSABLE:指示浏览器类别。
metadata标签
该标签标识HAP的自定义元信息,标签值为数组类型,包含name,value,resource三个子标签。
{
"module": {
"metadata": [{
"name": "module_metadata",//该标签标识数据项的键名称,字符串类型
"value": "a test demo for module metadata",//该标签标识数据项的值,标签值为字符串
"resource": "$profile:shortcuts_config",//该标签标识定义用户自定义数据格式,标签值为标识该数据的资源的索引值。
}],
}
}
extensionAbilities标签
ExtensionAbility组件是基于特定场景(例如服务卡片、输入法等)提供的应用组件,以便满足更多的使用场景。
{
"extensionAbilities": [
{
"name": "FormName",
"srcEntry": "./form/MyForm.ts",
"icon": "$media:icon",
"label" : "$string:extension_name",
"description": "$string:form_description",
"type": "form", //标识当前ExtensionAbility组件的类型,取值为:- form:卡片的ExtensionAbility。
"permissions": ["ohos.abilitydemo.permission.PROVIDER"],
"exported": true,
"uri":"scheme://authority/path/query",
"skills": [{
"actions": [],
"entities": [],
"uris": []
}],
"metadata": [
{
"name": "ohos.extension.form",
"resource": "$profile:form_config",
}
]
}
]
}
- type 标识当前ExtensionAbility组件的类型
说明:其中service和dataShare类型,仅支持系统应用配置,三方应用配置不生效。- form:卡片的ExtensionAbility。
- workScheduler:延时任务的ExtensionAbility。
- inputMethod:输入法的ExtensionAbility。
- service:后台运行的service组件。
- accessibility:辅助能力的ExtensionAbility。
- dataShare:数据共享的ExtensionAbility。
- fileShare:文件共享的ExtensionAbility。
- staticSubscriber:静态广播的ExtensionAbility。
- wallpaper:壁纸的ExtensionAbility。
- backup:数据备份的ExtensionAbility。
- window:该ExtensionAbility会在启动过程中创建一个window,为开发者提供界面开发。开发者开发出来的界面将通过abilityComponent控件组合到其他应用的窗口中。
- thumbnail:获取文件缩略图的ExtensionAbility,开发者可以对自定义文件类型的文件提供缩略。
- preview:该ExtensionAbility会将文件解析后在一个窗口中显示,开发者可以通过将此窗口组合到其他应用窗口中。
requestPermissions标签
该标签标识应用运行时需向系统申请的权限集合。
{
"module" : {
"requestPermissions": [
{
//必须,填写需要使用的权限名称
"name": "ohos.abilitydemo.permission.PROVIDER",
//可选,当申请的权限为user_grant权限时此字段必填,用于描述申请权限的原因。
//说明:- 当申请的权限为user_grant权限时,如果未填写该字段则不允许在应用市场上架,并且需要进行多语种适配。
"reason": "$string:reason",
//可选,当申请的权限为user_grant权限时此字段必填。描述权限使用的场景由abilities和when组成。其中abilities可以配置为多个UIAbility组件,when表示调用时机。
//说明:- 默认为可选,当申请的权限为user_grant权限时,abilities标签必填,when标签可选。
"usedScene": {
"abilities": [
"EntryFormAbility"//标识需要使用到该权限的Ability,标签为数组形式。可选项。
],
"when": "inuse"//标识权限使用的时机,值为inuse/always。inuse:表示为仅允许前台使用;always:表示前后台都可使用
}
}
]
}
}
权限的配置分为system_grant(系统授权)还是user_grant(用户授权)都需要在配置文件中声明。
应用默认的权限等级为normal。如果应用需要申请高于默认等级的权限,除了在配置文件中进行声明之外,还需要通过ACL方式进行声明使用
后面会单独开一篇关于权限控制的文章 此文章仅仅介绍module.json5
module.json5配置信息表