【笔记】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() {    //构建声明式UI
    Text("Hello world")
      .fontSize(50)
  }

}

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

//Index就是应用的入口
@Entry 
@Component //组件,表示下述结构体有UI的能力
struct Index {
  @State message: string = 'Hello World'

  build() {    //构建声明式UI
    Row() {
      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

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

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

相关文章

使用Docker快速部署Flink分布式集群

前言 大家是否记得自己是怎么开始学习大数据的内容呢,估计关注我得同学会发现前面有点陆续有点关于Docker的小烂文,是因为使用Docker可以最快的速度让我们拥有一个学习的环境。大数据的东西都逃不过搭建环境测试跑通这么一个过程,我自己也是…

【重温设计模式】命令模式及其Java示例

命令模式的介绍 在我们的编程世界中,设计模式如同一盏指路明灯,它们是前人智慧的结晶,为我们照亮了解决复杂问题的路径。 其中,命令模式是一种行为设计模式,其主要的目标是将操作封装到对象中。这种模式的一个显著特点…

Redis在中国火爆,为何MongoDB更受欢迎国外?

一、概念 Redis Redis(Remote Dictionary Server)是一个使用ANSI C编写的开源、支持网络、基于内存、分布式、可选持久性的键值对存储数据库。Redis是由Salvatore Sanfilippo于2009年启动开发的,首个版本于同年5月发布。 MongoDB MongoDB…

C语言指针的初步认识--学习笔记(2)

1.数组名的理解 我们在使⽤指针访问数组的内容时,有这样的代码: int arr[10]{1,2,3,4,5,6,7,8,9,10}; int* p&arr[0]; 这⾥我们使⽤ &arr[0] 的⽅式拿到了数组第⼀个元素的地址,但是其实数组名本来就是地址,⽽且 是数组…

redis 缓存击穿问题(互斥锁,逻辑过期)

1、缓存击穿问题 缓存击穿问题:一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。 场景:假设线程1在查询缓存之后,本来应该去查询数据库,然后把这个数据重新加…

LeetCode第125场双周赛个人题解

目录 100231. 超过阈值的最少操作数 I 原题链接 思路分析 AC代码 100232. 超过阈值的最少操作数 II 原题链接 思路分析 AC代码 100226. 在带权树网络中统计可连接服务器对数目 原题链接 思路分析 AC代码 100210. 最大节点价值之和 原题链接 思路分析 AC代码 10023…

react native封装ScrollView,实现(滑到底部)和(滑到顶部+手指继续向下滑)时拉取新数据

里面的tw是在react native中使用tailwind的第三方库 只求读者把样式看个大概,主要还是功能的实现 ScrollView的官方文档如下 https://reactnative.cn/docs/scrollview import tw from twrnc import { View, Text, ScrollView, RefreshControl } from react-native …

docker的简介--安装--操作命令

1.docker的简介 1.1docker是什么 用一句话来说docker就是一个新一代虚拟化技术 Docker是一种开源的平台,用于开发、交付和运行应用程序。它允许开发人员将应用程序和它们的依赖打包在一个容器中,然后部署到任何支持Docker的环境中。Docker的主要特点包括…

Javaweb之SpringBootWeb案例之自动配置的@Conditional源码的详细解析

3.2.3.2 Conditional 我们在跟踪SpringBoot自动配置的源码的时候,在自动配置类声明bean的时候,除了在方法上加了一个Bean注解以外,还会经常用到一个注解,就是以Conditional开头的这一类的注解。以Conditional开头的这些注解都是条…

Vue中如何实现条件渲染?

在Vue中实现条件渲染非常简单且灵活&#xff0c;主要通过Vue的指令来实现。在Vue中&#xff0c;我们可以使用v-if和v-else指令来根据条件来渲染不同的内容。下面就让我们通过一个简单的示例来演示如何在Vue中实现条件渲染&#xff1a; <!DOCTYPE html> <html lang&qu…

pytest-allure报告生成

pytest生成allure报告步骤&#xff1a; 下载allure&#xff0c;配置allure报告的环境变量&#xff1a;把allure-2.13.7\bin 配置到环境变量path路径 验证&#xff1a;在dos窗口和pycharm窗口分别验证&#xff1a;allure –version 2. 生成临时的json报告 在pytest.ini配置文…

3、JavaWeb-Ajax/Axios-前端工程化-Element

P34 Ajax介绍 Ajax:Asynchroous JavaScript And XML&#xff0c;异步的JS和XML JS网页动作&#xff0c;XML一种标记语言&#xff0c;存储数据&#xff0c; 作用&#xff1a; 数据交换&#xff1a;通过Ajax给服务器发送请求&#xff0c; 并获取服务器响应的数据 异步交互&am…

代码随想录day11(1)字符串:反转字符串中的单词 (leetcode151)

题目要求&#xff1a;给定一个字符串&#xff0c;将其中单词顺序反转&#xff0c;且每个单词之间有且仅有一个空格。 思路&#xff1a;因为本题没有限制空间复杂度&#xff0c;所以首先想到的是用split直接分割单词&#xff0c;然后将单词倒叙相加。 但如果想让空间复杂度为O…

ChatGPT 4.0使用之论文阅读

文章目录 阅读环境准备打开AskYourPDF进入主站 粗读论文直接通过右侧边框进行提问选中文章内容翻译或概括插图的理解 总结 拥有了GPT4.0之后&#xff0c;最重要的就是学会如何充分发挥它的强大功能&#xff0c;不然一个月20美元的费用花费的可太心疼了&#xff08;家境贫寒&…

抖音视频评论挖掘工具|视频批量采集软件

抖音视频评论挖掘工具——让你轻松获取大量评论数据 抖音视频评论挖掘工具是一款基于C#开发的高效、便捷的工具&#xff0c;旨在为用户提供全面的数据采集和分析服务。无论你是想了解用户对某个话题或产品的看法&#xff0c;还是想分析评论中的热点和趋势&#xff0c;这款工具都…

从0开始学习NEON(1)

1、前言 在上个博客中对NEON有了基础的了解&#xff0c;本文将针对一个图像下采样的例子对NEON进行学习。 学习链接:CPU优化技术 - NEON 开发进阶 上文链接:https://blog.csdn.net/weixin_42108183/article/details/136412104 2、第一个例子 现在有一张图片&#xff0c;需…

自建Web视频会议,视频互动,SFU/MCU融合架构选型方案分析

网络越来越好&#xff0c;大家已经越来越多接受在家在线办公&#xff0c;在线工作越来越离不开视频会议&#xff0c;视频互动&#xff0c;当然云平台很多&#xff0c;但也用不同的需求&#xff0c;很多需要自建平台与自已的业务系统集成对接。因为大家业务系统多是b/s架构。一般…

Flink StreamGraph生成过程

文章目录 概要SteramGraph 核心对象SteramGraph 生成过程 概要 在 Flink 中&#xff0c;StreamGraph 是数据流的逻辑表示&#xff0c;它描述了如何在 Flink 作业中执行数据流转换。StreamGraph 是 Flink 运行时生成执行计划的基础。 使用DataStream API开发的应用程序&#x…

远程调用--Http Interface

远程调用--Http Interface 前言1、导入依赖2、定义接口3 创建代理&测试4、创建成配置变量 前言 这个功能是spring boot6提供的新功能&#xff0c;spring允许我们通过自定义接口的方式&#xff0c;给任意位置发送http请求&#xff0c;实现远程调用&#xff0c;可以用来简化…

Android 开发环境搭建的步骤

本文将为您详细讲解 Android 开发环境搭建的步骤。搭建 Android 开发环境需要准备一些软件和工具&#xff0c;以下是一些基础步骤&#xff1a; 1. 安装 Java Development Kit (JDK) 首先&#xff0c;您需要安装 Java Development Kit (JDK)。JDK 是 Android 开发的基础&#xf…