HarmonyOS“一次开发,多端部署”

目录

一、核心概念与目标

二、开发基础问题与解决思路

(一)基础问题

(二)解决思路

三、应用开发流程与示例

四、工程管理具体操作

五、应用 UX 设计通用规则与考虑因素

一、核心概念与目标

  • 定义:一套代码工程,一次开发上架,多端按需部署。

  • 目标:帮助开发者快速高效开发支持多种终端设备形态的应用,实现跨设备的流转、迁移和协同的分布式体验,同时兼容不同设备并提供一致的用户体验。

二、开发基础问题与解决思路

(一)基础问题

  1. 不同设备间屏幕尺寸、色彩风格等差异导致页面适配问题。

  2. 不同设备系统能力差异(如智能穿戴设备是否具备定位能力、智慧屏是否具备摄像头等)影响功能兼容。

(二)解决思路

  1. 从 UX 设计角度考虑多设备的 “差异性”、“一致性”、“灵活性” 和 “兼容性”。

    • 差异性:充分了解设备特性(屏幕尺寸、交互方式、使用场景、用户人群等)进行针对性设计,参考设备设计指南。

    • 一致性:考虑设备共性,采用通用性设计方法,减少用户学习难度和开发成本。

    • 协同性:了解设备协同模式,展现多设备无缝流转体验,参考分布式设计指南。

  2. 工程管理方面采用合适的开发框架、程序包结构、部署模型和工程结构。

    • 方舟开发框架

      • 提供两种开发范式:

        • 声明式开发范式:采用 TS 语言,进行声明式 UI 语法扩展,从组件、动效和状态管理三个维度提供 UI 绘制能力,适用于复杂度较大、团队合作度较高的程序及移动系统应用开发人员、系统应用开发人员。其 UI 开发更接近自然语义编程,让开发者直观描述 UI 界面,且占用内存更少,更推荐使用。

        • 类 Web 开发范式:采用经典的 HML、CSS、JavaScript 三段式开发方式,适用于界面较为简单的中小型应用和卡片开发,更接近 Web 前端开发者习惯,可将已有 Web 应用改造成方舟开发框架应用。

    • 应用程序包结构

      • 应用包含一个或多个 Module,Module 是应用 / 服务的基本功能单元,分为 “Ability” 和 “Library” 两种类型。“Ability” 类型的 Module 编译后生成 HAP 包,“Library” 类型的 Module 编译后生成 HAR 包或 HSP 包。

      • 应用以 APP Pack 形式发布,包含一个或多个 HAP 包。HAP 分为 Entry 和 Feature 两种类型,Entry 类型是应用主模块,同一设备类型只支持一个,用于实现应用入口界面等;Feature 类型是应用动态特性模块,可包含一个或多个,也可不含。

    • 部署模型

      • 部署模型 A:不同类型设备通过一次编译生成相同的 HAP(或 HAP 组合),适用于相同泛类设备,UX 设计或功能相似的情况。

      • 部署模型 B:不同类型设备通过一次编译生成不同的 HAP(或 HAP 组合),适用于不同泛类设备,UX 设计或功能差异大的情况,但需审视设计及功能规划合理性。实际开发中常混合使用 A 和 B 模型,且都应采用一次编译。

    • 工程结构

      • 推荐 “三层工程结构”:

        • common(公共能力层):存放公共基础能力集合,可编译成 HAR 包或 HSP 包,只可被 products 和 features 依赖,不可反向依赖。

        • features(基础特性层):存放基础特性集合,feature 高内聚、低耦合、可定制,不需要单独部署的编译为 HAR 包或 HSP 包,供 products 或其他 feature 使用,需要单独部署的编译为 Feature 类型的 HAP 包,和 products 下 Entry 类型的 HAP 包组合部署,可横向调用及依赖 common 层。

        • products(产品定制层):针对不同设备形态进行功能和特性集成,各个子目录各自编译为一个 Entry 类型的 HAP 包,作为应用主入口,不可以横向调用。部署模型 A 和 B 的主要差异点在 products 层,A 在同一子目录中集成,B 在不同子目录中差异化集成。开发阶段应考虑代码复用,减少工作量。

