鸿蒙Harmony谈了这么久,和Android到底啥区别?
國產操作系統鴻蒙代碼終于開源,IDE也一并公開。迫不及待地安裝了IDE并嘗了鮮。
?
將按照鴻蒙OS介紹,IDE介紹,安裝及運行,項目構成,APP基本組件,APP可執行文件這幾個方面來講述我自己的開發體驗。
?
HarmonyOS
基于微內核的跨平臺分布式操作系統,最新為2.0。不再停留在PPT上,公開了源碼和IDE。
官方的資料我一并羅列下來。
鴻蒙OS的官方介紹:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/harmonyos-overview-0000000000011903
鴻蒙OS在gitee上的主頁:https://openharmony.gitee.com/openharmony
內核源碼的地址:https://openharmony.gitee.com/openharmony/kernel_liteos_a
華為開發者論壇:https://developer.huawei.com/consumer/cn/forum/home
?
IDE DevEco Studio
為鴻蒙OS開發的IDE名叫DevEco Studio,基于IntelliJ IDEA Community開源版本打造。界面及開發流程和Android Studio基本一致,極易上手。
下載地址:https://developer.harmonyos.com/cn/develop/deveco-studio
官網文檔:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/tools_overview-0000001053582387
?
DevEco Studio安裝及運行
exe下載下來之后雙擊可以看到配置頁面。
選擇其他安裝目錄或默認選項,然后進入啟動頁面。
十來分鐘之后將提示是否下載SDK,選擇”接受“繼續。
下載成功之后將進入創建項目畫面,選擇“創建鴻蒙OS項目”繼續。
接下來需要選擇運行的硬件設備類型,目前支持電視,手表和穿戴設備三種設備類型。也可以看到預設的畫面布局,以及開發語言,目前支持JS和JAVA兩種開發語言。我們選擇“TV”設備,空畫面+JAVA開發方式,繼續。
當然需要設置項目名稱,包名及位置等信息,我們采用“HMApp”名稱繼續。
配置好之后將進入IDE主界面,并自動下載gradle等依賴包。
gradle下載及配置完畢之后,我們安裝下鴻蒙OS模擬器,暫時沒有本地的模擬器,只能使用遠程的模擬器,需要下載Resources模塊和網站登錄。我們點擊Tools->HVD Manager在打開模擬器設備列表的時候將自動下載Resources模塊。
這里必須要提一句,下載Resources模塊非常容易遇到如下的失敗,很多開發者都遇到。
解決辦法很多,沒有特別穩妥的方案。比如重啟電腦,重啟IDE,重裝IDE,刪除IDE的緩存目錄,華為開發者賬號注冊成功十分鐘之后再試等等。反正多試幾次終究能成功。
下載成功之后還需要登錄華為開發者賬號,才可以啟動遠程模擬器。IDE將自行啟動默認瀏覽器驗證賬號。在登錄成功之后需要“允許”,將看到登錄成功的提示。
這之后我們返回IDE,將看到底部的“login success”的提示。然后我們就可以在HVD Manager列表里啟動模擬器。
接著運行我們的代碼,可以看到成功部署到了遠程模擬器上。
?
項目構成
我們看一下鴻蒙APP的項目構成,并和Android Studio進行對比。
通過仔細對比,發現結構大體是類似的,在主體代碼邏輯模塊有著明細區別。
1,DevEco將配置清單格式由xml改為json,可能解析起來更為高效。
2,將資源文件分類為存放媒體資源的media目錄,存放字符內容的element目錄以及存放預設資源的rawfile目錄。相比Android原生的資源目錄分類更加簡潔明了。只是資源文件的尺寸適配,版本適配,國際化適配需要怎么區分開來呢?
3,源文件的幾大組件的實現類改了,名字看起來都有些相似,需要看源碼才能辨別。
APP基本組件
官方的API說明:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-ability-overview-0000000000029852
為了搞清楚APP基本組件和Android的區別,我們需要查看源碼的實現。我將總結出來的鴻蒙OS的APP組件大致的類圖貼出來。
Android原生的Application,Activity及Service三者的類圖也一并貼上。
可以看到鴻蒙OS的Ability,AbilitySlice和AbilityPackage組件都繼承自同一個父類AbilityContext。而且Context并不像Android,而是個接口。
具體到方法API的區別總結一下,初步感覺是這樣的。
可以看到大部分API都是類似的,只是名稱上的細微差別,說明組件的設計思路基本一致。但是我們也看到鴻蒙OS出現了一些Android并不存在的API。
比如Ability提供了停止Ability的stopAbility(),設置是否支持側滑消失的setSwipeToDismiss(),設置路由主入口的setMainRoute(),用來指定先啟動的AbilitySlide實例。
比如AbilitySlice提供了開啟,停止和獲取Ability實例的startAbility(),stopAbility()和getAbility(),同時還提供了設置UI視圖的setUIContent()。
AbilitySlice可以直接展示視圖,而Android的Service不可以直接展示視圖,需要依賴WindowManager去添加Window。再結合官網API的說明,我們可以斷定鴻蒙OS的AbilitySlice并不同于Android的Service,它只是Ability的UI展示的一個補充,一個部分而已,更像是Fragment。上述表格的對比維度并不準確,不能直接將AbilitySlice和Service進行對比。
我們還發現一個細節,Ability和AbilitySlice在提供了onConfigurationUpdated()以外都提供了監聽屏幕方向變化的onOrientationChanged()。為何將屏幕方向的變化單獨處理,比較微妙。
?
上述表格并未展示的一點是,Ability和AbilitySlice都提供了connectAbility(Intent intent, IAbilityConnection conn)和disconnectAbility(IAbilityConnection conn)去綁定和解綁Ability。但是只有Ability提供了onConnect(Intent intent)和onDisconnect(Intent intent)去處理綁定和解綁的回調。
可以知道AbilitySlice也可以參與綁定組件但只有它依附的Ability可以處理綁定和解綁的回調。
可以發現這和Android完全不一樣,Android是Activity通過bindService()和unbindService()去綁定和解綁Service,Service提供了onBind()和onUnbind()去處理綁定和解綁請求。
總結來說,
Android上活動和服務是兩個不一樣的概念,活動提供和用戶交互的UI,服務提供后臺任務的執行。活動可以啟動和停止服務,也可以綁定,遠程調度和解綁服務。他們兩者的實現類也是分開的。
而鴻蒙OS則將活動和服務整合,統稱為抽象的"能力",由實現類Ability來統一管理。需要展示UI交互的時候,它就是活動;需要執行后臺任務的話它就是服務。當然,因為是Ability的緣故,服務擁有了在需要交互時直接展示UI的便利。
必須指出的一點是,雖然將前臺活動和后臺服務進行整合是個好想法,但很多概念容易混淆,進而導致生命周期的管理混亂。在開發的過程中也極易出錯。尤其對于習慣了Activity和Service兩大概念的Android開發者來說,需要好好適應一下。。。
APP可執行文件
鴻蒙OS編譯出來的應用程序格式為hap,全稱是harmony application package?和APK一樣也是壓縮包,改名之后解壓下來如圖。有一個同名的APK文件。。。
和一般APK的內容DIFF一下。
我們再把APK文件解壓下來和一般的APK對比一下,結構和名稱完全一致。
HAP文件內置APK文件當然是為了兼容Android系統,便于系統生態的營造。
具體怎么兼容?我猜想有兩個可能性。
1,鴻蒙OS底層仍然是像Android一樣,暫時通過PMS和PackageInstaller解析和安裝APK文件。所以內置了APK文件,外部的json只是額外配置和補充。
2,鴻蒙OS完全有自己的HAP格式解析和安裝流程。這個HAP里內置的APK是為了方便HAP能安裝和運行到Android OS上去的。這樣可以方便鴻蒙開發者開發的APP可以不用修改代碼直接運行到Android設備上。具體怎么實現呢,比如HMS的App Gallery分發HAP格式到手機里的時候,可以自動解壓出來APK到手機上,然后執行和APK一樣的流程。
這是我的猜想,歡迎大家探討。
?
從IDE的安裝和使用來看,目前還有很多需要優化的地方。
比如每次啟動HVD都需要登錄,比如運行APP的日志從出不來,比如沒有體用本地模擬器等等。
羅馬也不是一天建成的,我們需要保持積極的心態去嘗試和反饋,給華為開發者一些時間。這樣大家才能不斷進步。
?
鴻蒙OS的IDE,組件設計,以及可執行文件構成,和Android有著相似之處卻又有差異頻頻。
這種貌合神離的方式既能在生態營造上取巧,又能樹立自己的風格,無奈之中透著倔強。
到底孰優孰劣尚無法評判,只能把問題交給時間和用戶。
此刻我只想祝愿鴻蒙OS越來越好!
?
寫于20200926深夜。
原創不易,如果本篇文章引起你的思考和興趣,歡迎點贊和關注。如果想要了解更多更全信息,掃碼關注博主公眾號「TechMerger」。
?
總結
以上是生活随笔為你收集整理的鸿蒙Harmony谈了这么久,和Android到底啥区别?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 海明码——例题详解
- 下一篇: 59页PPT,全面了解“无线通信原理”