鸿蒙:Harmony开发基础知识详解

一.概述

工欲善其事,必先利其器。

上一篇博文实现了一个"Hello Harmony"的Demo,今天这篇博文就以"Hello Harmony" 为例,以官网开发文档为依据,从鸿蒙开发主要的几个方面入手,详细了解一下鸿蒙开发所需的基础知识。

二.UI框架

HarmonyOS提供了一套UI开发框架,即方舟开发框架ArkUI框架

1.UI开发要素

方舟开发框架提供了多个应用UI开发要素:
    ● UI组件:(列表、网格、按钮、单选框、进度条、文本等)
    ● 布局计算
    ● 动画能力
    ● UI交互
    ● 绘制
    ● ......

2.两种开发范式

(1).两种开发范式介绍
  • 基于ArkTS的声明式开发范式(简称“声明式开发范式”)
  • 兼容JS的类Web开发范式(简称“类Web开发范式”)

声明式开发范式:基于TypeScript扩展而来的ArkTs语言进行声明式UI开发

类Web开发范式:采用经典的HML、CSS、JavaScript三段式开发方式
                             HML搭建布局、CSS描述样式、JavaScript处理逻辑。                           

类Web开发范式很像Web前端开发,便于快速将Web应用改造成鸿蒙应用

但是华为鸿蒙官方首推的是声明式开发范式

(2).方舟开发框架示意图

(3).方舟开发框架结构图

(3).两种开发范式比较

基于如下下几个优点,鸿蒙官方更推荐使用声明式开发范式来构建UI:

  • 开发效率:更接近自然语义的编程方式,直观地描述UI,无需关心UI绘制和渲染,高效简洁。
  • 应用性能:相比类Web开发范式,声明式开发范式无需JS框架进行页面DOM管理,渲染更新更精简,占用内存更少,性能更佳。
  • 发展趋势:后续会作为主推的开发范式持续演进,提供更丰富、更强大的能力

三.应用模型

1.两种应用模型

HarmonyOS的应用模型提供了应用程序必备的组件和运行机制,可以基于一套统一的模型进行应用开发。

HarmonyOS发展过程中,先后提供了两种应用模型:

  • FA(Feature Ability)模型: HarmonyOS API 7开始支持的模型,已经不再主推
  • Stage模型: HarmonyOS API 9开始新增的模型,是Harmony目前主推且会长期演进的模型

Stage模型提供了AbilityStage、WindowStage等类作为应用组件Window窗口“舞台”,所以被称为Stage模型

2.构成要素

HarmonyOS应用模型的构成要素包括:

  • 应用组件:应用的基本组成单位,也是运行入口,提供生命周期回调
  • 应用进程模型:定义应用进程的创建和销毁方式,以及进程间的通信方式
  • 应用线程模型:定义应用进程内线程的创建和销毁方式、主线程和UI线程的创建方式、线程间的通信方式
  • 应用任务管理模型:定义任务(Mission)的创建和销毁方式,以及任务与组件间的关系。HarmonyOS应用任务管理由系统应用负责,三方应用无需关注
  • 应用配置文件:包含应用配置信息、应用组件信息、权限信息、开发者自定义信息等,这些信息在编译构建、分发和运行阶段分别提供给编译工具、应用市场和操作系统使用

四.HarmonyOS APP包结构

HarmonyOS应用/服务发布形态为APP Pack(Application Package,简称APP)
它由一个或多个HAP(HarmonyOS Ability Package)包以及描述APP Pack属性的pack.info文件组成。

终端设备安装和云端(服务器)分发时,都是以HAP为单位进行安装和分发的。

