【笔记】OpenHarmony和HarmonyOS区别及应用开发简介

一、概念

  • OpenHarmony(OH) : OpenAtom OpenHarmony
  • HarmonyOS(HO):开发 | 华为开发者联盟 (huawei.com)

HO当前最高是3.1,在华为mate 60上面也是。关于4.0、5.0和next这类版本说法都是面向用户的,不是开发人员。对于程序员,最高只到了版本3。

OH基于内核,市面了解的是叫HO。先有内核版本才有应用层版本,因此OH的版本会比HO高级。

(一)HarmonyOS

分为应用开发和设备开发,这里只关注HarmonyOS鸿蒙应用开发了。

(二)OpenHarmony

OpenHarmony 4.0 Release对应API能力级别为API 10 Release,

HO比OH找工作容易(估计是应用层需求大上手多),但是OH的API更加完善。

二、开发工具 IDE(DevEco Studio)

v3和v4的DevEco 的SDK是不大相同的(下载链接也是),而且新的都建议用v4。

  • OH 4.0 DevEco Studio 安装包 :OpenHarmony-v4.0-release
  • HO 3.1 DevEco Studio 安装包 :HUAWEI DevEco Studio 3.1.1 Release
    • 版本说明-DevEco Studio-工具 | 华为开发者联盟 (huawei.com)

(一)HarmonyOS v3.1.1 Release

DevEco Studio 3.1.1 Release 安装包下载
DevEco Studio 3.1.1 Release 安装包下载

版本信息:

DevEco Studio 3.1.1 Release 版本信息​​​

DevEco Studio 3.1.1 Release
Build Version: 3.1.0.501, built on June 20, 2023
Build #DS-223.8617.56.36.310501
Runtime version: 17.0.6+10-b829.5 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.

SDK版本:

(二)OpenHarmony-v4.0-release

最新版本,SDK=10,设置OH版本到API10。

24年1月华为发布Next版本,可能会存在以往的版本不兼容问题。

三、应用开发

1、SDK

在设置中检查项目SDK,可以切换HarmonyOS(当前最高9)和OpenHarmony(10)

SDK
Settings-SDK

Note:下载OpenHarmony SDK的路径必须跟HarmonyOS的不同

安装 OpenHarmony SDK
下载 OpenHarmony SDK 及路径配置

2、新建项目

创建项目时,不要新建Empty Ability,容易不兼容,建议新建【[OpenHarmony]Empty Ability】(DevEco 3没有的)

v4 Create Project
v4 Create Project
v3.1 Create Project
v3 Create Project

如果还是DevEco v3.1.1的版本会显示SDK 3.1,如果是v4的SDK则为10(这个不能在HaromonyOS上面跑,可能会模拟器手机报错)

3、项目配置

类似Android的build.gradle,有单独(entry目录下)和全局配置(项目) build-profile.json5

build-profile.json5 项目配置

4、HarmonyOS 开发支持

鸿蒙 {开发} 套件 万物互联时代的鸿蒙生态加速器

包含HarmonyOS应用/服务从设计、开发、测试、上架所需的关键技术和产品。(鸿蒙指华为终端鸿蒙智能设备操作系统软件)

上层应用开发所需工具和知识点:

ArkTS 应用开发语言

ArkTS 语言 | 华为开发者联盟 (huawei.com)

ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript(简称TS)基本语法风格的基础上,对TS的动态类型特性施加更严格的约束,引入静态类型。同时,提供了声明式UI、状态管理等相应的能力。

自然简洁语法

主要的布局就是build()的内容,外层通过stuct Index包装,最简版如下:(看起来类似Android开发,给注解加了个功能。)

