HarmonyOS NEXT:一次开发,多端部署

寄语

这几年特别火的uni-app实现了“一次开发,多端使用”,它这个端指的是ios、安卓、各种小程序这些,而HarmonyOS NEXT也提出了“一次开发,多端部署”,而它这个端指的是终端设备,也就是我们的手机、平板、电脑、智能手表这些。是不是很惊奇那,这也是HarmonyOS NEXT的强大之处,它在创立之初就以打造一个完整生态为目的,相信在不久的未来,一多能结合元服务或者更加强大的体系能实现真正的“万物互联”,不单单是网络的互联,而是像科幻电影中那种。同时,这也是最近鸿蒙被各位大佬比较看好的原因之一。

概述

简介

HarmonyOS系统面向多终端提供了“一次开发,多端部署”(简称为一多)的能力,让开发者可以基于一种设计,高效构建多端可运行的应用。

目标

支撑开发者快速高效的开发支持多种终端设备形态的应用,实现对不同设备兼容的同时,提供跨设备的流转、迁移和协同的分布式体验。

方舟开发框架

简介

方舟开发框架(简称:ArkUI)提供开发者进行应用UI开发时所必须的能力,方舟开发框架提供了两种开发范式,分别是基于JS扩展的类Web开发范式和基于ArkTS的声明式开发范式。

1.声明式开发范式

简介

采用TS语言并进行声明式UI语法扩展,从组件、动效和状态管理三个维度提供了UI绘制能力。

特点

适用于移动系统应用开发人员,占用内存更少,更适用大型的应用开发。

2.类Web开发范式

简介

采用经典的HML、CSS、JavaScript三段式开发方式,使用HML标签文件进行布局搭建,使用CSS文件进行样式描述,使用JavaScript文件进行逻辑处理。

存在原因

更接近Web前端开发者的使用习惯,快速将已有的Web应用改造成方舟开发框架应用。

特点

适用于Web前端开发人员,主要适用于界面较为简单的中小型应用开发。

应用程序包结构

简介

在进行应用开发时,一个应用通常包含一个或多个Module。

Module

Module是应用/服务的基本功能单元,包含了源代码、资源文件、第三方库及应用/服务配置文件,每一个Module都可以独立进行编译和运行,Module分为Ability和Library两种类型。

Module的类型

1.Ability类型的Module编译后生成HAP包。

2.Library类型的Module编译后生成HAR包或HSP包。

HAP

应用以APP Pack形式发布,其包含一个或多个HAP包,HAP是应用安装的基本单位,Ability类型Module编译后会生成HAP包,HAP可以分为Entry和Feature两种类型。

HAP的类型

1.Entry类型的HAP:应用的主模块。在同一个应用中,同一设备类型只支持一个Entry类型的HAP,通常用于实现应用的入口界面、入口图标、主特性功能等。

2.Feature类型的HAP:应用的动态特性模块。Feature类型的HAP通常用于实现应用的特性功能,一个应用程序包可以包含一个或多个Feature类型的HAP,也可以不包含。

部署模型

简介

一多有两种部署模型:

部署模型A:不同类型的设备上按照一定的工程结构组织方式,通过一次编译生成相同的HAP或HAP组合

部署模型B:不同类型的设备上按照一定的工程结构组织方式,通过一次编译生成不同的HAP或HAP组合

泛类是什么?

从屏幕尺寸、输入方式及交互距离三个维度考虑,可以将常用类型的设备分为不同泛类

如何选择部署模型?

1.应用在不同泛类设备上的UX设计或功能相似时,可以使用部署模型A。

2.应用在同一泛类不同类型设备上UX设计或功能差异非常大时,可以使用部署模型B,但同时也应审视应用的UX设计及功能规划是否合理。

3.如果目标设备类型较多,往往是部署模型A和部署模型B混合使用。

4.不管采用哪种部署模型,都应该采用一次编译。

代码工程结构

简介

一多推荐了一种三层工程结构

代码工程结构和部署模型的关系

部署模型不同,相应的代码工程结构也有差异。部署模型A和部署模型B的主要差异点集中在products层:部署模型A在products目录下同一子目录中做功能和特性集成;部署模型B在products目录下不同子目录中对不同的产品做差异化的功能和特性集成。

三层工程结构 

common(公共能力层)

用于存放公共基础能力集合(如工具库、公共配置等)。

common层可编译成一个或多个HAR包或HSP包(HAR中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝;而HSP中的代码和资源可以独立编译,运行时在一个进程中代码也只会存在一份),其只可以被products和features依赖,不可以反向依赖。

features(基础特性层)

用于存放基础特性集合(如应用中相对独立的各个功能的UI及业务逻辑实现等)。

