应用基础知识
1、APP
HarmonyOS的应用软件包以APP Pack(Application Package)形式发布,它是由一个或多个HAP(HarmonyOS Ability Package)以及描述每个HAP属性的pack.info组成。HAP是Ability的部署包,HarmonyOS应用代码围绕Ability组件展开。
一个HAP是由代码、资源、第三方库及应用配置文件组成的模块包,可分为entry和feature两种模块类型,如图1所示。
- entry:应用的主模块。一个APP中,对于同一设备类型必须有且只有一个entry类型的HAP,可独立安装运行。
- feature:应用的动态特性模块。一个APP可以包含一个或多个feature类型的HAP,也可以不含。只有包含Ability的HAP才能够独立运行。
2、Ability
Ability是应用所具备的能力的抽象,一个应用可以包含一个或多个Ability。Ability分为两种类型:FA(Feature Ability)和PA(Particle Ability)。FA/PA是应用的基本组成单元,能够实现特定的业务功能。FA有UI界面,而PA无UI界面。
3、库文件
库文件是应用依赖的第三方代码(例如so、jar、bin、har等二进制文件),存放在libs目录。
4、资源文件
应用的资源文件(字符串、图片、音频等)存放于resources目录下,便于开发者使用和维护,详见资源文件的分类。
5、配置文件
配置文件 (config.json) 是应用的Ability信息,用于声明应用的Ability,以及应用所需权限等信息,详见的应用配置文件。
应用配置文件:文件约定
简介:应用的每个HAP的根目录下都存在一个“config.json”配置文件,主要涵盖以下三个方面:
- 应用的全局配置信息,包含应用的包名、生产厂商、版本号等基本信息。
- 应用在具体设备上的配置信息。
- HAP包的配置信息,包含每个Ability必须定义的基本属性(如包名、类名、类型以及Ability提供的能力),以及应用访问系统或其他应用受保护部分所需的权限等。
文件约定:配置文件“config.json”采用JSON文件格式,由属性和值两部分构成:
- 属性
属性出现顺序不分先后,且每个属性最多只允许出现一次。
- 值
每个属性的值为JSON的基本数据类型(数值、字符串、布尔值、数组、对象或者null类型)。如果属性值需要引用资源文件,可参见资源文件。
6、pack.info
描述应用软件包中每个HAP的属性,由IDE编译生成,应用市场根据该文件进行拆包和HAP的分类存储。HAP的具体属性包括:
- delivery-with-install: 表示该HAP是否支持随应用安装。“true”表示支持随应用安装;“false”表示不支持随应用安装。
- name:HAP文件名。
- module-type:模块类型,entry或feature。
- device-type:表示支持该HAP运行的设备类型。
二、应用配置文件
1、简介
应用的每个HAP的根目录下都存在一个“config.json”配置文件,主要涵盖以下三个方面:
- 应用的全局配置信息,包含应用的包名、生产厂商、版本号等基本信息。
- 应用在具体设备上的配置信息。
- HAP包的配置信息,包含每个Ability必须定义的基本属性(如包名、类名、类型以及Ability提供的能力),以及应用访问系统或其他应用受保护部分所需的权限等。
文件约定
配置文件“config.json”采用JSON文件格式,由属性和值两部分构成:
- 属性
属性出现顺序不分先后,且每个属性最多只允许出现一次。
- 值
每个属性的值为JSON的基本数据类型(数值、字符串、布尔值、数组、对象或者null类型)。如果属性值需要引用资源文件,可参见资源文件。
2、配置文件的元素
此部分提供“config.json”文件中所有属性的详细解释。
配置文件的内部结构
应用的配置文件“config.json”中由“app”、“deviceConfig”和“module”三个部分组成,缺一不可。配置文件的内部结构说明参见表1。
属性名称 | 含义 | 数据类型 | 是否可缺省 |
---|---|---|---|
表示应用的全局配置信息。同一个应用的不同HAP包的“app”配置必须保持一致。 | 对象 | 否 | |
表示应用在具体设备上的配置信息。 | 对象 | 否 | |
表示HAP包的配置信息。该标签下的配置只对当前HAP包生效。 | 对象 | 否 |
app对象的内部结构
app对象包含应用的全局配置信息,内部结构说明参见表2。
属性名称 | 子属性名称 | 含义 | 数据类型 | 是否可缺省 |
---|---|---|---|---|
bundleName | - | 表示应用的包名,用于标识应用的唯一性。 包名是由字母、数字、下划线(_)和点号(.)组成的字符串,必须以字母开头。支持的字符串长度为7~127字节。 包名通常采用反域名形式表示(例如,com.huawei.himusic)。建议第一级为域名后缀“com”,第二级为厂商/个人名,第三级为应用名,也可以采用多级。 | 字符串 | 否 |
vendor | - | 表示对应用开发厂商的描述。字符串长度不超过255字节。 | 字符串 | 可缺省,缺省值为空。 |
version | - | 表示应用的版本信息。 | 对象 | 否 |
code | 表示应用的版本号,仅用于HarmonyOS管理该应用,对用户不可见。取值为大于零的整数。 | 数值 | 否 | |
name | 表示应用的版本号,用于向用户呈现。取值可以自定义。 | 字符串 | 否 | |
apiVersion | - | 表示应用依赖的HarmonyOS的API版本。 | 对象 | 否 |
compatible | 表示应用运行需要的API最小版本。取值为大于零的整数。 | 数值 | 否 | |
target | 表示应用运行需要的API目标版本。取值为大于零的整数。 | 数值 | 可缺省,缺省值为应用所在设备的当前API版本。 |
app示例:
"app": {
"bundleName": "com.huawei.hiworld.example",
"vendor": "huawei",
"version": {
"code": 2,
"name": "2.0"
}
"apiVersion": {
"compatible": 3,
"target": 3
}
}
deviceConfig对象的内部结构
deviceConfig包含在具体设备上的应用配置信息,可以包含default、car、tv、wearable、liteWearable、smartVision等属性。default标签内的配置是适用于所有设备通用,其他设备类型如果有特殊的需求,则需要在该设备类型的标签下进行配置。内部结构说明参见表3。
属性名称 | 含义 | 数据类型 | 是否可缺省 |
---|---|---|---|
default | 表示所有设备通用的应用配置信息。 | 对象 | 否 |
car | 表示车机特有的应用配置信息。 | 对象 | 可缺省,缺省为空。 |
tv | 表示智慧屏特有的应用配置信息。 | 对象 | 可缺省,缺省为空。 |
wearable | 表示智能穿戴特有的应用配置信息。 | 对象 | 可缺省,缺省为空。 |
liteWearable | 表示轻量级智能穿戴特有的应用配置信息。 | 对象 | 可缺省,缺省为空。 |
smartVision | 表示智能摄像头特有的应用配置信息。 | 对象 | 可缺省,缺省为空。 |
default、car、tv、wearable、liteWearable、smartVision等对象的内部结构说明,可参见表4。
属性名称 | 含义 | 数据类型 | 是否可缺省 |
---|---|---|---|
process | 表示应用或者Ability的进程名。 如果在“deviceConfig”标签下配置了“process”标签,则该应用的所有Ability都运行在这个进程中。 如果在“abilities”标签下也为某个Ability配置了“process”标签,则该Ability就运行在这个进程中。 该标签仅适用于智慧屏、智能穿戴、车机。 | 字符串 | 可缺省,缺省为应用的软件包名。 |
directLaunch | 表示应用是否支持在设备未解锁状态直接启动。如果配置为“true”,则表示应用支持在设备未解锁状态下启动。使用场景举例:应用支持在设备未解锁情况下接听来电。 该标签仅适用于智慧屏、智能穿戴、车机。 | 布尔类型 | 可缺省,缺省为“false”。 |
supportBackup | 表示应用是否支持备份和恢复。如果配置为“false”,则不支持为该应用执行备份或恢复操作。 该标签仅适用于智慧屏、智能穿戴、车机。 | 布尔类型 | 可缺省,缺省为“false”。 |
compressNativeLibs | 表示libs库是否以压缩存储的方式打包到HAP包。如果配置为“false”,则libs库以不压缩的方式存储,HAP包在安装时无需解压libs,运行时会直接从HAP内加载libs库。 该标签仅适用于智慧屏、智能穿戴、车机。 | 布尔类型 | 可缺省,缺省为“true”。 |
表示网络安全性配置。该标签允许应用通过配置文件的安全声明来自定义其网络安全,无需修改应用代码。 | 对象 | 可缺省,缺省为空。 |
属性名称 | 含义 | 数据类型 | 是否可缺省 |
---|---|---|---|
usesCleartext | 表示是否允许应用使用明文网络流量(例如,明文HTTP)。
| 布尔类型 | 可缺省,缺省为“false”。 |
表示应用的网络安全配置信息。 | 对象 | 可缺省,缺省为空。 |
属性名称 | 子属性名称 | 含义 | 数据类型 | 是否可缺省 |
---|---|---|---|---|
domainSettings | - | 表示自定义的网域范围的安全配置,支持多层嵌套,即一个domainSettings对象中允许嵌套更小网域范围的domainSettings对象。 | 对象 | 可缺省,缺省为空。 |
cleartextPermitted | 表示自定义的网域范围内是否允许明文流量传输。当usesCleartext和securityConfig同时存在时,自定义网域是否允许明文流量传输以cleartextPermitted的取值为准。
| 布尔类型 | 否 | |
domains | 表示域名配置信息,包含两个参数:subDomains和name。
| 对象数组 | 否 |
deviceConfig示例:
"deviceConfig": {
"default": {
"process": "com.huawei.hiworld.example",
"directLaunch": false,
"supportBackup": false,
"network": {
"usesCleartext": true,
"securityConfig": {
"domainSettings": {
"cleartextPermitted": true,
"domains": [
{
"subDomains": true,
"name": "example.ohos.com"
}
]
}
}
}
}
}
module对象的内部结构
module对象包含HAP包的配置信息,内部结构说明参见表7。
属性名称 | 含义 | 数据类型 | 是否可缺省 |
---|---|---|---|
package | 表示HAP的包结构名称,在应用内应保证唯一性。采用反向域名格式(建议与HAP的工程目录保持一致)。字符串长度不超过127字节。 该标签仅适用于智慧屏、智能穿戴、车机。 | 字符串 | 否 |
name | 表示HAP的类名。采用反向域名方式表示,前缀需要与同级的package标签指定的包名一致,也可采用“.”开头的命名方式。字符串长度不超过255字节。 该标签仅适用于智慧屏、智能穿戴、车机。 | 字符串 | 否 |
description | 表示HAP的描述信息。字符串长度不超过255字节。如果字符串超出长度或者需要支持多语言,可以采用资源索引的方式添加描述内容。 该标签仅适用于智慧屏、智能穿戴、车机。 | 字符串 | 可缺省,缺省值为空。 |
supportedModes | 表示应用支持的运行模式。当前只定义了驾驶模式(drive)。 该标签仅适用于车机。 | 字符串数组 | 可缺省,缺省值为空。 |
deviceType | 表示允许Ability运行的设备类型。系统预定义的设备类型包括:tv(智慧屏)、car(车机)、wearable(智能穿戴)、liteWearable(轻量级智能穿戴)等。 | 字符串数组 | 否 |
表示HAP发布的具体描述。 该标签仅适用于智慧屏、智能穿戴、车机。 | 对象 | 否 | |
表示当前模块内的所有Ability。采用对象数组格式,其中每个元素表示一个Ability对象。 | 对象数组 | 可缺省,缺省值为空。 | |
表示基于JS UI框架开发的JS模块集合,其中的每个元素代表一个JS模块的信息。 | 对象 | 可缺省,缺省值为空。 | |
表示应用的快捷方式信息。采用对象数组格式,其中的每个元素表示一个快捷方式对象。 | 对象数组 | 可缺省,缺省值为空。 | |
表示应用定义的权限。应用调用者必须申请这些权限,才能正常调用该应用。 | 对象数组 | 可缺省,缺省值为空。 | |
表示应用运行时向系统申请的权限。 | 对象数组 | 可缺省,缺省值为空。 |
module示例:
"module": {
"package": "com.example.myapplication.entry",
"name": ".MyOHOSAbilityPackage",
"description": "$string:description_application",
"supportedModes": [
"drive"
],
"deviceType": [
"car"
],
"distro": {
"deliveryWithInstall": true,
"moduleName": "ohos_entry",
"moduleType": "entry"
},
"abilities": [
...
],
"shortcuts": [
...
],
"js": [
...
],
"reqPermissions": [
...
],
"defPermissions": [
...
]
}
属性名称 | 含义 | 数据类型 | 是否可缺省 |
---|---|---|---|
deliveryWithInstall | 表示当前HAP是否支持随应用安装。
| 布尔类型 | 否 |
moduleName | 表示当前HAP的名称。 | 字符串 | 否 |
moduleType | 字符串 | 否 |
distro示例:
"distro": {
"deliveryWithInstall": true,
"moduleName": "ohos_entry",
"moduleType": "entry"
}
属性名称 | 含义 | 数据类型 | 是否可缺省 |
---|---|---|---|
name | 表示Ability名称。取值可采用反向域名方式表示,由包名和类名组成,如“com.example.myapplication.MainAbility”;也可采用“.”开头的类名方式表示,如“.MainAbility”。 该标签仅适用于智慧屏、智能穿戴、车机。 | 字符串 | 否 |
description | 表示对Ability的描述。取值可以是描述性内容,也可以是对描述性内容的资源索引,以支持多语言。 | 字符串 | 可缺省,缺省值为空。 |
icon | 表示Ability图标资源文件的索引。取值示例:$media:ability_icon。 如果在该Ability的“skills”属性中,“actions”的取值包含 “action.system.home”,“entities”取值中包含“entity.system.home”,则该Ability的icon将同时作为应用的icon。如果存在多个符合条件的Ability,则取位置靠前的Ability的icon作为应用的icon。 | 字符串 | 可缺省,缺省值为空。 |
label | 表示Ability对用户显示的名称。取值可以是Ability名称,也可以是对该名称的资源索引,以支持多语言。 如果在该Ability的“skills”属性中,“actions”的取值包含 “action.system.home”,“entities”取值中包含“entity.system.home”,则该Ability的label将同时作为应用的label。如果存在多个符合条件的Ability,则取位置靠前的Ability的label作为应用的label。 | 字符串 | 可缺省,缺省值为空。 |
uri | 表示Ability的统一资源标识符。格式为[scheme:][//authority][path][?query][#fragment]。 | 字符串 | 可缺省,对于data类型的Ability不可缺省。 |
launchType | 表示Ability的启动模式,支持“standard”和“singleton”两种模式:
该标签仅适用于智慧屏、智能穿戴、车机。 | 字符串 | 可缺省,缺省值为“standard”。 |
visible | 表示Ability是否可以被其他应用调用。
| 布尔类型 | 可缺省,缺省值为“false”。 |
permissions | 表示其他应用的Ability调用此Ability时需要申请的权限。通常采用反向域名格式,取值可以是系统预定义的权限,也可以是开发者自定义的权限。如果是自定义权限,取值必须与“defPermissions”标签中定义的某个权限的“name”标签值一致。 | 字符串数组 | 可缺省,缺省值为空。 |
表示Ability能够接收的Intent的特征。 | 对象数组 | 可缺省,缺省值为空。 | |
deviceCapability | 表示Ability运行时要求设备具有的能力,采用字符串数组的格式表示。 | 字符串数组 | 可缺省,缺省值为空。 |
type | 表示Ability的类型。取值范围如下:
| 字符串 | 否 |
formEnabled | 表示FA类型的Ability是否提供卡片(form)能力。该标签仅适用于page类型的Ability。
| 布尔类型 | 可缺省,缺省值为“false”。 |
表示AbilityForm的属性。该标签仅当“formEnabled”为“true”时,才能生效。 | 对象 | 可缺省,缺省值为空。 | |
orientation | 表示该Ability的显示模式。该标签仅适用于page类型的Ability。取值范围如下:
| 字符串 | 可缺省,缺省值为“unspecified”。 |
backgroundModes | 表示后台服务的类型,可以为一个服务配置多个后台服务类型。该标签仅适用于service类型的Ability。取值范围如下:
| 字符串数组 | 可缺省,缺省值为空。 |
readPermission | 表示读取Ability的数据所需的权限。该标签仅适用于data类型的Ability。取值为长度不超过255字节的字符串。 该标签仅适用于智慧屏、智能穿戴、车机。 | 字符串 | 可缺省,缺省为空。 |
writePermission | 表示向Ability写数据所需的权限。该标签仅适用于data类型的Ability。取值为长度不超过255字节的字符串。 该标签仅适用于智慧屏、智能穿戴、车机。 | 字符串 | 可缺省,缺省为空。 |
directLaunch | 表示Ability是否支持在设备未解锁状态直接启动。如果配置为“true”,则表示Ability支持在设备未解锁状态下启动。 如果“deviceConfig”和“abilities”中同时配置了“directLaunch”,则采用Ability对应的取值;如果同时未配置,则采用系统默认值。 | 布尔值 | 可缺省,缺省为“false”。 |
configChanges | 表示Ability关注的系统配置集合。当已关注的配置发生变更后,Ability会收到onConfigurationUpdated回调。取值范围:
| 字符串数组 | 可缺省,缺省为空。 |
mission | 表示Ability指定的任务栈。该标签仅适用于page类型的Ability。默认情况下应用中所有Ability同属一个任务栈。 该标签仅适用于智慧屏、智能穿戴、车机。 | 字符串 | 可缺省,缺省为应用的包名。 |
targetAbility | 表示当前Ability重用的目标Ability。该标签仅适用于page类型的Ability。如果配置了targetAbility属性,则当前Ability(即别名Ability)的属性中仅“name”、“icon”、“label”、“visible”、“permissions”、“skills”生效,其它属性均沿用targetAbility中的属性值。目标Ability必须与别名Ability在同一应用中,且在配置文件中目标Ability必须在别名之前进行声明。 该标签仅适用于智慧屏、智能穿戴、车机。 | 字符串 | 可缺省,缺省值为空。表示当前Ability不是一个别名Ability。 |
multiUserShared | 表示Ability是否支持多用户状态进行共享,该标签仅适用于data类型的Ability。 配置为“true”时,表示在多用户下只有一份存储数据。需要注意的是,该属性会使visible属性失效。 该标签仅适用于智慧屏、智能穿戴、车机。 | 布尔类型 | 可缺省,缺省值为“false”。 |
supportPipMode | 表示Ability是否支持用户进入PIP模式(用于在在页面最上层悬浮小窗口,俗称“画中画”,常见于视频播放等场景)。该标签仅适用于page类型的Ability。 该标签仅适用于智慧屏、智能穿戴、车机。 | 布尔类型 | 可缺省,缺省值为“false”。 |
abilities示例:
"abilities": [
{
"name": ".MainAbility",
"description": "himusic main ability",
"icon": "$media:ic_launcher",
"label": "HiMusic",
"launchType": "standard",
"orientation": "unspecified",
"permissions": [
],
"visible": true,
"skills": [
{
"actions": [
"action.system.home"
],
"entities": [
"entity.system.home"
]
}
],
"directLaunch": false,
"configChanges": [
"locale",
"layout",
"fontSize",
"orientation"
],
"type": "page",
"formEnabled": false
},
{
"name": ".PlayService",
"description": "himusic play ability",
"icon": "$media:ic_launcher",
"label": "HiMusic",
"launchType": "standard",
"orientation": "unspecified",
"visible": false,
"skills": [
{
"actions": [
"action.play.music",
"action.stop.music"
],
"entities": [
"entity.audio"
]
}
],
"type": "service",
"backgroundModes": [
"audioPlayback"
]
},
{
"name": ".UserADataAbility",
"type": "data",
"uri": "dataability://com.huawei.hiworld.himusic.UserADataAbility",
"visible": true
}
]
属性名称 | 子属性名称 | 含义 | 数据类型 | 是否可缺省 |
---|---|---|---|---|
actions | - | 表示能够接收的Intent的action值,可以包含一个或多个action。 取值通常为系统预定义的action值,详见《API参考》中的ohos.aafwk.content.Intent类。 | 字符串数组 | 可缺省,缺省值为空。 |
entities | - | 表示能够接收的Intent的Ability的类别(如视频、桌面应用等),可以包含一个或多个entity。 取值通常为系统预定义的类别,详见《API参考》中的ohos.aafwk.content.Intent类,也可以自定义。 | 字符串数组 | 可缺省,缺省值为空。 |
uris | - | 表示能够接收的Intent的uri,可以包含一个或者多个uri。 | 对象数组 | 可缺省,缺省值为空。 |
scheme | 表示uri的scheme值。 | 字符串 | 不可缺省。 | |
host | 表示uri的host值。 | 字符串 | 可缺省,缺省值为空。 | |
port | 表示uri的port值。 | 字符串 | 可缺省,缺省值为空。 | |
path | 表示uri的path值。 | 字符串 | 可缺省,缺省值为空。 | |
type | 表示uri的type值。 | 字符串 | 可缺省,缺省值为空。 |
skills示例:
"skills": [
{
"actions": [
"action.system.home"
],
"entities": [
"entity.system.home"
],
"uris": [
{
"scheme": "http",
"host": "www.xxx.com",
"port": "8080",
"path": "query/student/name",
"type": "text"
}
]
}
]
属性名称 | 含义 | 数据类型 | 是否可缺省 |
---|---|---|---|
formEntity | 表示AbilityForm支持的显示方式,当前支持的位置包括:
| 字符串数组 | 可缺省,缺省值为空。 |
defaultHeight | 表示AbilityForm的默认高度,单位:像素。Form使用方应当根据该值为Form申请相应高度的容器布局。 | 数值 | 可缺省,缺省值为“0”。 |
defaultWidth | 表示AbilityForm的默认宽度,单位:像素。Form使用方应当根据该值为Form申请相应宽度的容器布局。 | 数值 | 可缺省,缺省值为“0”。 |
form示例:
"form": {
"formEntity": [
"homeScreen",
"searchbox"
],
"defaultHeight": 100,
"defaultWidth": 200
}
属性名称 | 子属性名称 | 含义 | 数据类型 | 是否可缺省 |
---|---|---|---|---|
name | - | 表示JS Module的名字。该标签不可缺省,默认值为default。 | 字符串 | 否 |
pages | - | 表示JS Module的页面用于列举JS Module中每个页面的路由信息[页面路径+页面名称]。该标签不可缺省,取值为数组,数组第一个元素代表JS FA首页。 | 数组 | 否 |
window | - | 用于定义与显示窗口相关的配置。 该标签仅适用于智慧屏、智能穿戴、车机。 | 对象 | 可缺省。 |
designWidth | 表示页面设计基准宽度。以此为基准,根据实际设备宽度来缩放元素大小。 | 数值 | 可缺省,缺省值为750px。 | |
autoDesignWidth | 表示页面设计基准宽度是否自动计算。当配置为true时,designWidth将会被忽略,设计基准宽度由设备宽度与屏幕密度计算得出。 | 布尔类型 | 可缺省,缺省值为“false”。 |
js示例:
"js": [
{
"name": "default",
"pages": [
"pages/index/index",
"pages/detail/detail"
],
"window": {
"designWidth": 750,
"autoDesignWidth": false
}
}
]
属性名称 | 子属性名称 | 含义 | 数据类型 | 是否可缺省 |
---|---|---|---|---|
shortcutId | - | 表示快捷方式的ID。字符串的最大长度为63字节。 | 字符串 | 否 |
label | - | 表示快捷方式的标签信息,即快捷方式对外显示的文字描述信息。取值可以是描述性内容,也可以是标识label的资源索引。字符串最大长度为63字节。 | 字符串 | 可缺省,缺省为空。 |
intents | - | 表示快捷方式内定义的目标intent信息集合,每个intent可配置两个子标签,targetClass, targetBundle。 | - | 可缺省,缺省为空。 |
targetClass | 表示快捷方式目标类名。 | 字符串 | 可缺省,缺省值为空。 | |
targetBundle | 表示快捷方式目标Ability所在应用的包名。 | 字符串 | 可缺省,缺省值为空。 |
示例:
"js": [
{
"name": "default",
"pages": [
"pages/index/index",
"pages/detail/detail"
],
"window": {
"designWidth": 750,
"autoDesignWidth": false
}
}
]
3、配置文件示例
以JSON文件为config.json的一个简单示例,该示例的应用声明为三个Ability。
{
"app": {
"bundleName": "com.huawei.hiworld.himusic",
"vendor": "huawei",
"version": {
"code": 2,
"name": "2.0"
},
"apiVersion": {
"compatible": 3,
"target": 3
}
},
"deviceConfig": {
"default": {
}
},
"module": {
"package": "com.huawei.hiworld.himusic.entry",
"name": ".MainApplication",
"supportedModes": [
"drive"
],
"distro": {
"moduleType": "entry",
"deliveryWithInstall": true,
"moduleName": "hap-car"
},
"deviceType": [
"car"
],
"abilities": [
{
"name": ".MainAbility",
"description": "himusic main ability",
"icon": "$media:ic_launcher",
"label": "HiMusic",
"launchType": "standard",
"orientation": "unspecified",
"visible": true,
"skills": [
{
"actions": [
"action.system.home"
],
"entities": [
"entity.system.home"
]
}
],
"type": "page",
"formEnabled": false
},
{
"name": ".PlayService",
"description": "himusic play ability",
"icon": "$media:ic_launcher",
"label": "HiMusic",
"launchType": "standard",
"orientation": "unspecified",
"visible": false,
"skills": [
{
"actions": [
"action.play.music",
"action.stop.music"
],
"entities": [
"entity.audio"
]
}
],
"type": "service",
"backgroundModes": [
"audioPlayback"
]
},
{
"name": ".UserADataAbility",
"type": "data",
"uri": "dataability://com.huawei.hiworld.himusic.UserADataAbility",
"visible": true
}
],
"reqPermissions": [
{
"name": "ohos.permission.DISTRIBUTED_DATASYNC",
"reason": "",
"usedScene": {
"ability": [
"com.huawei.hiworld.himusic.entry.MainAbility",
"com.huawei.hiworld.himusic.entry.PlayService"
],
"when": "inuse"
}
}
]
}
}
4、资源文件的分类
resources目录
应用的资源文件(字符串、图片、音频等)统一存放于resources目录下,便于开发者使用和维护。resources目录包括两大类目录,一类为base目录与限定词目录,另一类为rawfile目录,详见表1。
资源目录示例:
resources
|---base // 默认存在的目录
| |---element
| | |---string.json
| |---media
| | |---icon.png
|---en_GB-vertical-car-mdpi // 限定词目录示例,需要开发者自行创建
| |---element
| | |---string.json
| |---media
| | |---icon.png
|---rawfile // 默认存在的目录
分类 | base目录与限定词目录 | rawfile目录 |
---|---|---|
组织形式 | 按照两级目录形式来组织,目录命名必须符合规范,以便根据设备状态去匹配相应目录下的资源文件。 一级子目录为base目录和限定词目录。
二级子目录为资源目录,用于存放字符串、颜色、布尔值等基础元素,以及媒体、动画、布局等资源文件,具体要求参见资源组目录。 | 支持创建多层子目录,目录名称可以自定义,文件夹内可以自由放置各类资源文件。 rawfile目录的文件不会根据设备状态去匹配不同的资源。 |
编译方式 | 目录中的资源文件会被编译成二进制文件,并赋予资源文件ID。 | 目录中的资源文件会被直接打包进应用,不经过编译,也不会被赋予资源文件ID。 |
引用方式 | 通过指定资源类型(type)和资源名称(name)来引用,详见资源文件的引用方法。 | 通过指定文件路径和文件名来引用,详见资源文件的引用方法。 |
限定词目录
限定词目录可以由一个或多个表征应用场景或设备特征的限定词组合而成,包括语言、文字、国家或地区、横竖屏、设备类型和屏幕密度等六个维度,限定词之间通过下划线(_)或者中划线(-)连接。开发者在创建限定词目录时,需要掌握限定词目录的命名要求以及与限定词目录与设备状态的匹配规则。
限定词目录的命名要求
- 限定词的组合顺序:语言_文字_国家或地区-横竖屏-设备类型-屏幕密度。开发者可以根据应用的使用场景和设备特征,选择其中的一类或几类限定词组成目录名称。
- 限定词的连接方式:语言、文字、国家或地区之间采用下划线(_)连接,除此之外的其他限定词之间均采用中划线(-)连接。例如:zh_Hant_CN、zh_CN-car-ldpi。
- 限定词的取值范围:每类限定词的取值必须符合表2中的条件,否则,将无法匹配目录中的资源文件。
表2 限定词取值要求 限定词类型
含义与取值说明
语言
表示设备使用的语言类型,由2个小写字母组成。例如:zh表示中文,en表示英语。
详细取值范围,参见ISO 639-1(ISO制定的语言编码标准)。
文字
表示设备使用的文字类型,由1个大写字母(首字母)和3个小写字母组成。例如:Hans表示简体中文,Hant表示繁体中文。
详细取值范围,参见ISO 15924(ISO制定的文字编码标准)。
国家或地区
表示用户所在的国家或地区,由2~3个大写字母或者3个数字组成。例如:CN表示中国,GB表示英国。
详细取值范围,参见ISO 3166-1(ISO制定的国家和地区编码标准)。
横竖屏
表示设备的屏幕方向,取值如下:
- vertical:竖屏
- horizontal:横屏
设备类型
表示设备的类型,取值如下:
- car:车机
- tv:智慧屏
- wearable:智能穿戴
屏幕密度
表示设备的屏幕密度(单位为dpi),取值如下:
- sdpi:表示小规模的屏幕密度(Small-scale Dots Per Inch),适用于dpi取值为(0, 120]的设备。
- mdpi:表示中规模的屏幕密度(Medium-scale Dots Per Inch),适用于dpi取值为(120, 160]的设备。
- ldpi:表示大规模的屏幕密度(Large-scale Dots Per Inch),适用于dpi取值为(160, 240]的设备。
- xldpi:表示特大规模的屏幕密度(Extra Large-scale Dots Per Inch),适用于dpi取值为(240, 320]的设备。
- xxldpi:表示超大规模的屏幕密度(Extra Extra Large-scale Dots Per Inch),适用于dpi取值为(320, 480]的设备。
- xxxldpi:表示超特大规模的屏幕密度(Extra Extra Extra Large-scale Dots Per Inch),适用于dpi取值为(480, 640]的设备。
限定词目录与设备状态的匹配规则
- 在为设备匹配对应的资源文件时,限定词目录匹配的优先级从高到低依次为:区域(语言_文字_国家或地区)> 横竖屏 > 设备类型 > 屏幕密度。
- 如果限定词目录中包含语言、文字、横竖屏、设备类型限定词,则对应限定词的取值必须与当前的设备状态完全一致,该目录才能够参与设备的资源匹配。例如,限定词目录“zh_CN-car-ldpi”不能参与“en_US”设备的资源匹配。
资源组目录
base目录与限定词目录下面可以创建资源组目录(包括element、media、animation、layout、graphic、profile),用于存放特定类型的资源文件,详见表3。
资源组目录 | 目录说明 | 资源文件 |
---|---|---|
element | 表示元素资源,以下每一类数据都采用相应的JSON文件来表征。
| element目录中的文件名称建议与下面的文件名保持一致。每个文件中只能包含同一类型的数据。
|
media | 表示媒体资源,包括图片、音频、视频等非文本格式的文件。 | 文件名可自定义,例如:icon.png。 |
animation | 表示动画资源,采用XML文件格式。 | 文件名可自定义,例如:zoom_in.xml。 |
layout | 表示布局资源,采用XML文件格式。 | 文件名可自定义,例如:home_layout.xml。 |
graphic | 表示可绘制资源,采用XML文件格式。 | 文件名可自定义,例如:notifications_dark.xml。 |
profile | 表示其他类型文件,以原始文件形式保存。 | 文件名可自定义。 |
5、资源文件的使用
资源文件的引用方法
base目录与限定词目录中的资源文件:通过指定资源类型(type)和资源名称(name)来引用。
- Java文件引用资源文件的格式:ResourceTable.type_name。特别地,如果引用的是系统资源,则采用:ohos.global.systemres.ResourceTable.type_name。
- 示例一:在Java文件中,引用string.json文件中类型为“String”、名称为“app_name”的资源。
ohos.global.resource.ResourceManager resManager = getAbilityContext().getResourceManager();
String result = resManager.getElement(ResourceTable.String_app_name).getString();
示例二:在Java文件中,引用color.json文件中类型为“Color”、名称为“red”的资源。
ohos.global.resource.ResourceManager resManager = getAbilityContext().getResourceManager();
int color = resManager.getElement(ResourceTable.Color_red).getColor();
XML文件引用资源文件的格式:$type:name。特别地,如果引用的是系统资源,则采用:$ohos:type:name。
在XML文件中,引用string.json文件中类型为“String”、名称为“app_name”的资源,示例如下:
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:width="match_parent"
ohos:height="match_parent"
ohos:orientation="vertical">
<Text ohos:text="$string:app_name"/>
</DirectionalLayout>
rawfile目录中的资源文件:通过指定文件路径和文件名称来引用。
在Java文件中,引用一个路径为“resources/rawfile/”、名称为“example.js”的资源文件,示例如下:
ohos.global.resource.ResourceManager resManager = getAbilityContext().getResourceManager();
ohos.global.resource.RawFileEntry rawFileEntry = resManager.getRawFileEntry("resources/rawfile/example.js");
系统资源文件
目前支持的系统资源文件详见表1。
系统资源名称 | 含义 | 类型 |
---|---|---|
ic_app | 表示HarmonyOS应用的默认图标。 | 媒体 |
request_location_reminder_title | 表示“请求使用设备定位功能”的提示标题。 | 字符串 |
request_location_reminder_content | 表示“请求使用设备定位功能”的提示内容,即:请在下拉快捷栏打开"位置信息"开关。 | 字符串 |
boolean.json示例
{
"boolean":[
{
"name":"boolean_1",
"value":true
},
{
"name":"boolean_ref",
"value":"$boolean:boolean_1"
}
]
}
color.json示例
{
"color":[
{
"name":"red",
"value":"#ff0000"
},
{
"name":"red_ref",
"value":"$color:red"
}
]
}
float.json示例
{
"float":[
{
"name":"float_1",
"value":"30.6"
},
{
"name":"float_ref",
"value":"$float:float_1"
},
{
"name":"float_px",
"value":"100px"
}
]
}
intarray.json示例
{
"intarray":[
{
"name":"intarray_1",
"value":[
100,
200,
"$integer:integer_1"
]
}
]
}
integer.json示例
{
"integer":[
{
"name":"integer_1",
"value":100
},
{
"name":"integer_ref",
"value":"$integer:integer_1"
}
]
}
pattern.json示例
{
"pattern":[
{
"name":"base",
"value":[
{
"name":"width",
"value":"100vp"
},
{
"name":"height",
"value":"100vp"
},
{
"name":"size",
"value":"25px"
}
]
},
{
"name":"child",
"parent":"base",
"value":[
{
"name":"noTitile",
"value":"Yes"
}
]
}
]
}
plural.json示例
{
"plural":[
{
"name":"eat_apple",
"value":[
{
"quantity":"one",
"value":"%d apple"
},
{
"quantity":"other",
"value":"%d apples"
}
]
}
]
}
strarray.json示例
{
"strarray":[
{
"name":"size",
"value":[
{
"value":"small"
},
{
"value":"$string:hello"
},
{
"value":"large"
},
{
"value":"extra large"
}
]
}
]
}
string.json示例
{
"string":[
{
"name":"hello",
"value":"hello base"
},
{
"name":"app_name",
"value":"my application"
},
{
"name":"app_name_ref",
"value":"$string:app_name"
},
{
"name":"app_sys_ref",
"value":"$ohos:string:request_location_reminder_title"
}
]
}