APP和HAP的组成及工作原理
关键资源的配置和访问方法
APP Pack
( Application Package )形式发布,它是由一个或多个HAP
( HarmonyOS Ability Package )以及描述每个HAP属性的pack.info
组成。
HAP
是Ability的部署包,HarmonyOS应用代码围绕Ability组件
展开。entry
: 应用的主模块。一个APP中,对于同一设备类型必须有且只有一个entry类型的HAP,可独立安装运行;feature
: 应用的动态特性模块。一个APP可以包含一个或多个feature类型的HAP,也可以不含。只有包含Ability的HAP才能够独立运行。Ability
是应用所具备的能力的抽象,一个应用可以包含一个或多个Ability。Ability分为两种类型:FA
( Feature Ability)和PA
( Particle Ability )。FA/PA是应用的基本组成单元,能够实现特定的业务功能。FA有UI界面,而PA无UI界面。libs
(库文件)是应用依赖的第三方代码(例如so、jar、bin、har等二进制文件),存放在libs目录。config.json
)包含应用中Ability的配置信息,用于声明应用的Ability,以及应用所需权限等信息。delivery-with-install
表示该HAP是否支持随应用安装。“true”表示支持随应用安装;“false”表示不支持随应用安装;name
: HAP文件名;module-type
︰模块类型,entry或feature;device-type:表示支持该HAP运行的设备类型。HAR
(HarmonyOS Ability Resources)可以提供构建应用所需的所有内容,包括源代码、资源文件和config.json文件。HAR不同于HAP,HAR不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。
应用的资源文件(字符串、图片、音频等)统一存放于resources
目录下,便于开发者使用和维护。resources目录包括base
目录与限定词
目录。
目录结构
限定词目录
可以由一个或多个表征应用场景或设备特征的限定词组合而成,包括语言、文字、国家或地区、横竖屏、设备类型和屏幕密度等六个维度,限定词之间通过下划线(_)或者中划线( -)连接。开发者在创建限定词目录时,需要掌握限定词目录的命名要求
以及与限定词目录与设备状态的匹配规则
。在应用开发的hml和js文件中使用$r
的语法,可以对Js模块内的resources目录下的json资源
进行格式化,获取相应的资源内容。
{strings: {
hello: 'hello world')
对于js页面对象的属性$r
,可以使用string类型的key参数,返回值为string类型,如:
this.$r('strings.hello')
config.json
”配置文件,文件内容主要涵盖以下三个方面:
全局配置信息
,包含应用的包名、生产厂商、版本号等基本信息;具体设备上的配置信息
,包含应用的备份恢复、网络安全等能力;HAP包的配置信息
,包含每个Ability必须定义的基本属性(如包名、类名、类型以及Ability提供的能力),以及应用访问系统或其他应用受保护部分所需的权限等。“config.json”
的内部结构;
app对象
的内部结构;deviceConfig对象
的内部结构;module对象
的内部结构;文件的合并
。“app”
.“deviceConfig”
和“module”
三个部分组成,缺一不可。全局配置信息
"app": {
"bundleName":"com.huawei.hiworld.example",
"vendor": "huawei",
"version":{
"code": 2,
"name": "2.0"
}
}
具体设备上的应用配置信息
,可以包含default、phone、tablet、tv、car、wearable、liteWearable和smartVision等属性。default标签内的配置是适用于所有设备通用。"deviceConfig": {
"default": {
"process": "com.huawei.hiworld.example",
"supportBackup": false,
"network": {
"cleartextTraffic": true,
"securityConfig": {
"domainSettings": {
"cleartextPermitted": true,
"domains": [
{
"subdomains": true,
"name": "example.ohos.com"
}
]
}
}
}
}
}
module对象包含HAP包的配置信息
"module": {
"mainAbility": "MainAbility",
"package": "com.example.myapplication.entry",
"name": ".MyOHOSAbilityPackage",
"description": "$string:description_application",
"supportedModes": ["drive"],
"deviceType": ["car"],
"distro": {
"deliveryWithlnstall": true,
"moduleName": "ohos_entry",
"moduleType": "entry",
...
}
}
"distro": {
"deliveryWithInstall":true,
"moduleName":"ohos_entry",
"moduleType":"entry",
"installationFree":true
}
"js": [
{
"name": "default",
"pages": [
"pages/index/index",
"pages/detail/detail"],
"window": {
"designWidth": 750,
"autoDesignWidth":false
},
"type": "form"
}
]
"abilities": [
{
"name": ".MainAbility",
"description": "himusic main ability",
"icon": "$media:ic_launcher",
"label": "HiMusic",
"launchType": "standard",
"orientation": "unspecified",
"permissions": [],
"visible": true,
"skills": [...],
"type": "page"
},
]
"skills": [
{
"actions": ["action.system.home"],
"entities": ["entity.system.home"],
"uris": [
{
"scheme": "http",
"host": "www.xxx.com",
"port": "8080",
"path": "query/student/name",
"type": "text/*"
}
]
}
]
"forms": [
{
"name": "Form_Js",
"description": "It's Js Form",
"type": "JS",
"jsComponentName": "card",
"colorMode": "auto",
"isDefault": true,
"updateEnabled": true,
"scheduledUpdateTime": "11:00",
"updateDuration": 1,
"defaultDimension": "2*2",
"supportDimensions": ["2*2","2*4","4*4"]
},
]
全部合并
到HAP的配 置文件。系统定义了详细的合并规则;HAP的优先级总是高于HAR
。当HAP依赖于多个HAR时,先加载的HAR的优先级高
于后 加载的HAR,按照HAR的加载顺序依次合并到HAP文件Module
是HarmonyOS应用的基本功能单元,包含了源代码
、资源文件
、第三方库
及应用清单文件
,每一个Module都可以独立进行编译和运行。一个HarmonyOS应用通常会 包含一个或多个Module,因此,可以在工程中,创建多个Module,每个Module分为 Ability
和Library
(HarmonyOS Library和Java Library)两种类型Module类型
一个APP
中,对于同一类型设备
有且只有一个Entry Module
,其余Module的类型均 为Feature。因此,在创建一个类型为Ability的Module时,遵循如下原则:已有设备
时,则Module的类型将自动设置为“Feature” 。当前还没有创建Module
,则Module的类型将自动设置为 “Entry”Gradle
可以将HarmonyOS Library库模块
构建为HAR包
,以便在工程中引用HAR或 者将HAR包提供给其它开发者进行调用;debugHarmonyHa
r或 releaseHarmonyHar
任务,构建Debug类型或Release类型的HAR。编译并输出库模块
Maven-publish插件
,可以将Har包发布到本地或远程Maven仓,方 法如下:
创建一个以“.gradle”结尾的文件
,如 upload.gradle;添加一定代码
;添加HAR发布脚本
。添加完成后,请点击Sync Now进行同步
。双击执行publishMavenPublicationToMavenRepository任务
,将HAR包发布到指定的Maven地 址在应用模块中调用HAR,常用的添加依赖
的方式包括如下两种:
调用同一个工程中的HAR
:HAR包和应用模块在同一个工程,打开应用模块的build.gradle文 件,在dependencies闭包
中,添加如下代码。添加完成后,请点击Sync Now同步工程。
dependencies {
implementation project(":mylibrary")
}
调用Maven仓中的HAR
:无论Har包是本地Maven仓还是远程Maven仓,均可以在工程的 build.gradle的allprojects闭包
中,添加HAR所在的Maven仓地址。
repositories {
maven {
url 'file://D:/01.localMaven/'
}
}
APP和HAP包的组成
,通过对这些包主要成分的介绍,引出如何构建HAR库文件
,如何在项目中引用库文件
;重要成分资源文件
和配置文件
的内容和作用,以及如何对它们进行访问和配置
* `调用Maven仓中的HAR`:无论Har包是本地Maven仓还是远程Maven仓,均可以在工程的 build.gradle的`allprojects闭包`中,添加HAR所在的Maven仓地址。
```
repositories {
maven {
url 'file://D:/01.localMaven/'
}
}
```
# 本章总结
* 本章主要介绍了HarmonyOS `APP和HAP包的组成`,通过对这些包主要成分的介绍,引出`如何构建HAR库文件`,`如何在项目中引用库文件`;
* 接着分析了`重要成分资源文件`和`配置文件`的内容和作用,以及`如何对它们进行访问和配置`