//Index就是应用的入口
@Entry //装饰器,表示页面入口
@Component //组件,表示下述结构体有UI的能力
struct Index {build() {    //构建声明式UIText("Hello world").fontSize(50)}}

数据驱动UI,刷新机制,Binding。

//Index就是应用的入口
@Entry 
@Component //组件,表示下述结构体有UI的能力
struct Index {@State message: string = 'Hello World'build() {    //构建声明式UIRow() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)}.width('100%')}.height('100%')}
}
轻量化并发机制

ArkCompiler运行时在HarmonyOS上提供了Worker API支持并发编程。在运行时实例内存隔离的基础上,ArkCompiler通过共享运行实例中的不可变或者不易变的对象、内建代码块、方法字节码等技术手段,优化了并发运行实例的启动性能和内存开销。

ArkUI 界面开发框架

声明式UI框架ArkUI_跨端界面应用开发 | 华为开发者联盟 (huawei.com)

ArkUI是一套构建分布式应用界面的声明式UI开发框架。

3.1 UI 更新机制升级(布局渲染)

ArkUI3.1通过编译期生成特定函数的方式将UI组件更新数据变更进行细粒度地绑定,实现UI更新Diff算法从COMPONENT和ELEMENT树形结构对比升级为单节点NODE的函数式更新,极大简化了声明式开发范式UI组件树形结构,大幅度优化了UI组件布局渲染性能

COMPONENT和ELEMENT树形结构
COMPONENT和ELEMENT树形结构

=>

单节点NODE
单节点NODE函数
逻辑和UI分离(数据双向绑定机制)

逻辑和UI分离通过利用数据双向绑定机制传递页面变化逻辑,将流转7个步骤简化为2个步骤。可将跨端迁移协同的开发代码量降低40%以上。

优化前:数据流转7步

原Ability包含UI+Model,将其分离后,数据流转优化。

优化后:数据流转2步
Stage 模型(应用调度)

Stage模型开发概述-Stage模型开发指导-应用模型-开发 | 华为开发者联盟 (huawei.com)

提供十几种不同场景的扩展服务Extension机制,在保证了应用后台进程合理运行的基础上,规避了应用进程之间无序拉起,达到保证前台资源供给,应用调度更加有序的目的。

高级UI组件扩展能力

ArkUI框架提供了基于XComponent组件的C++自绘制引擎接入(比如游戏引擎)能力,和基于Web组件的HTML5/Web的渲染能力。满足了开发者在游戏、相机、地图、浏览器等复杂应用场景的开发诉求,降低了这类应用移植的门槛。

XComponent组件
XComponent组件 Demo

5、功能开发

代码语法类似flutter,compose。

代码结构

结构又像网页开发,index作为入口。好比Android的MainActivity吧。

index.ets 入口
index.ets 入口

设备类型

当前UI开发不用多虑设备类型(如手机、平板、手表等等),视为横竖屏两种类型即可。

开发过程中可以把PreviewerMuitl-prifile preview打开,就能看到不同设备的显示情况。

SDK API阅读

只能看到声明和二进制,不能像Android SDK那样看到java源码实现。

UI 调试

build中可以设置界面的属性和数值大小,通过侧边栏的Previewer->Inspector可以快速配置和查看界面情况。

四、学习规划

1、基本应用开发(2个月?10k+)

100w个岗位,Android 

2、应用高级原理,SDK开发,熟悉源码原理

3、高级开发,系统、硬件(南向)

GPIO PWM TCP UDP MQTT 线程管理,底层锁

系统移植、内核裁剪、驱动开发(摄像机、传感器)

Android 23种设计模式

刚开始学的时候不用看源码OpenAtom OpenHarmony,后面高级开发的时候需要熟悉。

