写点什么

HarmonyOS(鸿蒙)——全面入门

作者:Java高工P7
  • 2021 年 11 月 11 日
  • 本文字数:6309 字

    阅读完需:约 21 分钟

选择 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 分为两种:


  1. FA(Feature Ability)

  2. 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 线程间通信开发概述官网地址:


https://developer.harmonyos.com/cn/docs/documentation/doc-guides/inter-thread-overview-0000000000038958

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)均为非免安装的 |


官网地址:


https://developer.harmonyos.com/cn/docs/documentation/doc-guides/atomic-service-definition-0000001090840664


原子化服务由 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 文件格式,其每一项都包含都由


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


一个属性和值组成。其中属性值不分先后顺序,但是不能重复出现,必须唯一。值为 JSON 的基本数据类型。HarmonyOS 的 DevEco Studio 支持两种编辑 config.json 的方式,分别是代码编辑视图和可视化编辑视图。


代码编辑视图:



可视化编辑视图:



4.2、配置文件详细介绍




配置文件由 app、deviceConfig、module 三部分组成,三者均必须存在。以下会根据上面的 HarmonyOS 的基础 HelloWorld 程序分析一个最基础的 config.json 配置文件,如果需要十分详细的介绍,请直接去 HarmonyOS 的官网进行查阅,以下是直达的官网地址:


https://developer.harmonyos.com/cn/docs/documentation/doc-guides/basic-config-file-elements-0000000000034463

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、准备



5.1.1 创建项目

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
HarmonyOS(鸿蒙)——全面入门