圖片來源:[雜談] 鴻蒙開發工具,deveco,可以下載了


最後一次更新

12月開源前應該不會再更新了,更正一下,基於LiteOS內核是沒有java虛擬機的,java編寫的app只能是未來用在大內存設備上,目前小於128M內存的lite設備只能使用html+js的方法編寫、編譯程序,在LiteOS中使用華為已經開源的js framework運行app,目前系統整體架構如下圖所示(參考華為提供文檔中的JS架構增加了未來Java的一部分):

架構

內核包含了Linux這不是我自己加的,文檔中JS架構圖、驅動架構圖均出現了Linux,在驅動架構圖中還出現了micro微內核,手機端究竟如何只有等開源了才能揭曉答案。

官方原版架構圖:


再次更新

昨晚有空下載並閱讀了openharmony的源代碼,發現了新大陸。可以確定的是,在嵌入式設備中基於LiteOS內核,華為確實開發出了一套自己的app運行時framework、ability framework以及UI framework,並且與app開發中的java介面相一致。看得比較急,還沒找到java虛擬機的實現代碼,有一部分框架文檔還沒開放,點開鏈接是404,具體的以後有時間再看再更新,考研黨逃了~


半天沒看知乎,突然多了這麼多贊

補充幾點說明,首先雖然hap安裝包中有apk安裝包,但這並不是說鴻蒙是安卓套殼,從前面我的分析可以看出,apk包中是不包含任何軟體邏輯的,這個包似乎是自動生成的,並且即使創建新的工程再編譯,除了java的包名以外也基本上都不會變的。原回答的圖中可以看出,apk的代碼包含兩個類:MainAbilityShellActivity和ShellMyApplication。shell是殼的意思,例如Linux的shell就是指在內核上套了一層殼,用戶在終端通過這層殼與內核交互,從類名可以大致判斷,這裡的Activity是作為鴻蒙的Ability的一層殼,猜測是用來實現安卓進程與鴻蒙進程通訊。可以先看一下AbilityShellActivity的源代碼:

AbilityShellActivity

這裡的代碼也正是引起大家爭議的地方,因為他import了安卓的api,繼承自安卓的Activity,不過這裡import大多數都是與上下文有關的類,可以看到這個類還實現了一個介面IAbilityShell,查看其源代碼:

IAbilityShell

這個介面用來獲取系統的上下文、獲取系統類載入器、設置UI,也就是說這個Activity會與相應的Ability綁定,通過這個介面在安卓進程中可以獲取到鴻蒙Ability相應的上下文信息,實現進程間的ipc。同樣看一下HarmonyApplication這個類:

該類繼承自安卓的Application,作為一個安卓進程的實體類。該類有get、set Ability等方法來獲取、設置所對應鴻蒙進程的ability。

如果分析的沒錯,這個apk就是用來實現鴻蒙進程與安卓進程通信的,HarmonyApplication中的最後一段代碼也能說明這點

可以看到這個類初始化是會載入ipc_core.z這個so庫,從名字就可判斷是用於進程間ipc的。

知乎上另一個問題有大佬已經解釋,鴻蒙作為分散式架構擁有分散式內核,也就是說可能鴻蒙與Linux會同時存在,如果鴻蒙的內核確實是獨立於安卓的Linux內核,那麼通過上面分析,鴻蒙app啟動流程可能是這樣:鴻蒙App在鴻蒙的內核中啟動運行-&>鴻蒙內核主動向Linux內核發送請求運行apk包中的代碼在安卓虛擬機中創建一個用於與該鴻蒙進程通信的Shell進程,並設置好對應ability的上下文環境-&>安卓進程通過這個Shell進程與鴻蒙進程通信。

以上純屬從軟體端代碼分析做出的判斷,而鴻蒙實際上是什麼樣的存在還需要閱讀鴻蒙的內核源代碼,目前只開源了用於嵌入式設備的LiteOS內核,手機端只能等到12月開源才能進一步分析。

不論最終鴻蒙是自己的內核還是基於Linux還是別的什麼操作,華為能將ide發布,並且公開相應的app開發文檔,說明鴻蒙App基於java的開發框架就是目前這樣了。華為肯定是希望開發者能儘快適配鴻蒙OS,之所以鴻蒙的Api與安卓是如此的類似,就是為了減少開發者遷移和學習的成本,現在只需靜等手機端開源再下結論,其他的只能說是猜測。

最後補一句毛主席的話:沒有調查就沒有發言權。

以下為原回答


不知道具體的機制不多做主觀回答,個人覺得為了能夠兼容安卓吧,鴻蒙才2.0,想要獨立的用方舟編譯器把apk直接編譯成鴻蒙app不太現實。剛剛裝好DevCro體驗了一下,整個界面和Android Studio非常接近,可用html+js的方式開發,也可以用純java開發。api也和安卓沒有太大區別,部分類名做了修改,比如activity改成了ability,整體上基本不變,這樣應該是為了能夠更方便的將安卓代碼移植過來。

Ability類