一个HAP在工程目录中对应一个Module
它是由代码、资源、第三方库及应用/服务配置文件组成,
可以分为 Entry 和 Feature 两种类型:

  • Entry:应用/服务的主模块,可独立安装运行。
    (1).通常用于实现应用的入口界面、入口图标、主特性功能等。
    (2).一个APP中,对于同一类型的设备,可以包含一个或多个Entry类型的HAP,如果同一类型的设备包含多个Entry模块,需要配置distroFilter分发规则,使得应用市场在做应用的云端分发时,对该设备类型下不同规格的设备进行精确分发。

  • Feature:应用/服务的动态特性模块。
    (1).一个APP可以包含0个或多个Feature类型的HAP(像Android的".jar"和".aar")
    (2).
    可以配置成按需下载安装,也可以配置成随Entry类型HAP一起下载安装
    (3).只有包含Ability的HAP才能够独立运行。

module.json5配置文件中通过 type标签 配置“entry”“feature”类型

Ability是应用所具备的能力的抽象
(1).一个应用可以包含一个或多个Ability。
(2).Ability分为两种类型:FA(Feature Ability)和PA(Particle Ability)。
(3).FA/PA是应用/服务的基本组成单元,能够实现特定的业务功能。
(4).FA有UI界面,而PA无UI界面。

Bundle:每个Harmony应用可以包含多个.hap文件,一个应用中的.hap文件合在一起称为一个Bundle,bundleName是应用的唯一标识(bundleName标签在app.json5配置文件中)。

需要特别说明的是:在应用上架到应用市场时,需要把应用包含的所有.hap文件(即Bundle)打包为一个.app后缀的文件用于上架,这个.app文件就是App Pack(Application Package),其中也包含了描述App Pack属性的pack.info文件。

五.Stage模型应用程序包结构

1.Moudle

Module是HarmonyOS应用/服务的基本功能单元,包含了源代码、资源文件、第三方库及应用/服务配置文件。

每一个Module都可以独立进行编译和运行。(和Android中的Moudle一样)

Module分为“Ability”和“Library”两种类型:

  • Ability类型:编译后生成HAP(Harmony Ability Package)文件
  • Library类型:编译后生成HAR(Harmony Archive)文件,或者HSP(Harmony Shared Package)

DevEco Studio可以创建一个或者多个Module

2.Module与UIAbility组件关系示意图

注:下文中再提到的Module默认指的是“Ability”类型的Module。

3.应用程序包结构(Stage模型)

注:下文中提到的HAP包默认指的是Stage模型的HAP包

HAP包结构包括:

  • ets、libs、resources等文件夹
  • resources.index、module.json、pack.info等文件。

应用程序包结构图示:

  • ets目录:存放应用代码编译后的字节码文件。
  • libs目录:存放库文件(.so二进制文件)。
  • resources目录:存放应用的资源文件(字符串、图片等)
  • resources.index:资源索引表,由IDE编译工程时生成。
  • module.json:HAP配置文件,内容由工程配置中的module.json5和app.json5组成
  • pack.info:Bundle中用于描述每个HAP属性的文件
                       例如:app中的bundleName和versionCode信息、module中的name、type和                           abilities等信息,编译生成Bundle包时自动生成。

六.Stage模型ArkTS工程目录结构

以上一篇博客的"Hello Harmony" Demo为例,一个Stage模型ArkTS工程目录详细结构如下:

七.resources目录

鸿蒙应用的resources目录根据所包含的资源文件的类型不同,放置在不同的子目录下

resources目录包括三大类目录

  • base目录,默认存在
  • 限定词目录,开发者自行创建
  • rawfile目录,原始文件目录

资源文件查找顺序:

  • 优先从匹配的限定词目录中寻找
  • 没有匹配的限定词目录,或者在限定词目录中找不到,就会去base目录中找。

rawfile是原始文件目录,不会根据设备状态去匹配不同的资源

stage模型多工程情况下共有的资源文件放到AppScope下的resources目录。

资源目录示例

八.ArkTS代码组成拆解

点击按钮,文本内容从“Hello World”变为“Hello ArkUI”功能代码拆解

ArkTS 代码段的基本组成:

九.DevEco Studio实用

DevEco Studio和Android Studio很像,他们都是基于IntelliJ IDEA开发工具演变而来。

但是DevEco Studio有一些和Android Studio有区别有很实用的地方。

