文章目录
- 背景
- 目标
- 一、APP
-
- 1.1 APP包组成
- 1.2 APP和HAP结构
- 二、Ability
-
- 2.1 Ability
- 2.2 pack.info
- 三、libs库文件
-
- 3.1 HAR
- 四、resources资源文件
-
- 4.1 resources目录
-
- 限定词目录
- base目录
- 4.2 系统资源文件
- 五、config配置文件
-
- 包含元素
-
- “config.json”
- 1. app对象
- 2. deviceConfig对象
-
- phone对象
- 3. module对象
-
- 内部结构
- 3.1 distro对象
- 3.2 js对象
- 3.3 abilities对象
-
- skills对象
- forms对象
- 配置文件的合并
-
- 合并规则
- 六、HAR
-
- 6.1 在工程中添加Module
- 6.2 新建空Module
- 6.3 创建HarmonyOS库
-
-
- 创建库Module
- 将库模块编译为HAR
- 发布Har包到Maven仓
- 为应用模块添加依赖
-
- 本章总结
背景
- 移动应用前端界面的定制需要引用很多定制化的图片资源,包括系统图标等;
- 应用还需要考虑国际化和本地化,这也需要应用中定义的资源限定词文件;
- 此 外,第三方库也是增强应用能力的有力工具。这些内容需要涉及到资源和库文件如何存储,以及在应用中如何引用这些资源
- 深入理解HarmonyOS
APP和HAP的组成及工作原理
- 掌握对应用
关键资源的配置和访问方法
- HarmonyOs的应用软件包以
APP Pack
( Application Package )形式发布,它是由一个或多个HAP
( HarmonyOS Ability Package )以及描述每个HAP属性的pack.info
组成。HAP
是Ability的部署包,HarmonyOS应用代码围绕Ability组件
展开。
- 一个HAP是由代码、资源、第三方库及应用配置文件组成的模块包,可分为entry和feature两种模块类型。
entry
: 应用的主模块。一个APP中,对于同一设备类型必须有且只有一个entry类型的HAP,可独立安装运行;feature
: 应用的动态特性模块。一个APP可以包含一个或多个feature类型的HAP,也可以不含。只有包含Ability的HAP才能够独立运行。
- HAP是由一个或多个Ability组成。
文章图片
二、Ability 2.1 Ability
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,以及应用所需权限等信息。
- 描述应用软件包中每个HAP的属性,由IDE编译生成,应用市场根据该文件进行拆包和HAP的分类存储。HAP的具体属性包括:
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资源文件 4.1 resources目录
- 应用的资源文件(字符串、图片、音频等)统一存放于
resources
目录下,便于开发者使用和维护。resources目录包括base
目录与限定词
目录。
- 目录结构
文章图片
限定词目录
限定词目录
可以由一个或多个表征应用场景或设备特征的限定词组合而成,包括语言、文字、国家或地区、横竖屏、设备类型和屏幕密度等六个维度,限定词之间通过下划线(_)或者中划线( -)连接。开发者在创建限定词目录时,需要掌握限定词目录的命名要求
以及与限定词目录与设备状态的匹配规则
。
文章图片
- 类型
文章图片
文章图片
base目录
- 在应用开发的hml和js文件中使用
$r
的语法,可以对Js模块内的resources目录下的json资源
进行格式化,获取相应的资源内容。
- res-defaults.json文件内容为
{strings: { hello: 'hello world')
- 对于js页面对象的属性
$r
,可以使用string类型的key参数,返回值为string类型,如:
this.$r('strings.hello')
- 目前支持的系统资源文件
文章图片
五、config配置文件
- 应用的每个HAP的根目录下都存在一个“
config.json
”配置文件,文件内容主要涵盖以下三个方面:- 应用的
全局配置信息
,包含应用的包名、生产厂商、版本号等基本信息; - 应用在
具体设备上的配置信息
,包含应用的备份恢复、网络安全等能力; HAP包的配置信息
,包含每个Ability必须定义的基本属性(如包名、类名、类型以及Ability提供的能力),以及应用访问系统或其他应用受保护部分所需的权限等。
- 应用的
“config.json”
的内部结构;app对象
的内部结构;deviceConfig对象
的内部结构;module对象
的内部结构;
- HAP与HAR的配置
文件的合并
。
- 应用的配置文件“config.json”中由
“app”
.“deviceConfig”
和“module”
三个部分组成,缺一不可。
文章图片
1. app对象
- app对象包含应用的
全局配置信息
"app": {
"bundleName":"com.huawei.hiworld.example",
"vendor": "huawei",
"version":{
"code": 2,
"name": "2.0"
}
}
文章图片
2. deviceConfig对象
- deviceConfig包含在
具体设备上的应用配置信息
,可以包含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"
}
]
}
}
}
}
}
文章图片
phone对象
文章图片
3. module对象
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",
...
}
}
文章图片
内部结构
文章图片
3.1 distro对象
"distro": {
"deliveryWithInstall":true,
"moduleName":"ohos_entry",
"moduleType":"entry",
"installationFree":true
}
文章图片
3.2 js对象
"js": [
{
"name": "default",
"pages": [
"pages/index/index",
"pages/detail/detail"],
"window": {
"designWidth": 750,
"autoDesignWidth":false
},
"type": "form"
}
]
文章图片
3.3 abilities对象
"abilities": [
{
"name": ".MainAbility",
"description": "himusic main ability",
"icon": "$media:ic_launcher",
"label": "HiMusic",
"launchType": "standard",
"orientation": "unspecified",
"permissions": [],
"visible": true,
"skills": [...],
"type": "page"
},
]
文章图片
- abilities对象的次要属性
文章图片
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/*"
}
]
}
]
文章图片
forms对象
"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"]
},
]
文章图片
配置文件的合并
- 如果应用模块中调用了HAR,在编译构建HAP时,需要将HAP的“config.json”文件与 一个或多个HAR的“config.json”文件,合并为一个“config.json”文件。在合并过程中, 不同文件的同一个标签的取值可能发生冲突,此时,需要通过配置mergeRule来解决冲 突
- HAP与HAR的“config.json”文件合并时,需要将HAR的配置信息
全部合并
到HAP的配 置文件。系统定义了详细的合并规则; HAP的优先级总是高于HAR
。当HAP依赖于多个HAR时,先加载的HAR的优先级高
于后 加载的HAR,按照HAR的加载顺序依次合并到HAP文件
Module
是HarmonyOS应用的基本功能单元,包含了源代码
、资源文件
、第三方库
及应用清单文件
,每一个Module都可以独立进行编译和运行。一个HarmonyOS应用通常会 包含一个或多个Module,因此,可以在工程中,创建多个Module,每个Module分为Ability
和Library
(HarmonyOS Library和Java Library)两种类型
- 在
一个APP
中,对于同一类型设备
有且只有一个Entry Module
,其余Module的类型均 为Feature。因此,在创建一个类型为Ability的Module时,遵循如下原则: - 若新增Module的设备类型为
已有设备
时,则Module的类型将自动设置为“Feature” 。 - 若新增Module的设备类型为
当前还没有创建Module
,则Module的类型将自动设置为 “Entry”
文章图片
6.3 创建HarmonyOS库
- 创建库模块
- 将库模块编译为HAR
- 发布Har包到Maven仓
- 为应用模块添加依赖
文章图片
将库模块编译为HAR
- 利用
Gradle
可以将HarmonyOS Library库模块
构建为HAR包
,以便在工程中引用HAR或 者将HAR包提供给其它开发者进行调用; - 构建HAR包的方法:在Gradle构建任务中,双击
debugHarmonyHa
r或releaseHarmonyHar
任务,构建Debug类型或Release类型的HAR。
文章图片
发布Har包到Maven仓
- 借助Gradle提供的
Maven-publish插件
,可以将Har包发布到本地或远程Maven仓,方 法如下:- 在工程根目录下,点击鼠标右键New > File,
创建一个以“.gradle”结尾的文件
,如 upload.gradle; - 在创建的upload.gradle文件中,
添加一定代码
; - 在Har模块的build.gradle中,
添加HAR发布脚本
。添加完成后,请点击Sync Now进行同步
。 - 同步完成后,会在Gradle任务中增加publishing的任务列表;
双击执行publishMavenPublicationToMavenRepository任务
,将HAR包发布到指定的Maven地 址
- 在工程根目录下,点击鼠标右键New > File,
- 在应用模块中调用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/' } }
-
- 本章主要介绍了HarmonyOS
APP和HAP包的组成
,通过对这些包主要成分的介绍,引出如何构建HAR库文件
,如何在项目中引用库文件
; - 接着分析了
重要成分资源文件
和配置文件
的内容和作用,以及如何对它们进行访问和配置
* `调用Maven仓中的HAR`:无论Har包是本地Maven仓还是远程Maven仓,均可以在工程的 build.gradle的`allprojects闭包`中,添加HAR所在的Maven仓地址。 ```
repositories {
maven {
url 'file://D:/01.localMaven/'
}
}
```# 本章总结 * 本章主要介绍了HarmonyOS `APP和HAP包的组成`,通过对这些包主要成分的介绍,引出`如何构建HAR库文件`,`如何在项目中引用库文件`;
* 接着分析了`重要成分资源文件`和`配置文件`的内容和作用,以及`如何对它们进行访问和配置`
推荐阅读
- Java|Java网络多线程
- java|安鸾渗透实战平台综合渗透——SQL注入进阶渗透流程
- Java高并发|Java多线程之常用并发容器的使用
- java|01.JAVA并发编程-线程的使用-基本概念
- Java系列——多线程实战|关于Java并发编程的总结和思考
- 并发|Java并发编程的总结和思考
- #|Java多线程那些事,对Java并发编程2w余字的总结,超详细(从入门到完全掌握)
- web并发|多线程并发、死锁