公元 2021 年 6 月 2 日,【 HarmonyOS2.0 】正式发布,以 JavaScript 做为 IoT 应用开发的架构语言,这是继 SpaceX 上天以后 JavaScript 再一次成为开发领域的热点话题。今天我就来和你们分享下 HarmonyOS 以及 HarmonyOS 中的 JavaScript GUI 技术栈。css
鸿蒙 OS2.0 正式发布,引来广大网友的热议。那么鸿蒙 OS 是什么?鸿蒙 OS 是否是安卓套壳?鸿蒙 OS 对咱们前端开发有什么影响?鸿蒙 APP 应该如何开发?阅读本文,将带领你一步一步了解鸿蒙,回答这些问题,如今就让咱们带着这些问题去深刻了解鸿蒙吧。前端
HarmonyOS 是一款“面向将来”、面向全场景(移动办公、运动健康、社交通讯、媒体娱乐等)的分布式操做系统。在传统的单设备系统能力的基础上,HarmonyOS 提出了基于同一套系统能力、适配多种终端形态的分布式理念,可以支持手机、平板、智能穿戴、智慧屏、车机、PC、智能音箱、耳机、AR/VR 眼镜等多种终端设备。git
HarmonyOS 经过 OpenHarmony 提供 IoT 相关系统的底层实现 + 手机侧的 HarmoneyOS 实现 1 +8 + N 的全场景分布式操做系统。小程序
鸿蒙系统的代码地址:sass
说到鸿蒙系统你们确定想知道 HarmonyOS 究竟是不是套壳的安卓系统?markdown
咱们从如下几个方面分析:架构
2. 鸿蒙架构
复制代码
JIT:(Just In Time)即时编译机制,当 App 运行时,会将用户常用的功能编译为机器能直接执行的 010101 机器码,暂时储存起来,不用一句一句地去翻译。框架
AOT : (Ahead of Time) App 在下载后安装到手机上时同时把能编译的代码先编译成机器听得懂的 101010;剩下不太好翻译的代码,就在用户使用时再叫醒解释器来编译。less
AOSP: "Android Open Source Project"的缩写。中文意为"Android 开放源代码项目"。
经过对比咱们能够发现,鸿蒙系统中虽然使用的名称不一样。可是和安卓的总体架构是比较相似的。以安卓层级横向对比鸿蒙:
具体讲讲分布式软总线几个工做模块:
实际上整个分布式软总线就是一个私有的 RPC 协议。以此 RPC 协议为基础封装了一系列经常使用的 API ,屏蔽了设备之间的繁琐、多种多样、差别很大的通信方式,提供了稳定、统1、可靠的近场通信协议。
RPC 远程过程调用(Remote Procedure Call),RPC 是为了解决 IPC (进程间通讯)所用的通信技术,早在 1981 年由 Nelson 提出并开始发展。 RPC 在分布式系统中的系统环境建设和应用程序设计中有着普遍的应用。
在危险的边缘试探——方舟编译器环境支持的新浪新闻极速版 APP 分析
在线体验编辑器:
playground.harmonyos.com/#/cn/online…
鸿蒙系统和安卓有很大的区别,鸿蒙不光是一个手机系统,而是一个 IoT 操做系统。而问鸿蒙是否是套壳的安卓,就比如问水果沙拉是否是苹果同样。
当前的鸿蒙 OS2.0 很大程度上只是基于 AOSP 的二次开发,并提供了一个以 Ability 为核心的应用开发框架,使其能够屏蔽不一样操做系统的差别,使开发的代码能够在不一样操做系统中运行。而且使用方舟编译器,提早编译机器码,使得 APP 在支持方舟编译器的手机系统中,运行更加流程,提高性能。
(图片来源:有大神研究过华为 P40 上的鸿蒙 OS 2.0 吗?事实它究竟是个全新的自主操做系统仍是个套壳安卓? - 知乎)
首先对于 IOS 开发者来讲,几乎没有什么影响。
对于安卓开发者来讲,若是只是作手机端 APP 不考虑多端兼容的话,还能够继续使用安卓开发,可是想要使用鸿蒙系统去开发多端兼容的 APP,则须要将现有项目进行迁移,迁移成本不算特别高。由于鸿蒙支持使用 JAVA 开发应用,对于安卓开发者来讲十分友好。
对于前端开发者来讲,实际影响也不大,并且前端开发者也能够只用本身熟悉的 HML+CSS+JavaScript 的开发模式开发原生应用。
鸿蒙系统对前端开发人员十分友好,经过 HML+CSS+JavaScript 的开发方式,能够快速的实现一个鸿蒙原生 APP。
做为前端同窗,咱们一般会有 H五、React Native、小程序等几种类型项目的开发,那么鸿蒙系统的发布对咱们有什么影响呢?
Flutter 实践:参见附录。
在咱们开始实现小功能以前,首先咱们要先了解一个鸿蒙 APP 的组成。
Eg:
JS 应用开发框架包括 JS 数据绑定框架(JS Data binding)、JS 运行时(JS runtime)和 JS 框架(JS framework)。
接着咱们了解整个 JS UI 的总体架构:
接着,咱们须要了解鸿蒙 APP 使用 HML + CSS + JavaScript 的语法 。
<!-- 数据绑定 -->
<div class="container">
<text class="title {{className}}">
hello {{word}}
</text>
</div>
<!-- 绑定事件 -->
<div>
<!-- 经过'@'绑定事件 -->
<div @click="clickfunc('哈哈')"></div>
<!-- 经过'on'绑定事件 -->
<div onclick="clickfunc"></div>
<!-- 使用事件冒泡模式绑定事件回调函数。5+ -->
<div on:touchstart.bubble="touchstartfunc"></div>
<!-- 使用事件捕获模式绑定事件回调函数。5+ -->
<div on:touchstart.capture="touchstartfunc"></div>
<!-- on:{event}等价于on:{event}.bubble。5+ -->
<div on:touchstart="touchstartfunc"></div>
<!-- 绑定事件回调函数,但阻止事件向上传递。5+ -->
<div grab:touchstart.bubble="touchstartfunc"></div>
<!-- 绑定事件回调函数,但阻止事件向下传递。5+ -->
<div grab:touchstart.capture="touchstartfunc"></div>
<!-- grab:{event}等价于grab:{event}.bubble。5+ -->
<div grab:touchstart="touchstartfunc"></div>
</div>
<!-- 列表渲染 -->
<list class="tag-list">
<list-item for="{{(index, item) in taskList}}" class="todo-list-item" focusable="false" tid="id" >
<todo-list-item item="{{item}}" index="{{index}}" @item-change='handleClick'></todo-list-item>
</list-item>
</list>
<!-- 条件渲染 -->
<div class="container">
<text if="{{show}}"> Hello-One </text>
<text elif="{{display}}"> Hello-Two </text>
<text else> Hello-World </text>
</div>
<!-- 模板引用 -->
<!-- template.hml -->
<div class="item">
<text>Name: {{name}}</text>
<text>Age: {{age}}</text>
</div>
<!-- index.hml -->
<element name='comp' src='../../common/template.hml'></element>
<div>
<comp name="Tony" age="18" @customer-click='handleClick'></comp>
</div>
复制代码
逻辑像素 px(文档中以< length >表示):
百分比(文档中以< percentage >表示):
表示该组件占父组件尺寸的百分比,如组件的 width 设置为 50% ,表明其宽度为父组件的 50%。
/* 支持样式导入 */
@import '../../common/style.css';
.container {
justify-content: center;
}
/* 支持伪类(:disabled :focus, :active, :waiting, :checked) */
.button:active {
background-color: #888888;/*按钮被激活时,背景颜色变为#888888 */
}
/* 支持less sass scss */
@colorBackground: #000000;
.container {
background-color: @colorBackground; /* 使用当前less文件中定义的变量 */
}
复制代码
// 模块导入
import router from '@system.router';
import utils from '../../common/utils.js';
export default {
data: {
keyMap: {
OS: 'HarmonyOS',
Version: '2.0',
},
},
handleClick(e){
console.log(e.target)
},
getAppVersion() {
this.$set('keyMap.Version', '3.0');
console.info("keyMap.Version = " + this.keyMap.Version); // keyMap.Version = 3.0
this.$delete('keyMap');
console.info("keyMap.Version = " + this.keyMap); // log print: keyMap.Version = undefined
}
}
// 模板组件
export default {
data: {
title:'',
},
props: {
name:{
default: '哈哈怪'
}
}
handleClick(index, e){
this.$emit('customerClick',{
index,
e,
})
}
}
复制代码
了解了基本语法以后咱们一块儿来实现一个 TodoList,来熟悉下鸿蒙系统的开发流程。
「扫描二维码便可获取视频」
在危险的边缘试探——方舟编译器环境支持的新浪新闻极速版 APP 分析
有大神研究过华为 P40 上的鸿蒙 OS 2.0 吗?事实它究竟是个全新的自主操做系统仍是个套壳安卓? - 知乎
鸿蒙 Harmony 谈了这么久,和 Android 到底啥区别?
欢迎关注「 字节前端 ByteFE 」
简历投递联系邮箱「tech@bytedance.com」