1.Previewer

DevEco Studio有一个Previewer功能,在开发过程中能实时看到ts文件实现的UI效果。AndroidStudio针对XML布局文件也有个类似的Design功能,但是只能看到布局控件的区域排布,DevEco Studio的Previewer能直接实现最终UI效果和逻辑呈现,并且跟随代码实时更新

2.低代码UI开发

DevEco Studio有一个低代码开发UI的功能,实现了在开发过程中实时拖动控件进行UI开发。

这项功能的开关需要在工程创建时选择

打开Enable Super Visual,表示使用低代码开发功能开发应用/服务。

同步完成后,工程目录中自动生成低代码目录结构。

index.js:低代码页面的逻辑描述文件,定义了页面里所用到的所有的逻辑关系,比如数据、事件等。如果创建了多个低代码页面,则pages目录下会生成多个页面文件夹及对应的js文件。

index.visual:visual文件存储低代码页面的数据模型,双击该文件即可打开低代码页面,进行可视化开发设计。如果创建了多个低代码页面,则pages目录下会生成多个页面文件夹及对应的visual文件。

打开“index.visual”文件,即可进行页面的可视化布局设计与开发

十.结束语

鸿蒙应用开发的基础知识就先讲解到这里

后续随着HarmonyOS学习的深入,本博文会持续更新鸿蒙开发需要掌握的基础知识点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/150890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RAID技术复习笔记

Raid(Redundant Array of independent Disks)独立磁盘冗余阵列:磁盘阵列 Raid 分为:软raid、硬raid、软硬混合三种。 软Raid:所有的功能均有操作系统和CPU来完成,没有独立的raid控制、处理芯片和IO处理处理芯片。 硬R…

车载通信架构 —— 传统车内通信网络发展回顾

车载通信架构 —— 传统车内通信网络发展回顾 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何…

c语言-数据结构-堆

目录 一、二叉树 1、二叉树的概念 2、完全二叉树和满二叉树 3、完全二叉树的顺序存储 二、堆 2、堆的概念与结构 3、堆的创建及初始化 4、堆的插入(小堆) 5、堆的删除 6、显示堆顶元素 7、显示堆里的元素个数 8、测试堆的各个功能 9、 实现堆…

学生邮箱白嫖/免费安装JetBrains全家桶(IDEA/pycharm等) —— 保姆级教程

🧸欢迎来到dream_ready的博客,📜相信您对博主首页也很感兴趣o (ˉ▽ˉ;) 博主首页,更多redis、java等优质好文以及各种保姆级教程等您挖掘! 目录 前言 JetBrains全家桶介绍 申请过程: 获取学…

这个技术也能管理教学质量,厉害了!

在当今数字化时代,教育领域也在积极应用先进的技术来提升教学质量和管理效率。在线巡课系统作为其中的一种创新工具,为学校管理者和教育工作者提供了便捷而高效的管理手段。 在线巡课系统通过数字化、自动化的方式,实现了对课堂教学的全面监控…

Python基础:正则表达式(regular expression)详解

在Python中,正则表达式是一种强大的工具,可用于匹配和操作字符串。什么是正则表达式? 正则表达式是一种模式匹配语言,用于匹配字符串中的特定模式。这些模式可以是字母、数字、字符组合或其他符号。正则表达式通常用于文本处理、网…

excel怎么能锁住行 和/或 列的自增长,保证粘贴公式的时候不自增长或者只有部分自增长

例如在C4单元格中输入了公式: 现在如果把C4拷贝到C5,D3会自增长为D4: 现在如果想拷贝的时候不自增长,可以先把光标放到C4单元格,然后按F4键,行和列的前面加上了$符号,锁定了: …

Linux中的进程终止(详解)

