鸿蒙: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目录。

资源目录示例

八.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.rhkb.cn/news/198798.html

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

相关文章

MIUI查看当前手机电池容量

MIUI查看当前手机电池容量 1. 按如下步骤操作生成bug报告 2. 按如下操作解压bug报告 Last learned battery capacity

分布式服务与分布式框架

分布式副武其实就是根据某个粒度,将服务拆分,而分布式框架就是将这些服务协调,管理起来。分布式框架,我认为服务调用是他的基础能力,该能力是所有分布式框架的基础能力,其次是服务注册与发现。 在这个维度…

TCP与UDP协议

TCP与UDP协议 1、TCP协议: 1、TCP特性: TCP 提供一种面向连接的、可靠的字节流服务。在一个 TCP 连接中,仅有两方进行彼此通信。广播和多播不能用于 TCP。TCP 使用校验和,确认和重传机制来保证可靠传输。TCP 给数据分节进行排序…

[C++]:8.C++ STL引入+string(介绍)

C STL引入string(介绍) 一.STL引入:1.什么是STL2.什么是STL的版本:2-1:原始版本:2-2:P. J 版本:2-3:RW 版本:2-4:SGL版本: 3.STL 的六大组件&…

WhatsApp新营销全解:如何才能真正留住你的客户

WhatsApp营销这件事上,从获取线索、留存客户、成交转化到复购推荐的整个流程中,方方面面的因素影响着最终的转化效果。今天开始,我们会在公众号内新增WhatsApp新营销全解系列,结合前人踩过的坑和成功经验,来为大家说说…

读《Segment Anything in Defect Detection》

摘要 (好像只是说把SAM应用到了红外缺陷分割领域) 引言 无损检测得到红外图像,根据热能观察异常 贡献: •从两个光学脉冲热成像系统构建广泛的缺陷热数据库,包括各种材料并释放它们。 • 开发DefectSAM,这是第一个用于缺陷检测…

Android 解决CameraView叠加2个以上滤镜拍照黑屏的BUG (二)

1. 前言 这段时间,在使用 natario1/CameraView 来实现带滤镜的预览、拍照、录像功能。 由于CameraView封装的比较到位,在项目前期,的确为我们节省了不少时间。 但随着项目持续深入,对于CameraView的使用进入深水区,逐…

Semi-Supervised Multi-Modal Learning with Balanced Spectral Decomposition

Y是所有模态的表征矩阵, ∑ i 1 d h ( λ i ) \sum_{i1}^dh(\lambda_i) ∑i1d​h(λi​) is the proposed eigenvalue-based objective function,the final similarity matrix W for the multimodal data as a block matrix 辅助信息 作者未提供代码

腾讯云轻量数据库是什么?性能如何?费用价格说明

腾讯云轻量数据库测评,轻量数据库100%兼容MySQL 5.7和8.0,腾讯云提供1C1G20GB、1C1G40GB、1C2G80GB、2C4G120GB、2C8G240GB五种规格轻量数据库,腾讯云百科txybk.com分享腾讯云轻量数据库测评、轻量数据库详细介绍、特性、配置价格和常见问题解…

滚珠螺杆在航天工业领域中的重要性

滚珠螺杆是重要的航天工业配件之一,在航天工业领域中具有非常重要的地位和作用。 首先,滚珠螺杆作为一种高精度、高刚度的传动元件,能够提供准确的传动和定位精度,从而保证航天器的可靠性和性能。航天器在飞行过程中需要精确控制其…

NX二次开发UF_CAM_ask_f_s_db_object 函数介绍

文章作者:里海 来源网站:里海NX二次开发3000例专栏 UF_CAM_ask_f_s_db_object Defined in: uf_cam.h int UF_CAM_ask_f_s_db_object(UF_CAM_db_object_t * db_obj ) overview 概述 This function provides the database object which is currently u…

软文推广如何实现效果?媒介盒子为你支招

当今数字化时代,软文已经成为各个品牌推广的常用方式,它通过优质内容输出和有效传播渠道的搭建,实现企业品牌、服务、产品的传播,在消费者心中构建起鲜明的传播形象,但有许多企业在进行推广时都会存在瓶颈,…

centos虚拟机无法接受消息(防火墙)

1.利用wireshark抓包, 发现发送信息后, 虚拟机返回 :host administratively prohibited 2.发现是centos虚拟机未关闭防火墙 (关闭后可正常接收消息)

瑞吉外卖Day06

1.用户地址 1.1实体类 /*** 地址簿*/ Data public class AddressBook implements Serializable {private static final long serialVersionUID 1L;private Long id;//用户idprivate Long userId;//收货人private String consignee;//手机号private String phone;//性别 0 女…

centos7 探测某个tcp端口是否在监听

脚本 nc -vz 192.168.3.128 60001 if [ $? -eq 0 ]; thenecho "tcp succeed" elseecho "tcp failed" fi nc -vz 192.168.3.128 60001 探测192.168.3.128服务器上60001 tcp端口, -vz说明是探测TCP的 端口开启的情况 执行脚本 端口禁用情况 执行脚本

“腾易视连”构建汽车生态新格局 星选计划赋能创作者价值提升

11月16日,在2023年广州国际车展前夕,以“腾易视连,入局视频号抓住增长新机会”为主题的腾易创作者大会在广州隆重举办。此次大会,邀请行业嘉宾、媒体伙伴、生态伙伴、视频号汽车领域原生达人等共济一堂,结合汽车行业数…

Typescript 的 class 类

介绍 1. 类介绍 传统的JavaScript通过函数和基于原型的继承来创建可重用的组件,从ES6开始,JavaScript程序员也可以使用面向对象的方法来创建对象。例如,下列通过class关键词,来声明了一个类:Greeter class Greeter …

所有做海外营销的,都应该知道什么是SocialSelling

#01 社媒社交营销,早已不是选择题 当下,一个共同的认识已越来越深刻,不管是跨境电商还是外贸,又或者是海外实体店、APP出海、SaaS出海、金融出海等不同业态,社媒和社交营销已是所有企业的共识。 社媒社交营销&#xf…

使用drawio的图层构建更强大的图表

drawio中使用图层 drawio是一款强大的图表绘制软件,支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用,则直接输入网址draw.io或者使用drawon(桌案), drawon.cnhttps://www.drawon.cn?useSourcecsdn内部完整的集成了drawio的所有功…

信息中心网络提出的背景、研究现状及研究内容

信息中心网络什么时候提出的?未来发展前景?有什么著名实验室在做? 1、提出背景: 互联网产生于上世纪60年代: (1)网络设备数量呈指数性增长 截至2022年底全球范围内预计将有超过280亿台终端设…