編譯後生成了hap安裝包,可以直接將其作為zip壓縮包打開,裡面有一個entry_signed_entry.apk,這裡應該是程序的入口。

hap包

classes.dex是java編譯後的文件,反編譯可以看出是我們前面的harmonyOS的代碼

將apk解壓後可以看到是正常的安卓安裝包

反編譯這個apk中的dex,jar包查看java源代碼,發現裡面也確實調用到了安卓的api,不過只用到了android.os.bundle,這個類是用來在activity間通訊的。

而且這個apk是可以在安卓手機安裝的只不過無法運行,因為其餘的資源文件和我們編寫的harmony app的代碼都被抽在了外面,直接安裝裡面的apk運行是不行的。不知道鴻蒙具體的運行機制是啥,這個entry_signed_entry.apk的源代碼也沒有看出是從他來啟動harmonyOS的ability。具體等後面官方公佈技術細節,個人覺得鴻蒙是有安卓的運行時支持的,因為鴻蒙的hap包內本身並沒有第三方的lib,要想調用這個android.os.bundle只能是系統已經內置了,鴻蒙本身就是分散式架構,針對不同的應用可以選擇不同的運行時,不過這樣的系統不臃腫嗎?


你這問題就是錯誤的。

不是鴻蒙2.0需要導入,而是開發工具在開發需要兼容安卓的程序的時候,需要導入依賴庫,這個很正常,比如你需要支持JAVA就需要導入相應的庫,否則雖然介面的名稱一樣,但內部實現不一樣,那是要出大問題的。這樣做是為了保證過程和結果的一致性,同時也是為了尊重人家的版權。當今主流的程序開發工具,都是插件式的,需要下載相應的庫,不然就不可能具備相應的功能,起碼連編譯都通不過

系統級支持、框架級支持、類庫支持、介面支持與擴展這些是不同層級的概念。

鴻蒙2.0指是HarmonyOS2.0,它是操作系統,而開發工具是DevECO IDE,它是一個工具。這二者根本就是兩個東西,不可混為一談。

所謂的鴻蒙兼容安卓是指,安卓的APK程序可以直接在鴻蒙系統上「正常」運行。這個正常是指看起來沒啥差異,但是背後運行的機制不一樣,安卓是有虛擬機的,而鴻蒙是可以直接支持相關的介面。從目前披露的代碼來看,鴻蒙不可能是套皮的安卓,因為他們的機制根本性的不一樣,把精力花在這些上,沒有意義。


補充說一句:目前吹和踩的人,都沒有必要,因為都沒有充足的論據。

從我個人的情感傾向來講,我希望華為能堅持地做完,長久地希望他能做好,雖然這很難也很遙遠。為啥?競爭促進繁榮。更何況還是解決一個第三方操作系統有無的問題,要應付極端情況,就必須要有備胎,不要認為中美之間永遠都不可能脫鉤,永遠都不會發生戰爭,那違背了事物發展的規律,變化是世界永恆的主題,誰也想不到明天會怎麼樣。就象惡狗撲上來,即使沒有先進的槍,有一根打狗棒也是好的,總比沒有要安全一些。


華為員工沒有把時間浪費在構建這種可以直接就用的包上說明華為還是非常清醒的,沒有像某些同志一樣沸騰。。。

別人的東西,用了不違法,沒有隱患,正常人的思路必然是拿來就用。只有腦子裡全是水的人才會想著我們每一行代碼每一個標點符號都要自己構建。


想要開發兼容Android的程序,導入sdk很正常

想要證明鴻蒙不是套皮很簡單,不import任何Android相關sdk,寫一個能在鴻蒙設備上流暢運行的程序(比如鬧鐘),即可

如果這樣一個程序都因為各種原因無法寫出來,無論是不是套皮,要鴻蒙何用?


import了幾個包,把這些人急得

先自己立個虛無的靶子:

鴻蒙要從底層寫起,每一行代碼都是自己寫的!吊打安卓ios!鴻蒙天下第一!

然後再對著自己的靶子攻擊:

看,華為又吹牛了,小粉紅又沸騰了,怎麼是安卓套殼啊?

按照這道理,是不是我裝個MinGW,我的win10就變成Linux套殼了?

什麼是開源先百度搞清楚先,再來談項目結構,真心不建議一點背景知識都沒有儲備的人,來誇誇其談


這個沒有營養的回答就別贊了,大家移步大佬們的回答

年輕人啊不要熬夜:如何看待 9 月 10 日華為發布的鴻蒙 OS 2.0 系統,應用前景如何??

www.zhihu.com圖標真的是個營銷號:如何評價華為發布的鴻蒙OS 2.0需要導入安卓部分SDK等功能??

www.zhihu.com圖標

我是做演算法的,方向不同也不能給出多專業的答案

只是想告訴各位,隔行如隔山,即便同屬計算機領域,不同方向也千差萬別,自己不瞭解的東西千萬別隨意做出判斷甚至胡亂攻擊

而看到個截圖有Android,不加以瞭解就沸騰,甚至都不知道這個SDK用在何處的人,大概連hello world都沒寫過吧


推薦閱讀:
相關文章