華為#harmonyos2.0#開發界面曝光,將傳統UI界面設計封裝到分散式UI框架,讓UI開發效率倍增,一個設計動作就能簡單的適配到手機、手錶、平板、電視、車機等終端,感覺鴻蒙這次真成了,成熟度已經到了一個非常高的水準。

另外,在現場展示機上已經可以一窺HarmonyOS系統身影了。搭載鴻蒙系統的樣機是華為P40,在系統界面可以看到有「HarmonyOS」字樣,為了保證兼容目前安卓app,採用了雙內核也就是同時兼容安卓內核,未來隨著開發者的加入和生態的成熟,一個更加強大的自主的鴻蒙系統指日可待!


作為一個業餘app開發者,曾經開發過幾個安卓App(原生、uniapp、flutter都有),也研究過React Native,今天剛得知華為的鴻蒙2.0beta的開發工具釋出了,就嘗試了一下。

鴻蒙的IDE(集成開發環境)DevEco Studio是基於IntellJ IDEA開發的,這是一款非常優秀的IDE了有著非常優秀的代碼提示功能,而安卓的IDE --Android Studio也是基於IntellJ IDEA開發的,這倆IDE算是同源了,所以操作邏輯上對於安卓開發者非常熟悉。

不過這個IDE其實在電視版鴻蒙釋出的時候就發布了,現在終於能用它來開發手機應用了。

開發應用可以使用Java、Javascript、C。對於安卓開發者來說,鴻蒙的項目結構和安卓十分類似。使用C編程也類似於安卓的NDK,但是提供了很多特色的API。而使用Javascript開發則和微信、支付寶、QQ小程序類似,如果開發過小程序,只需要短暫學習便能掌握鴻蒙應用的開發。但是鴻蒙有很多安卓沒有的特色功能比如計算機視覺、二維碼掃描都被直接封裝成了系統內置的介面,可以減少第三方SDK的使用、加快開發速度。Java、Javascript的支持極大降低了開發者門檻,只要經過短暫的了解,小程序和安卓開發者就能直接上手鴻蒙開發、可以說是十分有誘惑力的。

但是對於Java的支持和安卓如此像,也不免讓人懷疑是否是安卓的套殼。我也帶著這個疑問繼續研究下去。

我根據官方提供的文檔和模板編譯了一個使用Java開發的App,並成功運行了起來

不過比較有意思的是,不同於安卓開發,可能是因為相關工具還沒做完。App並不是運行在本地虛擬機的,而是一個遠程設備。很可能我寫的App是真正的運行在一台支持鴻蒙的設備上或是遠程虛擬機上。打開遠程設備的關於手機:

設備名為P40,不過不清楚這是位於伺服器的P40虛擬機還是一台和P40同硬體環境的真機。

查看IDE的輸出,我可以看到App打包後被放在了項目目錄的entry/build/outputs/hap/debug/entry-debug-unsigned.hap下,按照傳統打包慣例,我將文件後綴名改為zip,成功打開,裡面有幾個文件

第一個文件夾叫assets,從名字上看是資源文件,裡面的內容也確實如此

第二個是一個apk,我解壓後嘗試在普通的安卓手機上安裝,發現能夠成功安裝,但是啟動會立即閃退。這個東西到底是幹什麼的呢,使用jadx(一款用來主要反編譯安卓App的軟體)打開APK,發現這個apk里確實蠻空的

看代碼應該是用來啟動應用的入口,但是暫時還不能確定。不過經過對遠程設備的研究發現,這款遠程設備會在我的本地創建一個支持adb的設備,我試了一下,發現能夠直接使用adb調試這個設備。既然能夠支持adb,我有個大膽的想法:開發者可以通過adb根據應用的包名將app打包回apk,那麼我將一個鴻蒙App打包會有什麼結果呢?如果打包成功並在其他手機上安裝,豈不是說鴻蒙App就是安卓App?於是我嘗試打包App

adb shell pm path com.example.harmonyproject1
adb pull xx/xxx.apk ./

第一條命令中com.example.harmonyproject1是我App的包名,在執行第一條命令後將會輸出apk保存的目錄, 接著使用第二條命令將打包的App拉取到我的電腦(xx/xxx.apk是第一條命令輸出的目錄)。打包成功輸出了一個apk,但是看著這個apk我陷入了沉思,這東西太小了,明顯不是一個App應該有的大小

不過這個大小和解壓得到的entry_signed_entry.apk大小一樣,這不會就是同一個東西吧?於是我對比了一下兩者的hash值

