HarmonyOS(鸿蒙)——全面入门
选择 ability 模板,我们这里选择 Empty Ability(Java)
填写项目名称 Project Name,包名称 Package Name,项目存储路径 Save Location,设备类型 Device Type(我这里选择的是手机 Phone),最后点击 Finish!
项目创建完毕后将会看到如下工程
2.2 开启远程模拟器
harmonyOS 现在项目开发暂时只支持远程调试,因此我们需要通过登录华为账号(这个账号没有的可以先去实名认证一下,我的上篇文章有详细的介绍!),开启模拟器进行预览调试,每次调试的时间为一个小时,一小时之后会回收资源,如果有需要重启开启即可!
选择 Tools -> Device Manager,进入设备选择界面
点击 Login,会自动打开浏览器,进入登录页面
通过认证的账户密码进行登录
登录时弹出授信,我们点击允许即可!
接下来会看到如下页面,这样代表登录成功,但是并不意味着远程模拟器开启成功了!
此时回到 DevEco Studio 的控制台,看到如下输出则代表成功!如果输出的时 Login Fail,这个时候我们去浏览器清空 session,然后重新点击上面的 Login 进行再次登录即可!
登录成功后选择 P40,点击右边绿色的启动按钮!
此时 DevEco Studio 的右边会出现 P40 的远程模拟器,我们开发的代码将会在这个上面展示,手机最上面时每次调试的时间倒计时,时间到了重新开启远程模拟器即可!
2.3 运行项目
点击右上角的三角形直接运行项目,或者点击甲壳虫进入调试模式都可以,点击后项目会通过 Gradle 进行构建,需要等待一会儿。
此时远程模拟器展示项目输出——“你好,世界”,第一个项目运行成功!
输出内容的修改路径在 src->main->resources->zh->element->string.json
三、Ability&页面的初步认识
=================
3.1、简介
3.1.1 什么是页面
信息以页面信息组织,信息页面由语言来实现,在各个信息页面之间建立超文本链接以便浏览,这就是页面。页面一般包括:文本、图像、表格、超链接等基本元素。
?
3.1.2?HarmonyOS(鸿蒙)中的页面
当我们打开手机 App 之后看到的都是页面!
在 HarmonyOS 中,一个页面可以被当做一个 Ability,更准确的说是 Page Ability 中的 AbilitySlice(指应用的单个页面及其控制逻辑的总和),这里先简单介绍 Ability。
?
3.2、Ability
3.2.1 简介
Ability 是应用所具备能力的抽象(我感觉也可以理解为模板,模块),也是应用程序的重要组成部分。一个应用可以具备多种能力(即可以包含多个 Ability),HarmonyOS 支持应用以 Ability 为单位进行部署。
Ability 分为两种:
FA(Feature Ability)
PA(Particle Ability)
| Ability 类型 | 支持模板 | 描述 |
| --- | --- | --- |
| Feature Ability | Page Ability | Page 模板:用于提供与用户交互的能力。一个 Page 实例可以包含一组相关页面,每个页面用一个 AbilitySlice 实例表示。 |
| Particle Ability | Service Ability 和 Data Ability | Service 模板:用于提供后台运行任务的能力。
Data 模板:用于对外部提供统一的数据访问抽象。 |
3.2.2 Page Ability
Page Ability 是 Feature Ability 唯一支持的模板。
用于提供与用户的交互能力,其实就是页面的父级。一个 Page 可以由一个或多个 AbilitySlice 构成,AbilitySlice 是指应用的单个页面及其控制逻辑的总和。官方认为当一个 Page 由多个 AbilitySlice 共同构成时,这些 AbilitySlice 页面提供的业务能力应具有高度相关性。
HarmonyOS 支持不同 Page 之间的跳转,并可以指定跳转到目标 Page 中某个具体的 AbilitySlice。
?
3.2.3 Service Ability
Service Ability 是 Particle Ability 支持的模板之一。
用于后台运行任务(如执行音乐播放、文件下载等),但不提供用户交互界面。Service 可由其他应用或 Ability 启动,即使用户切换到其他应用,Service 仍将在后台继续运行。
Service 是单实例的。在一个设备上,相同的 Service 只会存在一个实例。如果多个 Ability 共用这个实例,只有当与 Service 绑定的所有 Ability 都退出后,Service 才能够退出。由于 Service 是在主线程里执行的,因此,如果在 Service 里面的操作时间过长,开发者必须在 Service 里创建新的线程来处理,防止造成主线程阻塞,应用程序无响应。
?
如下是 HarmonyOS 线程间通信开发概述官网地址:
3.2.4 Data Ability
Data Ability 是 Particle Ability 支持的模板之一。
用于应用管理其自身和其他应用存储数据的访问,并提供与其他应用共享数据的方法。Data 既可用于同设备不同应用的数据共享,也支持跨设备不同应用的数据共享。数据的存放形式多样,可以是数据库,也可以是磁盘上的文件。Data 对外提供对数据的增、删、改、查,以及打开文件等接口,这些接口的具体实现由开发者提供。
?
3.3、HarmonyOS 页面的设计
3.3.1 原子化服务与 HAP 简介
HarmonyOS 中的应用与传统 App 应用有一个很大的亮点,HarmonyOS 提供了一种面向未来的服务提供方式,原子化服务。
原子化服务可以免安装(无需显示安装,由系统后台按需主动安装非常方便),它支持运行在 1+8+N 设备上。
原子化服务与传统的 App 应用对比如下:
| 项目 | 原子化服务 | 传统 App 应用 |
| --- | --- | --- |
| 件包形态 | APP Pack(.app) | APP Pack(.app) |
| 分发平台 | 由原子化服务平台(Huawei Ability Gallery)管理和分发 | 由应用市场(AppGallery)管理和分发 |
| 安装后有无桌面 icon | 无桌面 icon,但可手动添加到桌面,显示形式为服务卡片 | 有桌面 icon |
| HAP 包免安装要求 | 所有HAP包(包括Entry HAP和Feature HAP)均需满足免安装要求 | 所有 HAP 包(包括 Entry HAP 和 Feature HAP)均为非免安装的 |
官网地址:
原子化服务由 HAP 包组成,HAP 是 Ability 的部署包,HarmonyOS 应用代码围绕 Ability 组件展开。一个 HAP 是由代码、资源、第三方库及应用配置文件组成的模块包,可分为 entry 和 feature 两种模块类型。
详细内容可以查看官网:
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/basic-fundamentals-0000000000041611
一个原子化服务可以有一个或者多个 HAP 组成,而一个 HAP 对应 1 个 FA 或者 1 个 PA,每个 FA 或 PA 均可独立运行,完成 1 个特定功能;1 个或多个功能(对应 FA 或 PA)完成 1 个特定的便捷服务。
?
所以 HarmonyOS 的 App 安装包的结构示意图如下:
3.3.2 可分可合思想
根据 3.1 中 HarmonyOS 的 App 安装包的结构可知,一个 HarmonyOS 安装包可以由任意需要的一个或者多个 HAP 组成,这里的组成是可以选择的,可以根据用户需求和硬件设备做合理的选择进行应用组合。
打个比方使用搭载 HarmonyOS 系统的电视和手机分别可以具有如下的一些功能:
?
HarmonyOS 电视机:
HarmonyOS 手机:
电视机没有短信和通话的功能,但是它拥有控制频道切换的功能,因此可以安装控制频道.HAP;而手机拥有短信和通话的功能,因此可以安装短信.HAP 和通过.HAP。两者都拥有游戏的功能,因此均可以安装游戏.HAP。因此 HarmonyOS 的 HAP 安装包,可以根据用户的实际需求或者硬件设施进行合理的安装,实现安装包的可分可合思想。
针对不同的功能,建议统一写入同一个 HAP 中,比如短信.HAP,这样可以减少用户使用某一个特定功能的时候,系统下载安装包的复杂度或者用户字段安装的复杂度。
3.3.3 HAP 中的 Ability
针对上面的游戏.HAP,比如说是男人就下一百层,我们会开发一个 Ability,它会存在很多子功能,比如登录、注册、游戏、装备、聊天、等等。这些不同的功能都可以整合到不同的 AbilitySlice 中,一个 AbilitySlice 对应一个页面。
游戏.HAP 的 Ability 与其 AbilitySlice 关系图如下:
登录、注册、游戏、装备、聊天、等等 AbilitySlice 统一加入一个 Ability 中,不同的 AbilitySlice 之间可以实现跳转,最终打包成一个可以运行的游戏.HAP
四、配置文件 Config.json 了解
===================
4.1、简介
4.1.1 结构
应用的每个 HAP 的根目录下都存在一个“config.json”配置文件。文件内容主要涵盖以下三个方面:
如下是一个简单的 HarmonyOS 应用程序创建后所看到的应用代码结构,entry -> src -> main -> config.json 文件。其中三个模块分别为 app、deviceConfig、module(我这里展示的三块是缩放后的内容。)
4.1.2 编辑视图
config.json 文件采用 JSON 文件格式,其每一项都包含都由
一个属性和值组成。其中属性值不分先后顺序,但是不能重复出现,必须唯一。值为 JSON 的基本数据类型。HarmonyOS 的 DevEco Studio 支持两种编辑 config.json 的方式,分别是代码编辑视图和可视化编辑视图。
代码编辑视图:
可视化编辑视图:
4.2、配置文件详细介绍
配置文件由 app、deviceConfig、module 三部分组成,三者均必须存在。以下会根据上面的 HarmonyOS 的基础 HelloWorld 程序分析一个最基础的 config.json 配置文件,如果需要十分详细的介绍,请直接去 HarmonyOS 的官网进行查阅,以下是直达的官网地址:
4.2.1 app
app 对象包含应用的全局配置信息,HarmonyOS 的基础 HelloWorld 程序的 config.json 配置文件中的 app 部分如下所示:
"app":?{
"bundleName":?"com.example.demo",
"vendor":?"example",
"version":?{
"code":?1000000,
"name":?"1.0.0"
}
}
| 属性名称 | 子属性名称 | 含义 | 数据类型 | 是否可缺省 |
| --- | --- | --- | --- | --- |
| bundleName | - | 表示应用的包名,用于标识应用的唯一性。 | 字符串 | 否 |
| vendor | - | 表示对应用开发厂商的描述。字符串长度不超过 255 字节。 | 字符串 | 可缺省,缺省值为空。 |
| version | - | 表示应用的版本信息。 | 对象 | 否 |
| | code | 表示应用的版本号,仅用于 HarmonyOS 管理该应用,不对应用的终端用户呈现。 | 数值 | 否 | 数值 | 否 |
| | name | 表示应用的版本号,用于向应用的终端用户呈现。小于 127 个字节。 | 字符串 | 否 |
4.2.2 deviceConfig
deviceConfig 包含在具体设备上的应用配置信息,可以包含 default、phone、tablet、tv、car、wearable、liteWearable 和 smartVision 等属性。default 标签内的配置是适用于所有设备通用,其他设备类型如果有特殊的需求,则需要在该设备类型的标签下进行配置。HarmonyOS 的基础 HelloWorld 程序的 config.json 配置文件中的 deviceConfig 部分如下所示:
"deviceConfig":?{}
4.2.3 module
module 对象包含 HAP 包的配置信息,包含每个 Ability 必须定义的基本属性(如包名、类名、类型以及 Ability 提供的能力),以及应用访问系统或其他应用受保护部分所需的权限等。HarmonyOS 的基础 HelloWorld 程序的 config.json 配置文件中的 module 部分如下所示:
"module":?{
"package":?"com.example.demo",
"name":?".MyApplication",
"mainAbility":?"com.example.demo.MainAbility",
"deviceType":?[
"phone"
],
"distro":?{
"deliveryWithInstall":?true,
"moduleName":?"entry",
"moduleType":?"entry",
"installationFree":?true
},
"abilities":?[
{
"skills":?[
{
"entities":?[
"entity.system.home"
],
"actions":?[
"action.system.home"
]
}
],
"orientation":?"unspecified",
"name":?"com.example.demo.MainAbility",
"icon":?"$media:icon",
"description":?"$string:mainability_description",
"label":?"$string:entry_MainAbility",
"type":?"page",
"launchType":?"standard"
}
]
}
| 属性名称 | 子属性名称 | 含义 | 数据类型 | 是否可缺省 |
| --- | --- | --- | --- | --- |
| package | - | 表示 HAP 的包结构名称,在应用内应保证唯一性。采用反向域名格式(建议与 HAP 的工程目录保持一致)。字符串长度不超过 127 字节。 | 字符串 | 否 |
| name | - | 表示 HAP 的类名。采用反向域名方式表示,前缀需要与同级的 package 标签指定的包名一致,也可采用“.”开头的命名方式。字符串长度不超过 255 字节。 | 字符串 | 否 |
| mainAbility | - | 表示 HAP 包的入口 ability 名称。 | 字符串 | page 类型的 Ability 为否 |
| deviceType | - | 表示允许 Ability 运行的设备类型。系统预定义的设备类型包括:phone(手机)、tablet(平板)、tv(智慧屏)、car(车机)、wearable(智能穿戴)、liteWearable(轻量级智能穿戴)等。 | 字符串数组 | 否 |
| distro | - | 表示 HAP 发布的具体描述 | 对象 | 否 |
| |
deliveryWithInstall
|
表示当前 HAP 是否支持随应用安装。
true:支持随应用安装。
false:不支持随应用安装
|
布尔类型
|
否?
|
| |
moduleName
|
HAP 的名称
|
字符串
|
否
|
| |
moduleType
|
表示当前 HAP 的类型,包括两种类型:entry 和 feature
|
字符串
|
否
|
| |
installationFree
|
表示当前该 FA 是否支持免安装特性。
true:表示支持免安装特性,且符合免安装约束。
false:表示不支持免安装特性。
|
布尔类型
|
entry.hap 可缺省,feature.hap 不可缺省。
|
|
abilities
|
-
|
表示当前模块内的所有 Ability。采用对象数组格式,其中每个元素表示一个 Ability 对象。
|
对象数组
|
是
|
| |
skills
|
表示 Ability 能够接收的 Intent 的特征。
|
对象数组
|
是
|
| |
orientation
|
表示该 Ability 的显示模式。该标签仅适用于 page 类型的 Ability。取值范围如下:
unspecified:由系统自动判断显示方向。
landscape:横屏模式。
portrait:竖屏模式。
followRecent:跟随栈中最近的应用。
|
字符串
|
是
|
| |
name
|
表示 Ability 名称。取值可采用反向域名方式表示,由包名和类名组成,如“com.example.myapplication.MainAbility”;也可采用“.”开头的类名方式表示,如“.MainAbility”。该标签仅适用于手机、平板、智慧屏、车机、智能穿戴。
|
字符串
|
否
|
| |
icon
|
表示 Ability 图标资源文件的索引。取值示例:$media:ability_icon。如果在该 Ability 的“skills”属性中,“actions”的取值包含?“action.system.home”,“entities”取值中包含“entity.system.home”,则该 Ability 的 icon 将同时作为应用的 icon。如果存在多个符合条件的 Ability,则取位置靠前的 Ability 的 icon 作为应用的 icon。
|
字符串
|
是
|
| |
description
|
表示对 Ability 的描述。取值可以是描述性内容,也可以是对描述性内容的资源索引,以支持多语言。
|
字符串
|
是
|
| |
label
|
表示 Ability 对用户显示的名称。取值可以是 Ability 名称,也可以是对该名称的资源索引,以支持多语言。
|
字符串
|
是
|
| |
type
|
表示 Ability 的类型。取值范围如下:
page:表示基于 Page 模板开发的 FA,用于提供与用户交互的能力。
service:表示基于 Service 模板开发的 PA,用于提供后台运行任务的能力。
data:表示基于 Data 模板开发的 PA,用于对外部提供统一的数据访问抽象。
CA:表示支持其他应用以窗口方式调起该 Ability。
|
字符串
|
否
|
| |
launchType
|
表示 Ability 的启动模式,支持“standard”、“singleMission”和“singleton”三种模式:
standard:表示该 Ability 可以有多实例。“standard”模式适用于大多数应用场景。
singleMission:表示此 Ability 在每个任务栈中只能有一个实例。
singleton:表示该 Ability 在所有任务栈中仅可以有一个实例。例如,具有全局唯一性的呼叫来电界面即采用“singleton”模式。
该标签仅适用于手机、平板、智慧屏、车机、智能穿戴。
|
字符串
|
否
|
abilities -> skills
| 属性名称 | 子属性名称 | 含义 | 数据类型 | 是否可缺省 |
| --- | --- | --- | --- | --- |
| skills | - | 表示 Ability 能够接收的 Intent 的特征 | 对象数组 | 是 |
| | entities | 表示能够接收的 Intent 的 Ability 的类别(如视频、桌面应用等),可以包含一个或多个 entity。 | 字符串数组 | 是 |
| | actions | 表示能够接收的 Intent 的 action 值,可以包含一个或多个 action。 | 字符串数组 | 是 |
五、HarmonyOS 应用程序的运行流程
====================
5.1、准备
评论