三、应用开发流程与示例

(一)以天气应用为例的开发过程

  1. UX 设计

    • 从设备屏幕宽度维度将设备分为超小、小、中、大四类(当前以小、中、大设备场景为例,对应默认设备和平板等)。

    • 天气应用包含主页、管理城市和添加城市页面,主页有菜单和更新间隔弹窗。不同设备上应用整体风格保持一致,相近屏幕宽度布局基本不变,不同宽度布局有差异,小屏幕显示元素是大屏幕子集,大屏幕有独有元素(如侧边栏),体现 UX 的一致性和差异性。

  2. 工程管理及调试

    • 工程创建:在创建过程中勾选应用期望运行的目标设备类型。

    • 预览调试:开启预览器,打开 “Multi - profile preview” 开关观察不同设备表现,可新增自定义预览器。

  3. 页面开发

    • 天气主页

      • 划分为 9 个基础区域,1 - 8 区域尺寸及布局基本不变,用自适应布局以自定义组件实现,区域间布局用响应式布局栅格布局实现,基础区域 9 仅大设备显示,侧边栏通过媒体查询在大设备展示,展开和隐藏功能用侧边栏组件实现。

      • 每小时天气区域通过延伸能力实现,随显示区域增加展示更多信息。

    • 城市天气详情

      • 区域 1 - 8 可能无法一次性显示,外层用 Scroll 组件支持滚动。通过栅格布局在不同设备下划分不同列数实现三套不同布局,大设备侧边栏隐藏状态下调整 GridCol 栅格子组件的 order 属性改变每日天气与空气质量相对顺序。

    • 主页整体实现

      • 根节点用侧边栏组件,小和中设备不展示侧边栏及控制按钮,大设备默认展示并提供控制按钮。

      • 主页右侧城市天气详情,小和中设备用 Swiper 组件并开启导航点左右滑动切换城市,大设备通过侧边栏城市列表切换,关闭导航点。

    • 功能开发

      • 应用功能开发包括后端功能等,服务器端开发不在讨论范围。对于不同设备系统能力差异,如超小设备(智能穿戴等)因硬件限制裁剪系统,可在应用安装包描述所需系统能力,或在使用特定系统能力前通过 canIUse 接口判断系统能力是否存在,进而执行不同逻辑。

四、工程管理具体操作

  1. 使用 DevEco Studio 进行多设备应用开发,基于 DevEco Studio 3.1.1 Release 版本(不同版本可能功能界面和操作有差异)。

  2. 工程创建与结构优化

    • 不推荐直接使用平级目录管理模块,推荐 “三层工程结构”(common、features、product)。

    • 新建 Module:参考开发 ohpm 包,新建 common、feature1、feature2 等模块,以及 entry 类型的模块(如 wearable)。

    • 修改 Module 配置

      • 修改 Module 名称:如将默认的 entry 模块名称修改为 default。

      • 修改 Module 类型及其设备类型:通过修改 module.json5 配置文件,如将 default 模块的 deviceTypes 配置为 ["phone", "tablet"],type 字段配置为 entry,使其编译的 HAP 在手机和平板安装运行;将 wearable 模块的 deviceTypes 配置为 ["wearable"],type 字段配置为 entry,使其 HAP 在智能穿戴设备运行。

    • 调整目录结构:创建 product 和 features 子目录,将 default、wearable 等目录按规则拖拽到相应目录中。

    • 修改依赖关系:通过修改 oh - package.json5 文件配置依赖关系,使 product 目录中模块依赖 features 和 common 中的公共代码实现功能,提高代码复用率。修改后点击右上角 “Sync Now” 使改动生效。

  3. 引用 ohpm 包中的代码

    • 在 common 模块新增 ComplexNumber 类(表征复数及包含 toString () 方法)和 Add 函数(计算两数之和)。

    • 在 common/index.ets 文件中申明要 export 的类、函数名称及位置。

    • 在 default 模块等中 import 和使用这些类和函数,需提前在 oh - package.json5 文件中配置对 common 模块的依赖关系。

