【笔记】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.hqwc.cn/news/508455.html

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

相关文章

Python爬虫——解析常用三大方式之JsonPath

目录 JsonPath 安装 使用 我们的json数据 基本使用 案例 总结 JsonPath 主要适用于解析一些json的数据 安装 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ jsonpath 使用 obj json.load(open( json文件 , r , encoding utf-8 ) )ret jsonpath.…

【C++ 函数栈】栈区保存函数参数和函数调用的过程

目录 1 调用过程 🙋‍♂️ 作者:海码007📜 专栏:C专栏💥 标题:【C 函数栈】栈区保存函数参数和函数调用的过程❣️ 寄语:人生的意义或许可以发挥自己全部的潜力,所以加油吧&#xff…

yolov5训练太慢的解决方案

问题原因 训练太慢大多是因为没有安装CUDA和pytorch,导致的只有cpu在跑,显卡没跑 这就是很典型的。 解决方案 第一步:安装CUDA 在本机上面安装CUDA,记住只有N卡可以安装,一开始的电脑是自带CUDA的。 如果不是自带的CUDA&…

自己本地模拟内存数据库增删改查

目录 学习初衷准备代码实现结果感谢阅读 学习初衷 用于满足自己的测试要求,不连接数据库,也不在意数据丢失 准备 maven依赖 org.springframework.boot spring-boot-starter-test test 代码实现 内存数据库(InMemoryDatabase&#xff0…

Java中的List

List集合的特有方法 方法介绍 方法名描述void add(int index,E element)在此集合中的指定位置插入指定的元素E remove(int index)删除指定索引处的元素,返回被删除的元素E set(int index,E element)修改指定索引处的元素,返回被修改的元素E get(int inde…

【OpenGL编程手册-04】详细解释着色器

着色器 目录 一、说明二、着色器语言GLSL2.1 典型的着色器代码2.2 数据类型2.2.1 向量 2.3 输入与输出2.3.1 顶点着色器2.3.2 片段着色器 2.4 Uniform2.5 函数后缀含义2 .6 更多属性! 三、我们自己的着色器类四、从文件读取五、 编译着色器练习 一、说明 在Hello T…

故障诊断 | 一文解决,XGBoost极限梯度提升树的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,XGBoost极限梯度提升树的故障诊断(Matlab) 模型描述 XGBoost通过集成多个决策树来建立一个强大的预测模型。它采用了一种特殊的梯度提升技术,称为极限梯度提升(Extreme Gradient Boosting),以提高模型的性能和鲁棒性。 极限梯度…

足球青训俱乐部|基于Springboot的足球青训俱乐部管理系统设计与实现(源码+数据库+文档)

足球青训俱乐部管理系统目录 目录 基于Springboot的足球青训俱乐部管理系统设计与实现 一、前言 二、系统设计 1、系统架构设计 三、系统功能设计 1、管理员登录界面 2、公告信息管理界面 3、学员管理界面 4、商品信息管理界面 5、课程安排管理界面 四、数据库设计…

Hackthebox - Authority

#ansible #Certify 赛博雨天:https://yutianqaq.github.io/ Recon smb smbmap -H 10.10.11.222 -u 挂载 smb 到 kali mount -t cifs //10.10.11.222/Development ./smb -o usernamesmb 在 cat smb/Automation/Ansible/PWM/defaults/main.yml 得到 ansible 的加…

java012 - Java集合基础

1、集合基础 1.1 集合概述 引用数据类型包括:类、接口、数组[] 1.2 ArrayList构造和添加方法 代码: 空集合对象:[] add() add(int index,E element): 1.3 ArrayList集合常用方法

前端开发 VSCode 插件推荐

1、Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code VS Code 的中文(简体)语言包,此中文(简体)语言包为 VS Code 提供本地化界面。 下载地址:Chinese (Simplified) (简体中文) La…

六、矩阵问题

73、矩阵置零(中等) 题目描述 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a…