基於2020.12.19的鴻蒙雲端虛擬機器系統(Developer beta 1),不代表其他鴻蒙版本,同時,本文未參考任何人的看法,純基於個人分析以及程式碼,文件
系統版本
本文主要內容:1.初探Harmony經歷2.Android->Harmony安裝包及啟動流程簡要分析3.我對Harmony的感覺1.初探Harmony說實話,釋出beta2之前我對鴻蒙都是停留在知道有這個東西的階段,這幾天看見beta2釋出有云端虛擬機器決定上手看看。安裝環境和IDE這裡必須噴下華為,包名必須以”com.”開頭什麼鬼規定
建立專案報錯
更改包名開頭為com
按照com的規定建立專案,啟動虛擬機器
本地adb代理埠
可以看到已經連線到adb,執行adb shell
dmesg可以看到分配到的是一臺開了很久的虛擬機器,上來就看到一堆avc denied(SELinux)和binder報錯
ps可以看到幾個特別的程式迅速打包HelloWorld部署至虛擬機器
可以看到鴻蒙使用的渲染不是Android原生View佈局,下方一整塊多個圖形是一個整體為了弄清楚那是什麼,匯出顯示資訊
鴻蒙程式
系統顯示這是一個SurfaceView
Android原生程式
同一個鴻蒙虛擬機器執行原生Android程式佈局邊界及資訊用於對比,由這些資訊可以推斷當前版本的虛擬機器系統是一個帶有鴻蒙Api的Android.表層探索到這裡差不多止步了,讓我們拆開.Hap安裝包2.Android->Harmony安裝包及啟動流程簡要分析將.hap更改為.zip字尾
hap檔案
裡面有4個專案asset是資原始檔夾,存放table以及圖片classes.dex是Harmony程式碼也就是Ability之類的config.json是hap配置資訊entry_signed_entry.apk是入口Apk我們從入口apk開始
可以看到這個apk裡面並沒有多少程式碼,他的功能可以理解為了在桌面上有個圖示,真正的功能程式碼在ShellActivity的父類ohos.abilityshell.AbilityShellActivity再看看classes.dex,由於dex2jar支援dex037及以下版本,想要反編譯需要進行一些修改
使用Ida對dex版本號進行修改
修補輸出到源程式
現在便可以進行反編譯
可以看到這部分就是DevEco中我們的程式碼那麼具體是怎麼從入口過來的呢,這部分的程式碼便屬於JavaFramework層由於adb許可權太低,我使用了一些技巧獲得了以下資訊
這個檔案類似於aosp中的/system/framework/framework.jar提供sdk/java層api
同時定位了渲染庫,adb pull以及一些操作之後我得到了Java層的原始碼
避免侵權問題,這裡不進行檔案提供和原始碼展示,感興趣的可以自行研究。根據入口Activity以及Ability/Activity生命週期定義我進行了方法追蹤,這裡進行顯示部分執行概括(下方並非精確程式碼)EntryShellActivity 1->父類onCreate載入Harmony的Class和lib->建立SurfaceView2->AbilitySlice->setUIContent->AGP::nativeSetContentLayout->C++層渲染->更新Surface至此,Ability顯示部分完成,啟動基本完成閱覽程式碼之後,我認為鴻蒙在Art-Native中間是有一套自己Java-jni庫的,這是為了脫離或者說減小特定系統依賴的行為,為以後脫離Android提供了可能檢視Java層程式碼可以發現,功能包ohos.*.*下都存在一些命名為*Adapter.java/*Converter.java的檔案這些檔案的內容為與Android的直接對接,這些內容只佔到這整個包中的很小一部分,大部分內容是華為對自己文件中特性如分散式之類的封裝以及Api使用ida/objdump分析對應的.so可以看到核心渲染庫以及其他核心庫和Android特有的庫的關聯是不大的
他可以脫離Android,但是想要脫離還是有很多工作要做,比如從binderIPC遷移到libipc_core會比較困難。同時Android在移動軟硬體的發展以及生態目前無法超越或替代,所以鴻蒙無論從技術角度還是生態角度會有較長一段時間不能離開Android3.我對Harmony的感覺綜合以上內容,我對目前公佈的虛擬機器(手機)系統下的定義是,帶一套鴻蒙Api框架以及鴻蒙文件中所說的各種特殊能力的Android鴻蒙目前的狀態用具體的例子來說更像是Chrome這樣的產品,自己的一套框架/抽象,去適配各個系統,擴充套件系統的Api, 然後現在選擇Android作為手機版鴻蒙(4-8G裝置)的底,lot裝置則是類似於路由器一樣的輕量嵌入式系統,但是這個系統擁有相同的Api。這些內容在出廠帶有鴻蒙的真機發布後可能改變#HarmonyOS2.0# #華為鴻蒙# #EMUI#
-
1 #開發包abilityshell還是用的安卓的東西
-
2 #既然這樣,有APP願意給鴻蒙適配嗎? 沒有App的適配,生態怎麼建立? 沒有生態,談何擺脫android?
-
3 #包為com開頭,是不是為了相容安卓,更好的一致性。我看手機好多都是com打頭的資料夾哈
-
4 #比那些無腦噴的人強多了
-
5 #版本會更,又不是一成不變,初始簡陋當理解
-
6 #com開頭是業內通用規範,規避包命名衝突。
-
7 #怪不得要找個大學弄個專業,半路轉行確實困難
-
8 #安卓底層也有華為很大的貢獻啊