可以看到MD5、SHA1、SHA256的哈希值完全一樣 可以確定是一個東西了。也就是說這個apk,應該是類似於安卓系統中啟動鴻蒙App的入口。不能說有這個APK就是安卓套殼了。

第三個是config.json,從名字上看是一個配置文件,打開後查看,發現記錄了諸如包名、App圖標之類的配置。

config.json

第四個是classes.dex,安卓開發者們肯定知道,dex文件是安卓的Java虛擬機--ART的位元組碼文件,每一個安卓應用的邏輯代碼都會被打包為一個或多個dex文件,在App啟動時被載入進虛擬機。我使用jadx打開這個dex

打開後可以看到熟悉的代碼了,上面的是DEX文件反編譯的內容,下面是App真正的源碼

幾乎一模一樣 ,看樣子真相大白了:

鴻蒙的HAP文件中的entry_signed_entry.apk,是安卓系統中的一個App,在目前的鴻蒙2.0中,安裝一個鴻蒙應用會同時安裝這個APK,我們在桌面上點擊App圖標,會經過安卓系統啟動entry_signed_entry這個app,這個App啟動後會通過某種方式讓操作系統運行真正的App代碼,也就是HAP文件中的DEX文件。

但是這時一個問題出現了,某種意義上說DEX文件是安卓的Java運行時--ART的專屬格式。那麼這個DEX,是運行在ART中的,還是鴻蒙又自己實現了一個ART呢?這一點還很難知道,不過我認為ART經過多年發展,華為很難去在短時間內做出一個超越ART性能的Java虛擬機,程序的邏輯本身大概率還是運行在ART中,不過和大部分安卓App的啟動方式不同。但是即使這個DEX是運行在ART中,也不能說鴻蒙是安卓套殼,因為ART只是提供了一個運行時,並不實現系統調用比如UI渲染等、3D,我們可以在鴻蒙的文檔看到鴻蒙在ohos包中提供了一些有關圖像渲染的API,另外還有一些安卓沒有的API,這也是鴻蒙的優點了。

通過分析,可以看到鴻蒙確實是做了很多東西的。但是很顯然鴻蒙中還存在著很多對安卓本身的依賴而非為了兼容安卓必須做出保留的東西。鴻蒙才剛剛開始,離真正的成為一個獨立的操作系統還有很遠的路要走。


補充:手機上的鴻蒙OS是雙框架,所以能兼容運行Android應用,華為這個IDE編譯的程序不能運行在純Android系統中,因為有鴻蒙庫的依賴。

不廢話,直接上圖,下圖是我自己的電腦搭的開發環境,跑在華為P40虛擬機上的新聞APP demo,手機為現場搭載鴻蒙OS的P40,我自己手機還不支持,已經申請測試。

手機鴻蒙OS兼容Android App,有Linux Kernel內核。

鴻蒙OS申請測試入口:

開發語言是JAVA,對於JAVA我是完全不熟悉,當年上學的時候看過一本很不錯的的關於JAVA的書《Thinking in JAVA》,想轉碼農的可以看看。沒想到吧,我這都能帶貨,其實這本書真的很好,尤其是建立OO思想。

Java編程思想(第4版)拼多多拼團價¥ 70.20去購買?


什麼叫分散式?

鴻蒙系統流轉功能鴻蒙與跑步機鴻蒙與京東鴻蒙與優酷鴻蒙與鋼琴鴻蒙與電視購物鴻蒙與學習

和朋友聊了會,鴻蒙手機OS其實也就是EMUI11的平滑過渡,基本的操作邏輯和風格不變,整體上鴻蒙是一個萬物互聯的系統,它的所有app或者功能會在不同類型的設備之間流轉

這是華為想讓你看到的

追更一下,保姆級鴻蒙學習分享

https://www.harmonyos.com/cn/home/ (二維碼自動識別)

張榮超

李寧

李傳釗

跟新一下,鴻蒙系統推送了

已經可以刷機了

可以關注b戰賬號蒙娜麗寧


如果是真的,那祝越來越好。如果是假的,那也希望假的可以成真的。總之,自己有東西才不會跪著求別人。冷嘲熱諷,看熱鬧,自古以來從來不缺這樣的人,以後也不會缺。做自己的事讓別人去噴吧,只要在認真努力做,也許就像k3v2那樣,突然一天長成了麒麟9000。


推薦閱讀:
相关文章