HarmonyOS(鸿蒙),java入门到精通电子版

HarmonyOS(鸿蒙),java入门到精通电子版,第1张

HarmonyOS(鸿蒙),java入门到精通电子版

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文件格式,其每一项都包含都由一个属性和值组成。其中属性值不分先后顺序,但是不能重复出现,必须唯一。值为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”:

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

“$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 创建项目

进入HarmonyOS(鸿蒙)正式开发之前,可以通过一个简单的HelloWorld的示例代码来了解其运行时的相关流程。如下是通过DevEco Studio创建的一个简单HelloWorld示例代码结构,接下来会分析其启动流程。

5.1.2 运行项目

运行上面的HelloWorld,展示效果如下所示:

5.2、分析启动流程


5.2.1 启动流程图

一个简单的HarmonyOS(鸿蒙)HelloWorld程序,其基本运行流程,可以分为如下几个阶段:

5.2.2 解析config.json文件

config.json文件是HarmonyOS(鸿蒙)应用程序的主要配置文件,其位于entry -> src -> main -> config.json,配置文件分为三大块,具体的说明可以参考我的另一篇文件,《HarmonyOS(鸿蒙)——config.json详解》

5.2.3 初始化

初始化主要通过config.json的module下的package和name来定位类com.example.demo.MyApplication.

MyApplication的内容如下,它会做一些应用的初始化工作

package com.example.demo;

import ohos.aafwk.ability.AbilityPackage;

public class MyApplication extends AbilityPackage {

@Override

public void onInitialize() {

super.onInitialize();

}

}

5.2.4 获取入口Ability全类名

入口Ability的全类名,也在config.json文件中进行配置

MainAbility对应config.json中的abilities中的相关配置信息

MainAbility的主要内容如下,主界面中会加载子界面,通过 super.setMainRoute(MainAbilitySlice.class.getName());的方式进行加载,关于页面的相关介绍可以查看我的另一篇文件《HarmonyOS(鸿蒙)—— Ability与页面》

1package com.example.demo;

2

3import com.example.demo.slice.MainAbilitySlice;

4import ohos.aafwk.ability.Ability;

5import ohos.aafwk.content.Intent;

6

7public class MainAbility extends Ability {

8    @Override

9    public void onStart(Intent intent) {

10        super.onStart(intent);

11        super.setMainRoute(MainAbilitySlice.class.getName());

12    }

13}

5.2.5 运行Ability

这一步就是启动上面的类

5.2.6 运行Ability的子界面

MainAbility运行后执行onStart方法会加载子页面,这里的子页面是MainAbilitySlice,其主要内容如下所示。

package com.example.demo.slice;

import com.example.demo.ResourceTable;

import ohos.aafwk.ability.AbilitySlice;

import ohos.aafwk.content.Intent;

public class MainAbilitySlice extends AbilitySlice {

@Override

public void onStart(Intent intent) {

super.onStart(intent);

super.setUIContent(ResourceTable.Layout_ability_main);

}

@Override

public void onActive() {

super.onActive();

}

@Override

public void onForeground(Intent intent) {

super.onForeground(intent);

}

}

在MainAbilitySlice中我们发现,onStart加载类相关UI配置,ResourceTable.Layout_ability_main,ResourceTable是HarmonyOS应用程序启动时动态生成的常量类,它会给每一个xml等文件分配一个标志ID。要是想查看这个类,可以运行应用程序后在class文件中查阅

5.2.7 加载xml文件,展示内容

关于子页面中的内容,均可以通过xml文件来进行配置,这种基于xml配置内容样式的方式也比较方便,易于统一管理和系统解析。

至此一个HarmonyOS(鸿蒙)HelloWorld程序的执行流程就这么多了。

六、精选好文

======

HarmonyOS(鸿蒙)DevEco Studio开发环境搭建

HarmonyOS(鸿蒙)开发一文入门

两个案例五分钟轻松入门Harmony(鸿蒙)开发

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5671830.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存