各个feature高内聚、低耦合、可定制,供产品灵活部署。不需要单独部署的feature通常编译为HAR包或HSP包,供products或其它feature使用,但是不能反向依赖products层。需要单独部署的feature通常编译为Feature类型的HAP包,和products下Entry类型的HAP包进行组合部署。features层可以横向调用及依赖common层。

products(产品定制层)

用于针对不同设备形态进行功能和特性集成。

products层各个子目录各自编译为一个Entry类型的HAP包,作为应用主入口。products层不可以横向调用。

工程结构抽象表示

/application

├── common # 可选。公共能力层, 编译为HAR包或HSP包

├── features # 可选。基础特性层

│ ├── feature1 # 子功能1, 编译为HAR包或HSP包或Feature类型的HAP包

│ ├── feature2 # 子功能2, 编译为HAR包或HSP包或Feature类型的HAP包

│ └── ...

└── products # 必选。产品定制层

├── wearable # 智能穿戴泛类目录, 编译为Entry类型的HAP包

├── default # 默认设备泛类目录, 编译为Entry类型的HAP包

开发说明

1.整个代码工程最终构建出一个APP包,应用以APP包的形式发布到应用市场中

2.开发阶段应考虑不同类型设备间最大程度的复用代码,以减少开发及后续维护的工作量。

开发实例

概述

通过一个天气应用,介绍一多应用的整体开发过程,包括UX设计、工程管理及调试、页面开发等

UX设计

简介

一多建议从设备屏幕宽度的维度将设备划分为四大类,设计师只需要针对这四大类设备做设计。

开发思路

1.在不同的屏幕宽度下,应用的整体风格基本保持一致

2.在相近的屏幕宽度范围内,应用的布局基本不变;在不同的屏幕宽度范围内,应用的布局有较大差异。

3.应用在小屏幕下显示的元素,是大屏幕中显示元素的子集

四大类

不同设备的效果

 

工程管理及调试

创建项目

注意Device Type选项要勾选所有该应用期望运行的目标设备类型

预览调试

开启预览器并打开Multi-profile preview开关,还可以点击+ New Profile按钮,新增自定义预览器

预览器Multi-profile preview开关

页面开发

开发思路

1.划分9个基础区域

2.基础区域9仅在大设备上显示,基础区域1-8虽然在各设备上始终展示但其尺寸及区域内的布局基本保持不变,可以结合自适应布局能力以自定义组件的形式分别实现这9个基础区域。

3.基础区域1-8之间的布局在不同设备上有较大差异,可以使用响应式布局中的栅格布局能力实现组件间的布局效果

4.展开和隐藏侧边栏的功能可以通过侧边栏组件来实现。侧边栏是大设备上独有的,借助响应式布局中的媒体查询能力,控制仅在大设备上展示侧边栏即可

划分区域演示

功能开发

在超小设备上,考虑CPU、内存、硬盘等硬件限制,往往会对系统进行裁剪。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java面试题:MVCC

MVCC 保证事务的隔离性 排它锁: 一个事务获取了数据行的排他锁,其他事务就不能再获取该行的其他锁 MVCC: 多版本并发控制 维护一个数据的多个版本,使读写不存在冲突 具体实现依靠 隐藏字段 mysql中隐藏了三个隐藏字段 db_trx_id:最近修改事务 db_roll_ptr:指向上一个…

【Leetcode】最小数字游戏

你有一个下标从 0 开始、长度为 偶数 的整数数组 nums ,同时还有一个空数组 arr 。Alice 和 Bob 决定玩一个游戏,游戏中每一轮 Alice 和 Bob 都会各自执行一次操作。游戏规则如下: 每一轮,Alice 先从 nums 中移除一个 最小 元素&…

[linux]IO多路复用机制:select、poll、epoll

