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

news2024/11/19 0:36:06

一.概述

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

上一篇博文实现了一个"Hello Harmony"的Demo,今天这篇博文就以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目录。

资源目录示例

八.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.coloradmin.cn/o/1226149.html

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

相关文章

macOS 后台项目已添加 “Google Updater添加了可在后台运行的项目。你可以在“登陆项”设置中管理

文章目录 Intro解决查看三个文件夹分析 & 操作确认结果是否生效 Intro 我的macbook上经常弹出这样的通知狂: macOS 后台项目已添加 “Google Updater添加了可在后台运行的项目。你可以在“登陆项”设置中管理 不胜其扰,终于决定禁用它。以下为方法…

算法设计与分析【期中+期末复习知识点总结】(持续更新)

第1章:算法概述 算法:具有输入、输出、确定性、有限性。 程序(算法数据结构程序):具有输入、输出、确定性(注意:程序可以不满足有限性,如操作系统是在无限循环中执行的程序&#x…

es的优势

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

教程:使用 Keras 优化神经网络

一、介绍 在 我 之前的文章中,我讨论了使用 TensorFlow 实现神经网络。继续有关神经网络库的系列文章,我决定重点介绍 Keras——据说是迄今为止最好的深度学习库。 我 从事深度学习已经有一段时间了,据我所知,处理…

橱柜的装修干货|板材、五金、高度、配色4个方面。福州中宅装饰,福州装修

引言 橱柜的装修干货。 橱柜是厨房的核心,一个好的橱柜能让厨房变得实用又美观。以下是关于橱柜装修的几个问题解答。 1. 橱柜的柜门常用的板材有哪些? 橱柜的柜门常用的板材有实木板、防火板、烤漆板、包复框、PVC板、膜压板等。不同板材有不同的特点…

庖丁解牛:NIO核心概念与机制详解 01

文章目录 Pre输入/输出Why NIO流与块的比较通道和缓冲区概述什么是缓冲区?缓冲区类型什么是通道?通道类型 NIO 中的读和写概述Demo : 从文件中读取1. 从FileInputStream中获取Channel2. 创建ByteBuffer缓冲区3. 将数据从Channle读取到Buffer中 Demo : 写…

五、hdfs常见权限问题

1、常见问题 2、案例 (1)问题 (2)hdfs的超级管理员 (3)原因 没有使用Hadoop用户对hdfs文件系统进行操作。 在Hadoop文件系统中,Hadoop用户相当于Linux系统中的root用户,是最高级别用…

win10电脑无法联网,设置IPv4,点击属性无法打开,闪退

win10设置IPv4,点击属性无法打开,闪退 问题:win10设置IPv4,点击属性无法打开,闪退 问题:win10设置IPv4,点击属性无法打开,闪退 第1步:用管理员打开cmd命令窗口,然后输入下面的命令&…

JVM的运行时数据区

Java虚拟机(JVM)的运行时数据区是程序在运行过程中使用的内存区域,主要包括以下几个部分: 程序计数器虚拟机栈本地方法栈堆方法区运行时常量池直接内存 不同的虚拟机实现可能会略有差异。这些区域协同工作,支持Java…

BUUCTF snake 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 下载附件,解压得到一张snake的图片。 密文: 这里有一张蛇的图片,本人害怕不敢放,想看自己下载附件解压。(吐槽一下,我做这道题,全…

每天一点python——day71

#每天一点Python——71 #格式化字符串在Python中,你可以使用格式化字符串来动态地插入变量的值、表达式的结果等到字符串中。 如图:xxx部分需要不断变化,再和原文拼接 如上图所示这是一个类似于字符串拼接的操作。 因为字符串拼接操作会产生很…

【算法挨揍日记】day26——53. 最大子数组和、918. 环形子数组的最大和

53. 最大子数组和 53. 最大子数组和 题目描述: 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 解题思路: 状态…

公司会倒闭,但大模型肯定不会

咋玩抖音的我,前几天在抖音上发了一张图片,没想到竟然有1000多的播放量。 当然这个播放量不算高,甚至在抖音的体系里属于很低的,但是比我预料的可能只有个位数的播放量是高了不少。 这张图片是我用某国产 AI 软件生成的&#xff…

R语言和RStudio的下载安装(非常简便舒适)

目录 R语言和RStudio的关系R语言和Tableau下载R语言进入官网选择清华镜像源Download R for Windows选择base版本开始下载进行安装配置环境变量检查是否安装成功 下载RStudio进入官网点击下载进行安装检查是否安装成功打开选择R语言环境成功打开显示四个工作区 R语言和RStudio的…

CDN是什么,能起到什么作用

随着互联网的快速发展,用户对于快速、稳定、高效的互联网体验的需求日益增长。为了满足这一需求,内容分发网络(CDN)应运而生,并在近年来得到了广泛应用。CDN通过在全球范围内部署大量的服务器和网络节点,实…

2023 鹏程杯

前言 笔者没有参加此次比赛,由于团队后面会复现此次比赛,所以笔者在此进行复现记录。 silent 考点: 栈溢出 ret2csu 栈迁移 保护: 开了 Full RELRO 和 NX, 禁掉了 execve/execveat 系统调用 漏洞分析 一个裸的栈溢出, 但是没有输出函数可以泄漏 …

MySQL进阶_8.数据库其他调优策略

文章目录 第一节、数据库调优的步骤1.1、选择合适的DBMS1.2、优化表设计1.3、优化逻辑查询1.4、优化物理查询1.5、使用 Redis 或 Memcached 作为缓存1.6、库级优化 第二节、优化MySQL服务器第三节、优化数据库结构 第一节、数据库调优的步骤 1.1、选择合适的DBMS 如果对事务性…

C++基础从0到1入门编程(三)

系统学习C 方便自己日后复习,错误的地方希望积极指正 往期文章: C基础从0到1入门编程(一) C基础从0到1入门编程(二) 参考视频: 1.黑马程序员匠心之作|C教程从0到1入门编程,学习编程不再难 2.系统…

腾讯云服务器带宽计费模式_按流量和带宽收费说明

腾讯云服务器带宽计费模式分为“按带宽计费”和“按使用流量”两种计费模式:按带宽计费是预付费,一次性购买固定带宽值,先付费;按使用流量计费是先使用后付费,根据云服务器公网出方向实际产生流量来计算。如何选择带宽…

腾讯云CVM服务器标准型/高IO/计算/大数据使用场景及选择说明

腾讯云CVM服务器多种机型使用场景说明,如标准型、内存型、高 IO 型、计算型、大数据型、异构型和批量型,腾讯云百科txybk.com分享不同CVM实例规格配置适合使用场景说明: 腾讯云CVM云服务器 标准型:适合中小型 Web 应用、中小型数据…