前幾日,華爲EMUI官方微博正式宣佈改名爲HarmonyOS。java
這不就是說,之後華爲手機都是鴻蒙系統了嘛?鴻蒙還發出了一條視頻,視頻中顯示2021年6月2號將開啓鴻蒙操做系統及華爲全場景新品發佈會。預計如今支持EMUI11升級的機型,將所有支持升級鴻蒙系統。我這一瞅,這不就是明天準備推送了嘛,抓緊學習一波兒。程序員
以前一直有關注過鴻蒙系統,可是感受應該不會很快的大面積推送系統。直到看到這個新聞後,我才以爲是時候學一下鴻蒙系統了。編程
學習鴻蒙系統很是簡單,目前鴻蒙的文檔、開發者社區、學習視頻都很是多。個人主要學習方法就是跟着官網讀一遍文檔。而後文檔裏面沒了解過概念知識點整理一下。json
文檔中有一段關於鴻蒙的系統定位,看到這段文字介紹,就能夠總結出鴻蒙系統的三大特色:swift
從這段學習當中,讓我看到了鴻蒙的願景很是遠大。不只僅是能夠替代安卓系統,還能夠將全部的智能設備鏈接在一塊兒,實現萬物互聯。後端
我我的感受,想學鴻蒙的話,主要根據這張技術架構圖,應該就夠了。剩下的全部相關知識無非就是根據這張技術架構圖進行的擴展和補充。因此官方給出的這張技術架構圖就是重中之重了。安全
鴻蒙系統從下向上依次分爲:內核層、系統服務層、架構層和應用層。這四層初看起來,跟隔壁的安卓系統架構圖很是像啊,但又徹底不同。鴻蒙系統功能能夠根據實際須要,量身定製某些非必要的系統功能和模塊。架構
閱讀文檔時,系統服務層提供了方舟多語言運行時子系統。其中發現了以下這句話:框架
方舟運行時提供了C/C++/JS多語言運行時和基礎的系統類庫,也爲使用方舟編譯器靜態化的Java程序(即應用程序或框架層中使用Java語言開發的部分)提供運行時。
按照個人理解,這應該就是鴻蒙能夠實現多語言開發的關鍵吧。而後從網上找了一篇文章,瞬間明白了方舟編譯器作的事情。分佈式
無論是早期的電子管仍是如今的半導體晶體管,這些計算的基本單位能識別的只有電平的高低,在計算機中咱們就用0和1來表示。1和0的各類組合就是機器是能看懂的語言,也就是機器碼。計算機的初期,人們就是用0和1來寫成程序命令的,這種反人類的編碼顯然是程序員痛恨的,因而有了彙編語言,用字符來表示命令編碼,這就方便了不少,可是大型程序依然不可行,C\C++,JAVA等高級語言應運而生。能夠說高級語言是爲程序員設計的,也是爲大型的軟件工程設計的,所以逐步誕生了面向對象編程的繼承、多態以及回調、反射等機制,無論高級語言怎麼變化,處理器可以識別的都只是機器碼,編譯器就承擔了這個翻譯轉化的角色,這也是方舟編譯器要作的事兒。
如今的手機系統iOS之因此比Android系統更流暢的一個緣由,就是由於iOS沒有像Android同樣的虛擬機。Java之因此能夠作到跨平臺的緣由雖然是由於有虛擬機,可是在手機操做系統上,虛擬機卻拖累了Android。虛擬機打包成的字節碼雖然能夠作到於機器硬件無關,可是當程序執行的時候,仍是須要再次編譯成機器碼才能執行。也就是Java開發完的程序須要編譯兩次才能夠執行,反觀iOS則只須要一次。由於iOS有集成swiftc編譯命令的Xcode工具。
鴻蒙比安卓會更流暢的一個緣由也是由於沒有虛擬機,它採用了和iOS同樣的機制,生成安裝包時直接編譯成合適的機器碼。
從上面的圖中能夠發現,安卓應用在運行前須要靜態編譯,而後在ART虛擬機中,還須要執行解析器解析代碼。逐字解析以後,還須要JIT。這就產生了額外的開銷。反觀方舟編譯器,在開發階段,就已經將其可執行文件進行了靜態編譯工做,剩下的只須要安裝和運行便可。
方舟編譯器除了去掉虛擬機,還實現了多語言聯合開發。如今開發一款APP不多隻使用到一種語言的,在開發應用時會使用到各類其餘語言開發的庫,好比C語言。不一樣語言之間也是須要通訊、調用的。在安卓陣容中,採用的是不一樣語言在單獨的環境中,而後經過中間代碼編譯成機器碼去執行。並且是當程序運行時。這樣就會產生系統額外的開銷。
方舟編譯器採用的是,不一樣語言在開發環境中,就編譯成一套可執行文件,而後在運行環境中執行。
總結來講,方舟編譯器針對現有的安卓問題,採用解決思路就是開發階段解決。
我以爲,經過這樣的策略,對用戶而言手機系統APP確定是更快更流暢了,由於全部的開銷在開發階段就解決的差很少了,那程序運行時天然是快的。這就讓我想起了Xcode,如今光下載Xcode 12.5就須要11.7G的存儲空間,我電腦中Xcode就佔用了25G的存儲空間。
在開始學習以前,瞭解一下HarmonyOS應用的基礎知識。HarmonyOS應用軟件包由HAP(HarmonyOS App Package)和描述文件pack.info組成。一個HAP由代碼、資源、三方庫和配置文件組成。
一個App Pack的邏輯圖如上圖,這張圖包含了不少信息:
華爲開發者學院有一我的才計劃,裏面有一門課程HarmonyOS應用開發系列課(基礎篇)。經過本課程的學習,開發者可以具有運用HarmonyOS順利開發應用的能力。
接下來就是對這門課程進行學習,同時結合官網文檔進行補充行學習。
首先根據官方文檔給出的快速入門建立一個能夠實現頁面跳轉的小應用。
個人開發環境是MacOS,直接下載和安裝DevEco Studio便可。同時DevEco Studio須要登陸華爲開發者帳號,由於後續開發是須要使用到遠程模擬器,因此必須得有華爲開發者帳號。
安裝完成後,須要配置一下開發環境。按照官方給出的配置開發環境的方法,自動下載安裝了最新版本的HarmonyOS SDK安裝包。其中默認使用的是Java語言的SDK。由於還沒開始學怎樣用JS開發,我先不安裝JS語言的SDK包。如今的版本已是2.1.1.20了,比文檔上面要更新一些了。這個版本是2021年4月30日最新發布的一個版本。並且能夠發現個人API Version已是5了,後面建立項目時,須要選擇的版本應該也是對應上的。
老規矩,新環境都會建立一個hello world,代表環境是否搭建成功。
在建立項目時,我選擇的是API Version 5, 由於想體驗最新的API。
要想使用模擬器,必須登陸華爲開發者帳號。
登陸帳號後,選擇P40機型做爲模擬器,而後運行代碼到模擬器中。我運行完結果和文檔上面給出的圖片,有些出入。我界面當中的「Hello World」文字,並無在垂直方向居中,而是定格在了最上面。可是也說明了,開發環境搭建完成了。
在HarmonyOS中提供了Java UI框架,而Java UI框架又提供了兩種佈局方式:XML佈局和代碼佈局。爲撒HarmonyOS會提供xml佈局方式呢?
我想這多是架構者須要吸引部分Android開發者們,加入到鴻蒙系統的開發當中來。提供多種不一樣的開發方式,幫助鴻蒙系統發展和壯大。
文檔這裏並無說怎麼建立一個Button按鈕或者Text文本,而是直接給出了一段代碼。可是文檔中給出了是採用DependentLayout佈局,並且給出了Text和Button組件的鏈接地址。
我用DevEcoStudio建立的項目,按照文檔提示,打開ability_main.xml
文件,代碼以下:
<?xml version="1.0" encoding="utf-8"?> <DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent" ohos:orientation="vertical"> <Text ohos:id="$+id:text_helloworld" ohos:height="match_content" ohos:width="match_content" ohos:background_element="$graphic:background_ability_main" ohos:layout_alignment="horizontal_center" ohos:text="$string:mainability_HelloWorld" ohos:text_size="50px" /> </DirectionalLayout>
對比了一下文檔給出代碼,發現佈局方式不同,我這裏使用的是DirectionalLayout方式佈局,而文檔使用的是DependentLayout方式佈局。
按照文檔給出的步驟開始後,又發現一個問題,每次運行模擬器都須要從新安裝應用,從新運行應用才行,好像沒有相似Flutter同樣的熱更新。
後來發現使用文檔中提到的預覽器能夠解決實時預覽界面效果的問題。
最後我調整的代碼以下:
<?xml version="1.0" encoding="utf-8"?> <DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent" ohos:orientation="vertical"> <Text ohos:id="$+id:text_helloworld" ohos:height="match_content" ohos:width="match_content" ohos:background_element="$graphic:background_ability_main" ohos:layout_alignment="horizontal_center" ohos:text="$string:mainability_HelloWorld" ohos:text_size="50px" /> <Button ohos:id="$+id:button" ohos:width="match_content" ohos:height="match_content" ohos:text="Next" ohos:text_size="19fp" ohos:text_color="#FFFFFF" ohos:top_padding="8vp" ohos:bottom_padding="8vp" ohos:right_padding="70vp" ohos:left_padding="70vp" ohos:center_in_parent="true" ohos:layout_alignment="horizontal_center" ohos:below="$id:text_helloworld" ohos:margin="10vp" ohos:background_element="$graphic:background_button"/> </DirectionalLayout>
由於是拷貝的官方文檔代碼,可是須要調整的地方爲:
ohos:layout_alignment="horizontal_center"
用代碼建立UI佈局就是在Java文件中,編寫佈局代碼。直接拷貝文檔給出的代碼便可。
此次運行的效果跟文檔上面一致了。而後有幾處注意點
至此文檔上的快速入門手冊就運行成功了。雖然代碼全是拷貝,也並不知道其中的概念。因此還須要進一步學習。
掌握了上面這些基礎知識後,再去學習華爲給出的課程就很是簡單了。認真看一遍官網給出的視頻介紹,而後聽聽每節課後面的答疑,最後作作每節課的考覈。全都完成以後,只須要作一份畢業考試題,就能夠了。
這是我第一次線上學習帶有華爲認證的課程,並且今天恰好是6月1兒童節,但願本身天天都依然充滿童心檢查學習下去✌️✌️✌️。
這個證書其實就是證實有了一個對HarmonyOS基礎的認識而已。離真正能開發HarmonyOS應用的能力還差很多距離,後續還須要繼續努力💪💪💪。