  • OH源码下载:zh-cn/device-dev/get-code/sourcecode-acquire.md · OpenHarmony/docs - Gitee.com

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

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

相关文章

Springboot 项目读取yaml的配置文件信息给静态方法使用,以及通过配置 ResourceBundle 类读取config.properties

读取yaml 的配置文件 配置文件信息 iot_saas_tenement:user_id: 7........8d9bprivate_key: MII.......qQbj_url: http://4.....5:8088project_name: iot_s.......rojectdevice_name: te.....ice 创建一个类 ProxyProperties 读取配置文件信息,并对外提供get方法 …

内存的检测与排查

内存🐎的检测与排查 文章目录 内存🐎的检测与排查查杀Java Web filter型内存马0x01 内存马简历史0x02 查杀思路0x03 内存马的识别0x04 内存马的查杀 查杀Java Web filter型内存马 0x01 内存马简历史 其实内存马由来已久,早在17年n1nty师傅的…

QT6 libModbus 用于ModbusTcp客户端读写服务端

虽然在以前的文章中多次描述过,那么本文使用开源库libModbus,可得到更好的性能,也可移植到各种平台。 性能:读1次和写1次约各用时2ms。 分别创建了读和写各1个连接指针,用于读100个寄存器和写100个寄存器,读写分离。 客户端&am…

物联网与智慧城市:科技驱动下的城市智能化升级之路

一、引言 随着科技的不断进步和城市化进程的加速,物联网与智慧城市的结合已经成为推动城市智能化升级的关键力量。物联网技术以其强大的连接和数据处理能力,为智慧城市的建设提供了无限可能。本文旨在探讨物联网如何助力智慧城市的构建,以及…

SLAM ORB-SLAM2(21)基础矩阵的计算和评分

SLAM ORB-SLAM2(21)基础矩阵的计算和评分 1. 前言2. 基础矩阵2.1. 对级约束2.2. 推导2.3. 计算原理 3. ComputeF214. CheckFundamental 1. 前言 在 《SLAM ORB-SLAM2(20)查找基础矩阵》 中了解到 查找基础矩阵主要过程&#xff1…

web基础03-JavaScript

目录 一、JavaScript基础 1.变量 2.输出 3.变量提升 4.区块 5.JavaScript数据类型 6.查看数值类型 7.undefined和null 8.布尔值 9.和的区别 10.算数/三元/比较/逻辑/赋值运算符 11.特殊字符 12.字符串 (1)获取字符串长度 (2&am…

备战蓝桥杯Day21 - 堆排序的内置模块+topk问题

一、内置模块 在python中,堆排序已经设置好了内置模块,不想自己写的话可以使用内置模块,真的很方便,但是堆排序算法的底层逻辑最好还是要了解并掌握一下的。 使用heapq模块的heapify()函数将列表转换为堆,然后使用he…

41、网络编程/TCP.UDP通信模型练习20240301

一、编写基于TCP的客户端实现以下功能: 通过键盘按键控制机械臂:w(红色臂角度增大)s(红色臂角度减小)d(蓝色臂角度增大)a(蓝色臂角度减小)按键控制机械臂 1.基于TCP服务器的机械臂…

Python3零基础教程之数学运算专题进阶

大家好,我是千与编程,今天已经进入我们Python3的零基础教程的第十节之数学运算专题进阶。上一次的数学运算中我们介绍了简单的基础四则运算,加减乘除运算。当涉及到数学运算的 Python 3 刷题使用时,进阶课程包含了许多重要的概念和技巧。下面是一个简单的教程,涵盖了一些常…

勒索软件类型

勒索软件类型 加密勒索软件 它使个人文件和文件夹(文档、电子表格、图片和视频)被加密。受感染的文件被加密后会被删除,用户通常会在当下无法使用的文件的文件夹中看到一个包含付款说明的文本文件。当您尝试打开其中一个加密文件时,您才可能…

Tomcat负载均衡、动静分离

目录 引言 实验图解 1.实验环境搭建 2.部署Nginx服务器及配置静态页面Web服务 3.部署Tomcat服务及配置动态页面Web服务 4.实验验收 动态页面 静态页面 引言 tomcat服务既可以处理动态页面,也可以处理静态页面;但其处理静态页面的速度远远不如…

js优雅的统计字符串字符出现次数

题目如下 统计一串字符串中每个字符出现的频率 示例字符串 let str asdfasqwerqwrdfafafasdfopasdfopckpasdfassfd小白写法 let str asdfasqwerqwrdfafafasdfopasdfopckpasdfassfdlet result {}; for (let i 0; i < str.length; i) {if (result[str[i]]) {result[str[…

链表基础知识详解(非常详细简单易懂)

概述&#xff1a; 链表作为 C 语言中一种基础的数据结构&#xff0c;在平时写程序的时候用的并不多&#xff0c;但在操作系统里面使用的非常多。不管是RTOS还是Linux等使用非常广泛&#xff0c;所以必须要搞懂链表&#xff0c;链表分为单向链表和双向链表&#xff0c;单向链表很…

【Vue3】解锁Vue3黑科技:探索接口、泛型和自定义类型的前端奇迹

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

Android Compose - PlainTooltipBox(已废弃)的替代方案

Android Compose - PlainTooltipBox 的替代方案 TooltipBox(positionProvider TooltipDefaults.rememberPlainTooltipPositionProvider(),tooltip {PlainTooltip {Text(/* tooltip content */)}},state rememberTooltipState(), ) {// tooltip anchorIconButton(onClick {…

跨站脚本攻击xss-labs(1-20)靶机练手

目录 一、跨站脚本攻击&#xff08;XSS&#xff09; 1.1 漏洞简介 1.2:类型 1.3 XSS危害 1.4XSS防御规则 二、环境搭建 三、xsst通关记录 Level 1&#xff1a;文本解析为 HTML Level 2&#xff1a;htmlspecialchars;input 标签 value 注入 定义和用法 字符过滤绕过 …

从零自制docker-1-【环境配置 docker go介绍与安装】

文章目录 docker简介举例docker安装go语言go安装go 配置 docker简介 Docker可以看作是一种极其轻巧的“虚拟机”&#xff0c;它允许你将一个或多个程序及其运行环境打包在一起&#xff0c;形成一个标准化的单元&#xff0c;这个单元可以在任何支持Docker的系统上运行&#xff…

实用!IntelliJ IDEA离线开发使用要点(一)

如果IntelliJ IDEA在本地网络之外没有HTTP访问&#xff0c;它将无法检查更新和应用补丁。在这种情况下&#xff0c;您必须下载新版本的IDE并按照离线安装中的描述手动安装它们。 IDEA v2023.3正式版下载 注意&#xff1a;没有互联网接入&#xff0c;您不能安装IntelliJ IDEA使…

SaaS 电商设计 (九) 动态化且易扩展的实现购物车底部弹层(附:一套普适的线上功能切量的发布方案)

目录 一.背景1.1 业务背景1.2 技术负债 二.技术目标三.方案设计3.1 解决移动端频繁发版3.1.1 场景分析3.1.2 技术方案 3.2 减少后端坏味道代码&无法灵活扩展问题3.2.1 通过抽象接口完成各自单独楼层渲染逻辑3.2.2 通过配置能力做到部分字段可配 四.升级上线(普适于高并发大…

学习:吴恩达:什么是神经元?神经网络如何工作?

学习-吴恩达《AI for everyone》2019 深度学习非技术解释 第2部分 可选.zh_哔哩哔哩_bilibili 深度学习Deep learning 人工神经网络Artificial Neural network 什么是神经网络&#xff1f; 只有一个神经元 4个神经元的神经网络 神经网路的绝妙之处 神经网路的绝妙之处就在…