公元 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」