華為開發者大會已經結束不久,我想大家應該都知道鴻蒙系統是基于什么語言開發的了。實際上大部分操作系統的開發基本上離不開C/C++、匯編語言、JAVA這三種編程語言。不過,我相信有大部分朋友應該不知道成為鴻蒙系統的開發者,這些編程語言發揮著什么作用?應用在鴻蒙系統里的哪一方面?如果你是一名開發者,要通過哪些書籍升華知識呢?
linux
我們都知道鴻蒙系統是基于Linux開發的,它的源碼是C++語言。由于Linux可以運行在多種硬件平臺上,所以基于此開發的鴻蒙系統可以盡可能的兼容適配更多的硬件設備,開發者在上面開發應用相對來說也會更簡單一些。而且鴻蒙操作系統的組成是由四部分組成的:Linux內核+麒麟處理器的運行庫+編譯器+虛擬機,這樣Linux自然就是首選了。
C/C++
我們再來看看華為鴻蒙的方舟編譯器,從上面的圖片資料我們可以得知:
鴻蒙系統與方舟編譯器的思路是相似的,直接使用機器語言編寫App,取消Android/ target=_blank class=infotextkey>安卓系統的ART虛擬機,直接編譯為二進制機器碼。這樣子做有優點也有缺點,缺點是必須有大量的靜態方案、內存空間的要求更高了,優點是不需要中轉,執行的速度更快了。
其次,鴻蒙OS是用C/C++進行編寫軟件,所以對APP開發人員的要求提高了,這也就提高了鴻蒙建設生態鏈的技術要求。
Java
這是我培訓鴻蒙的一個課程內容思維導圖,從下面的圖片,我們可以明顯的看出來Java是經常會使用或要接觸到的編程語言,且鴻蒙2.0發布會表明鴻蒙OS用 JavaScript 開發鴻蒙應用。那我就主要跟大家簡單分析一下鴻蒙JavaScript GUI 技術棧~
- JS 框架層,可理解為一個大幅簡化的 Vue 式 JavaScript 框架
- JS 引擎與運行時層,可理解為一個大幅簡化的 WebKit 式運行時
- 圖形渲染層,可理解為一個大幅簡化的 Skia 式圖形繪制庫
這三個構成了一套面向嵌入式硬件的 GUI 技術棧。我個人認為對于 GUI 部分,國內凡是接觸過目前主流 Hybrid 式跨端方案或 JS 運行時研發的一線開發者,都很容易從源碼出發來理解它。下面我就逐層對其做一些解讀和分析。
JS 框架層
從最頂層的視角出發,要想用「鴻蒙 2.0」渲染出一段動態的文本,你只需要編寫如下的 HML(類 XML)格式代碼:
<!-- hello.hml -->
<text onclick="boil">{{hello}}</text>
之后在同級目錄編寫這樣的 JavaScript:
// hello.js
export default {
data: {
hello: 'PPT'
},
boil() {
this.hello = '核武器';
}
}
這樣只要點擊文本,就會調用boil方法,讓PPT變成 核武器。
JS 引擎與運行時層
JS引擎和運行時之間,有什么區別與聯系呢?JS引擎一般只需符合ECMA-262規范,其中沒有對任何帶「副作用」的平臺API的定義。從setTimeout到document.getElementById到console.log再到fs.readFile,這些能執行實際IO操作的功能,都需要由「將引擎API和平臺API膠合到一起」的運行時提供。
那么在「鴻蒙 2.0」里,JS運行時是怎么搭建出來的?
- JS引擎選擇了JerryScript,這是一款由三星開發的嵌入式JS引擎。
- 每種形和<text>和<div>的XML標簽組件,都對應一個綁定到JerryScript上的C++ Component 類,如TextComponent和DivComponent等。
- 除UI原生對象外,還有一系列在JS中@system為前綴的 built-in 模塊,它們提供了JS中可用的Router / Audio / File等平臺能力(參見ohos_module_config.h)。
圖形繪制層
JS運行時中的各種Component對象,是如何被繪制為手表等設備上的像素的呢?這就有關于「鴻蒙 2.0」中的另一個graphic_lite倉庫了。可以說,這里才是真正執行實際繪制的GUI。像之前的TextComponent等原生組件,都會對應到這里的某種圖形庫View。它以一種相當經典的方式,在C++層實現并提供了「Canvas風格的立即模式GUI」和「DOM風格的保留模式GUI」兩套API體系。總的來說,這個圖形子系統的要點大致如下:
- 圖形庫提供了UIView這個C++控件基類,其中有一系列形如OnClick /OnLongPress/OnDrag的虛函數。基本每種JS中可用的原生Component類,都對應于一種UIView的子類。
- 除了各種定制化View之外,它還開放了一系列形如DrawLine/DrawCurve/DrawText等命令式的繪制方法。
- 這個圖形庫具備名為GFX的GPU加速模塊,但它目前似乎只有象征性的FillArea矩形單色填充能力。
為了幫助大吉盡快的熟悉了解鴻蒙OS開發應用,我給大家推薦了幾本編程語言經典入門書籍,大家可以去看一看~
1.C程序設計語言
鴻蒙OS是用C/C++進行編寫軟件,而且在計算機發展史上,沒有哪一種程序設計不用C語言。我們所熟知的“hello,world”就是這本書首次引入的,并且這一程序已經是眾多程序員設計語言的第一選擇!
2.《匯編語言》
這本書采用了全新的結構對課程的內容進行組織,對知識進行很小化分割,為讀者構造了循序漸進的學習線索。匯編語言就是把0與1的集合用特殊的字母或者符號來表示,比如說01000001代表的是A,01100001代表a,于是就有字母和符號來表達一大堆的0與1,比如0100000101100001直接使用Aa來表示即可,所以匯編大大簡化了二進制代碼,給我們編寫代碼帶來了極大的方便!但是計算機是不認識這些字母和符號的,所以需要一個專門的程序來把這些字母和符號來轉換成0與1的代碼,計算機才會執行,這個轉換的程序就是編譯器~
3.《JavaScript權威指南》
《JavaScript權威指南》主要介紹JavaScript語言的核心內容,以及web瀏覽器中實現的遺留和標準的DOM。比較適合有經驗的開發者~
4.《Java從入門到精通》
顧名思義,這本書適合初學者翻閱,里的語言通俗易懂,并且有豐富的案例,全書詳細介紹了使用Java語言進行程序開發要用到的知識。由淺入深,實戰演練敘述:基本知識→關鍵技術→高級運用→新項目實戰演練,合乎認知能力規律性。包含初識Java,了解Eclipse開發環境,Java語言基本,步驟操縱,字符數組,數組,類和對象,包裝類等內容。
5.《Linux內核設計與實現》
安卓系統是基于Linux開發,蘋果IOS系統是基于Unix開發,而華為自主研發的鴻蒙系統基于Linux開發,由此可見,Linux語言的重要性。這本書詮釋了Linux內核的設計與實現。想了解鴻蒙系統的開發者可以通過這本書受益匪淺,幫助他們更了解操作系統,而且提高編碼中的效率和生產率。
6.《第一行代碼Android》
《第一行代碼Android》被譽為安卓開發者的學習經典,整本書一步一步、全面的介紹了安卓開發的知識和經驗技巧。
《華為HMS生態與應用開發實戰》
這本書是基于華為終端服務多年的技術積累和對移動應用生態發展的理解,結合HMS典型的開放能力和實際的業務場景,通過實戰方式詳細描述如何使用HMS開放能力快速完成移動應用的開放和上架。
這本書前面兩章介紹HMS Core生態發展歷程和HMS Core生態整體架構及接入機制等,適合所有人閱讀!后面幾章介紹Kit快速集成,搭建實戰環境,深入講解每個Kit的功能原理,并通過一個支撐所有Kit集成業務的場景,詳解每個Kit的實戰環節,包括Account Kit、IAP Kit、Push Kit、Location Kit等,以幫助開發者了解如何快速接入HMS開放的各項能力。
最后,我覺得成為鴻蒙OS的開發者,學什么語言不如去進行系統化學習。想成為一名鴻蒙開發者最好是有一個系統的培訓,如果是自學會比較吃力,當然不是老王不推薦自學,只是系統化的學習知識會更加牢固,而且學習的速度也會比較快,節省時間~而且自學考鴻蒙應用開發證書的路途太坎坷了,不一定能拿到證書,想要進入鴻蒙OS應用開發的相關公司工作,證書是一個門檻,所以我推薦大家系統學習!
大家有想要進行系統化學習鴻蒙系統的話,可以私聊我哈。
——————
原創:老王丨鴻蒙hms開發者高級認證持證人!學習更多鴻蒙OS相關開發技術可以關注我的公眾號:鴻蒙開發者老王