五、应用 UX 设计通用规则与考虑因素

  1. 遵循通用设计规则,考虑多设备的 “差异性”、“一致性”、“灵活性” 和 “兼容性”。

  2. 从多个方面进行考虑:

    • 设计理念:了解 HarmonyOS 设计系统核心理念,确保多设备一致体验。

    • 人因研究:了解人因研究对 UX 设计的科学指导。

    • 应用架构:了解常用应用架构并实践。

    • 人机交互:了解不同人机交互方式及注意事项。

    • 视觉风格:了解基础概念、色彩、字体、图标、插画、布局等关键视觉设计概念和规则。

    • 动效:了解时长、曲线、帧率等基础要素及特征、转场、手势动效设计方法和微动效、插画动效设计指导。

    • 声音:了解声音设计属性及关键声音元素在不同设备间的设计方法。

    • 多态控件:了解不同设备下多态控件特点及显示状态,确保正确使用。

    • 界面用语:确保用语风格统一、清晰明了、流畅自然。

    • 全球化:提供通用和个性化方案满足不同国家需求。

    • 无障碍:让视障用户正常使用设备,获得良好信息无障碍体验。

    • 隐私设计:保护用户隐私,让用户自主管控信息。

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

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

相关文章

Netty的简介与实战

Netty简介 一、背景与来源 Netty最初是由JBOSS提供的一个Java开源框架,现在已成为Github上的独立项目。它基于Java的NIO(New Input/Output)模型,提供了简单而强大的抽象,使得网络编程变得更加容易和高效。 二、特点…

macOS 15 Sequoia dmg格式转用于虚拟机的iso格式教程

想要把dmg格式转成iso格式,然后能在虚拟机上用,最起码新版的macOS镜像是不能用UltraISO,dmg2iso这种软件了,你直接转放到VMware里绝对读不出来,办法就是,在Mac系统中转换为cdr,然后再转成iso&am…

Unity3D学习FPS游戏(3)玩家第一人称视角转动和移动

前言:上一篇实现了角色简单的移动控制,但是实际游戏中玩家的视角是可以转动的,并根据转动后视角调整移动正前方。本篇实现玩家第一人称视角转动和移动,觉得有帮助的话可以点赞收藏支持一下! 玩家第一人称视角 修复小问…

mysql 十把锁之《小猫钓鱼》

元数据锁:在这个美丽的森林里,小猫们决定要把钓鱼的成果记录下来。于是,它们首先需要创建一个 “鱼表” 来存放钓鱼的信息。当开始创建鱼表的时候,数据库自动为这个表加上了元数据锁。这个锁是为了防止在表的结构定义等元数据被修…

NAT技术和代理服务器

NAT IP原理 之前我们讨论了, IPv4协议中, IP地址数量不充足的问题 NAT技术当前解决IP地址不够用的主要手段, 是路由器的一个重要功能;NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法:很多学校, 家庭, 公司内部采用每个终端设置私有…

学习力体系

一、故事引入 在一个小镇上,有一位年轻的学者小明,梦想成为一名科 学家。然而,他总是感到学习困难,知识无法长久保持。有一天,他遇到了一位智者,智者告诉他:“学习的力量能够改变命运。”小明意…

批处理操作的优化