为什么需要IO多路复用 首先我要向大家输出一个IO的概念:IO在我看来就是 等 拷贝(简化IO模型),等就是等待系统资源(设备。数据等)就绪(比如等待文件描述符就绪,等待数据就绪&#x…

Linux开发:Fuse介绍

Fuse(filesystem in userspace),是一个用户空间的文件系统。通过fuse内核模块的支持,开发者只需要根据fuse提供的接口实现具体的文件操作时所对应的回调函数,就可以实现一个文件系统。由于其主要实现代码位于用户空间中,因此不需要重新编译内…

springboot+vue 开发记录(九)后端打包部署运行

本篇文章主要内容是后端项目写好了,怎么打包部署到服务器上运行。 文章目录 1. 在服务器上安装Docker2. 在Docker中装MySQL3. 在Docker中设置网桥,实现容器间的网络通信4. 修改后端配置文件5. 修改pom.xml文件6. 打包7. 编写DockerFile文件8. 上传文件到…

【调试笔记-20240713-Windows-Tauri 多个HTML页面支持】

调试笔记-系列文章目录 调试笔记-20240713-Windows-Tauri 多个HTML页面支持 文章目录 调试笔记-系列文章目录调试笔记-20240713-Windows-Tauri 多个HTML页面支持 前言一、调试环境操作系统:Windows 10 专业版调试环境调试目标 二、调试步骤搜索相似问题 三、应用场…

Python中的数据容器及其在大数据开发中的应用

在Python编程中,数据容器是存储和组织数据的基本工具。作为大数据开发者,了解并灵活运用各种容器类型对于高效处理大规模数据至关重要。今天,我们将从Set出发,探讨Python中的各种数据容器,以及它们在大数据处理中的应用…

Leetcode3200. 三角形的最大高度

Every day a Leetcode 题目来源:3200. 三角形的最大高度 解法1:模拟 枚举第一行是红色还是蓝色,再按题意模拟即可。 代码: /** lc appleetcode.cn id3200 langcpp** [3200] 三角形的最大高度*/// lc codestart class Solutio…

【 香橙派 AIpro评测】烧系统到运行并使用Jupyter Lab 界面体验 AI 应用样例(新手福音)

文章目录 ⭐前言⭐初始化开发板⭐下载镜像烧系统⭐开发板初始化系统💖 远程ssh💖查看ubuntu桌面💖 远程向日葵 ⭐体验 AI 应用样例💖 运行 jupyterLab💖 打开Jupyter Lab页面💖 释放内存💖 运行…

AI Native时代:重塑人机交互与创作流程

随着2024年上海世界人工智能大会的圆满落幕,业界领袖们纷纷就AI应用的新机遇展开深入讨论。结合a16z播客中的观点,本文将探讨AI原生(AI Native)应用的几个关键特征,这些特征正在重新定义我们的工作方式和创作过程。 一…

排序-java(详解)

一,分类 主要的排序大致分为以下几类: 1,插入排序,又分为直接插入排序和希尔排序 2,选择排序,又分为选择排序和堆排序 3,交换排序,又分为冒泡排序和快速排序 4,归并…

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(三)-机上无线电接入节点无人机

引言 本文是3GPP TR 22.829 V17.1.0技术报告,专注于无人机(UAV)在3GPP系统中的增强支持。文章提出了多个无人机应用场景,分析了相应的能力要求,并建议了新的服务级别要求和关键性能指标(KPIs)。…

大模型高效参数微调技术

文章目录 一、Fine-Tuning:微调二、Prompt-Tuning:提示调优2.1 工作原理2.2 PET (Pattern-Exploiting Training)2.3 Prompt-Tuning集成2.4 模板构建方式 三、Prefix Tuning:连续提示模板3.1 提出动机3.2 工作原理 四、P-Tuning V1/V24.1 P-Tu…

【Qt课设】基于Qt实现的中国象棋

一、摘 要 本报告讨论了中国象棋程序设计的关键技术和方法。首先介绍了中国象棋的棋盘制作,利用Qt中的一些绘画类的函数来进行绘制。在创作中国象棋棋子方面,首先,我们先定义一下棋子类,将棋子中相同的部分进行打包,使…

redisTemplate报错为nil,通过redis-cli查看前缀有乱码

public void set(String key, String value, long timeout) {redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);} 改完之后 public void set(String key, String value, long timeout) {redisTemplate.setKeySerializer(new StringRedisSerializer()…

前端工程化10-webpack静态的模块化打包工具之各种loader处理器

9.1、案例编写 我们创建一个component.js 通过JavaScript创建了一个元素,并且希望给它设置一些样式; 我们自己写的css,要把他加入到Webpack的图结构当中,这样才能被webpack检测到进行打包, style.css–>div_cn.js–>main…

【架构】分布式与微服务架构解析

分布式与微服务架构解析 一、分布式1、什么是分布式架构2、为什么需要分布式架构3、分布式架构有哪些优势?4、分布式架构有什么劣势?5、分布式架构有哪些关键技术?6、基于分布式架构如何提高其高性能?7、如何基于架构提高系统的稳…

LabVIEW中modbusTCP怎样才能和profibusDP通信?

在LabVIEW中,Modbus TCP和Profibus DP是两种不同的工业通信协议,要实现这两者之间的通信,可以采用网关设备进行协议转换,或者通过一个中间设备(如PLC)进行数据桥接。以下是实现此通信的一些方法&#xff1a…

客家菜餐馆点菜小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,菜系管理,菜品信息管理,我的订单管理,桌号管理,退款信息管理 微信端账号功能包括:系统首页,菜品信息&#…

220V降5V芯片输出电压电流封装选型WT

220V降5V芯片输出电压电流封装选型WT 220V降5V恒压推荐:非隔离芯片选型及其应用方案 在考虑220V转低压应用方案时,以下非隔离芯片型号及其封装形式提供了不同的电压电流输出能力: 1. WT5101A(SOT23-3封装)适用于将2…