Linux中的进程终止 1. 进程退出场景2. 进程常见退出方法2.1 _exit函数2.2 exit函数2.3 return退出 1. 进程退出场景 代码运行完毕,结果正确代码运行完毕,结果不正确代码异常终止 2. 进程常见退出方法 正常终止(可以通过 echo $? 查看进程…

【小黑嵌入式系统第九课】PSoC 5LP第一个实验——LED、字符型LCD显示实验

上一课: 【小黑嵌入式系统第八课】初识PSoC Creator™开发——关于PSoC Creator&下载、创建项目、单片机中的hello world(点亮一个led) 文章目录 1 实验目的2 实验要求3 实验设备4 实验原理1. 基于 PWM 原理的 LED 亮度控制2. 时间的计量3. 按键抖动…

超全整理,Pytest自动化测试框架-多进程(pytest-xdist)运行总结...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 平常我们功能测试…

SpringBoot-AOP学习案例

4. AOP案例 SpringAOP的相关知识我们就已经全部学习完毕了。最后我们要通过一个案例来对AOP进行一个综合的应用。 4.1 需求 需求:将案例中增、删、改相关接口的操作日志记录到数据库表中 就是当访问部门管理和员工管理当中的增、删、改相关功能接口时&#xff0…

整形数据和浮点型数据在内存中的存储差别

愿所有美好如期而遇 我们先来看代码,猜猜结果是什么呢? int main() {//以整型数据的方式存储int n 10;float* m (float*)&n;//以整型数据的方式读取printf("%d\n", n);//以浮点型数据的方式2读取printf("%f\n", *m);printf(&…

Linux下查看pytorch运行时真正调用的cuda版本

一般情况我们会安装使用多个cuda版本。而且pytorch在安装时也会自动安装一个对应的版本。 正确查看方式: 想要查看 Pytorch 实际使用的运行时的 cuda 目录,可以直接输出 cpp_extension.py 中的 CUDA_HOME 变量。 import torch import torch.utils imp…

AutoSAR CANIF层配置代码分析

CAN物理控制单元 配置: 生成的代码: CanIf_CtrlStates 解析 类型: typedef union CanIf_CtrlStatesUTag {CanIf_CtrlStatesType raw[3];CanIf_CtrlStatesStructSType str; }CanIf_CtrlStatesUType;typedef struct sCanIf_CtrlStatesType {C…

陪诊系统搭建部署和功能,让就医更便捷和舒适

陪诊系统是一种基于智能手机平台的专门为就医提供陪伴服务的软件。该应用程序包含多种功能,包括提供的医疗知识、行为规范和陪伴服务。它不仅可以帮助用户规划就医时间、预约医生、清楚病情、解答疑问等,还可以在就医时为用户提供实时的陪伴和指导&#…

论文阅读:JINA EMBEDDINGS: A Novel Set of High-Performance Sentence Embedding Models

Abstract JINA EMBEDINGS构成了一组高性能的句子嵌入模型,擅长将文本输入转换为数字表示,捕捉文本的语义。这些模型在密集检索和语义文本相似性等应用中表现出色。文章详细介绍了JINA EMBEDINGS的开发,从创建高质量的成对(pairwi…

WEB 自动化神器 TestCafe(一)—安装和入门篇

今天小编给大家带来WEB 自动化神器 TestCafe(一) —安装和入门篇 一、TestCafe 介绍: TestCafe 是一款基于 Node.js 的端到端 Web 自动化测试框架,支持 TypeScript 或 JavaScript 来编写测试用例,运行用例,并生成自动化测试报告。…

Navicat DML 操作

在表格种插入 列信息 -- 修改数据 update 表名 set 列名 值1, 列名值2,[where 条件]; -- 注意:如果update语句没有加where 表里对应行的全部信息都会被改; -- 删除数据 delecte from 表名 [where 条件]; 未删除前: 执行删除后为: DQL - 条…

【已解决】移动号码在移动网上营业厅更换为8元保号套餐

有很多人的副卡基本是为了接收银行卡短信,平时基本不打电话和用流量,每个月固定消费在18-30左右,很浪费。今天发现在网上营业厅就可以修改8元保号套餐,分享给大家。 保号套餐 有以下两种: 解决办法: 1、…