原来的代码 Override Transactional(rollbackFor Exception.class) public void batchAddQuestionsToBank(List<Long> questionIdList, Long questionBankId, User loginUser) {// 参数校验ThrowUtils.throwIf(CollUtil.isEmpty(questionIdList), ErrorCode.PARAMS_ERR…

013:无人机航线规划的概念

摘要&#xff1a;航线规划是无人机任务规划的核心环节&#xff0c;它决定了无人机在整个任务执行过程中的飞行路径。航线规划需要考虑多种因素&#xff0c;包括飞行时间、飞行距离、能源消耗、飞行安全等。。 一、概述 1. 概念与目标 无人机航线规划&#xff0c;是指在特定任…

2023IKCEST第五届“一带一路”国际大数据竞赛--社交网络中多模态虚假 媒体内容核查top11

比赛链接&#xff1a;https://aistudio.baidu.com/competition/detail/1030/0/introduction PPT链接&#xff1a;https://www.ikcest.org/bigdata2024/zlxz/list/page.html 赛题 社交网络中多模态虚假媒体内容核查 背景 随着新媒体时代信息媒介的多元化发展&#xff0c;各种内容…

GitHub Star 数量前 5 的开源应用程序生成器

欢迎来的 GitHub Star 数量排名系列文章的第 7 篇——最受欢迎的应用程序生成器。 之前我们已经详细探讨过&#xff1a;在 GitHub 上最受欢迎的——无代码工具、低代码项目、内部工具、CRUD项目、自部署项目和 Airtable 开源替代品。累计超过 50 个优质项目&#xff01;&#…

python 跳过当前循环

在 Python 中&#xff0c;可以使用 continue 语句来跳过当前循环的剩余部分&#xff0c;并继续下一次循环。continue 语句用于跳过循环体中剩余的语句&#xff0c;并立即开始下一次迭代。 以下是一个简单的示例&#xff0c;演示了如何在 for 循环中使用 continue 语句&#xf…

橘子多开同步器 v6.0 免费版

下载&#xff1a; 【1】https://drive.uc.cn/s/ddb0774e92924?public1 【2】https://pan.quark.cn/s/b5b1aae8c331 橘子多开同步器是一款专门为了游戏工作室而打造的免费游戏客户端多开同步工具&#xff0c;涵盖了包括客户端多开、客户端键鼠同步、智能防封等功能。 功能介…

Linux 进程优先级 进程切换

目录 优先级 概念 为什么优先级要限制在一定范围内 进程切换 方式 EIP寄存器(程序计数器) 进程在运行时会使用寄存器来保存临时数据 进程的上下文是什么&#xff1f; 进程的上下文保存到哪&#xff1f; 内核栈或专门的上下文结构也在内核空间&#xff1f;那为什么不直…

海外逆向代购:新机遇下的跨境赚钱之道

所谓逆向代购&#xff0c;即利用海外客源&#xff0c;将中国的优质商品反向代购至海外市场&#xff0c;实现跨境赚钱的同时&#xff0c;也让更多中国商品走向世界。 近年来&#xff0c;随着中国经济的飞速发展和消费水平的不断提升&#xff0c;中国商品在全球市场上的认可度越来…

基于springboot的旅游出行指南

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于springboot的旅游出行指南,java项目…

C++算法练习-day19——18.四数之和

题目来源&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目思路分析 题目要求在给定的整数数组 nums 和一个目标值 target 中&#xff0c;找出所有独特的四元组&#xff08;四个数&#xff09;&#xff0c;使得这四个数的和等于 target。需要注意的是&#xff0c;解…

Svelte 5 正式发布:新一代前端框架!

10 月 22 日&#xff0c;Svelte 5 正式发布&#xff01;该版本带来的更新主要包括&#xff1a; 重写框架&#xff1a;Svelte 5 是从头开始重写的&#xff0c;使得应用更快、更小、更可靠&#xff0c;并且代码更一致和符合习惯。 向后兼容&#xff1a;Svelte 5 几乎完全向后兼容…

把代码绑定到WPF中的textblock中

在WPF中&#xff0c;将数据绑定到TextBlock控件中是一个常见的操作&#xff0c;这样可以动态显示数据源中的数据。以下是如何将数据绑定到TextBlock的步骤&#xff1a; 定义数据源&#xff1a; 首先&#xff0c;你需要有一个数据源&#xff0c;它可以是一个属性&#xff0c;这个…

一个简单的例子,说明Matrix类的妙用

在Android、前端或者别的平台的软件开发中&#xff0c;有时会遇到类似如下需求&#xff1a; 将某个图片显示到指定的区域&#xff1b;要求不改变图片本身的宽高比&#xff0c;进行缩放&#xff1b;要求最大限度的居中填充到显示区域。 以下示意图可以简单描绘该需求 以Androi…

ETL、ELT和反向ETL都有什么不同?怎么选择?

数据处理是现代企业中不可或缺的一部分。随着数据量的不断增长&#xff0c;如何高效地处理、转换和加载数据变得尤为重要。本文将介绍三种常见的数据处理方式&#xff1a;ETL、ELT和反向ETL&#xff0c;帮助读者更好地理解和选择适合自己业务需求的方式。 一、ETL 定义&#…