鴻蒙OS初探

由於要驗證個人幾個應用可否移植到鴻蒙,仔細看了下鴻蒙,固然做爲開發者,確定要從開發環境看起。java

開發環境

鴻蒙OS的開發工具叫作DevEco Studio,和Android Studio同樣,也是基於IDEA。程序員

  • 安裝時設置好sdk目錄,即開始自動下載安裝sdk和tools。下載完成後在嚮導頁面中能夠看到當前下載的sdk版本爲2.1.18,version 5,下文都是基於這個版本。
  • 建立一個hellohm項目,選擇一個手機項目模板。
  • 打開項目,稍等一下gradle配置,很快項目就完整展示了,整個仍是很流暢。

編譯

由於構建工具是gradle,因此天然在命令行用gradlew assembleDebug試了一下,果真開始編譯了:shell

  • 默認用gradle 6.3,下載依賴的時候,服務器自動設爲國內的服務器,比安卓環境下的gradle要快多了。
  • 不到一分鐘,依賴下載和編譯完成。

看下輸出文件:json

image.png

39k的hap文件,這就是一個純粹的鴻蒙應用,對應安卓的apk,這是沒有簽名的debug版本,用7zip打開這個hap文件看看:服務器

image.png

這幾個文件都能理解,安卓的manifest文件變成了config.json。但讓我沒想到的是,這裏竟然包了一個apk文件。試着把這個apk解出來,再用7zip打開,還真是個標準apk網絡

image.png

既然是apk,天然放到普通安卓手機上試一下咯,安裝沒有問題,圖標也看到了,點開...閃退,用adb看一下日誌:app

04-09 15:12:53.334  7450  7450 E AndroidRuntime:        Caused by: java.lang.ClassNotFoundException: Didn't find class "ohos.abilityshell.HarmonyApplication" on path: DexPathList[[zip file "/data/app/com.example.hello_hm-THrK3d5xftGaJlBnx92w_A==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.hello_hm-THrK3d5xftGaJlBnx92w_A==/lib/arm64, /system/lib64, /product/lib64]]
04-09 15:12:53.334  7450  7450 E AndroidRuntime:                at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:230)
04-09 15:12:53.334  7450  7450 E AndroidRuntime:                at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
04-09 15:12:53.334  7450  7450 E AndroidRuntime:                at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
04-09 15:12:53.334  7450  7450 E AndroidRuntime:                ... 16 more

ClassNotFound,看來這個apk是不能跑在純安卓上的,只能跑在鴻蒙上,那這個apk是什麼意思? 也許是爲了鴻蒙的底層是安卓時,能夠跑這個apk達到讓底層安卓管理鴻蒙應用的目的吧,反過來也就是說,若是哪一天鴻蒙徹底脫離安卓,天然就不須要這個apk了,這只是個人想法,用adb驗證一下。工具

image.png

能夠看到,經過adb shell能夠看到這個鴻蒙應用,用dumpsys能夠看到當前的Activity叫作MainAbilityShellActivity,但這是咱們代碼裏沒有的東西,從哪裏來的?應該就是上面這個自動生成的apk跑出來的。佈局

鴻蒙應用

引用一下官方文檔,鴻蒙應用是由一個或多個HAP(HarmonyOS Ability Package)包以及屬性文件pack.info文件組成。這點和安卓不一樣,安卓一個應用是一個apk。性能

image.png

HAP是Ability的部署包,HarmonyOS應用代碼圍繞Ability組件展開,它是由一個或多個Ability組成。Ability分爲兩種類型:FA(Feature Ability,中文名稱:元程序)和PA(Particle Ability,中文名稱:元服務)。FA/PA是應用的基本組成單元,可以實現特定的業務功能。FA有UI界面,而PA無UI界面。

官方語言挺繞口,個人理解,Ability就是組件,FA對應安卓的Activity,PA對應安卓Service。Ability加上資源文件打包起來就是hap,對應安卓的apk。

模擬器

我沒有運行鴻蒙的真機,只能選擇模擬器運行,這個模擬器是雲加載的,須要先驗證華爲開發者帳號,而後就能夠看到了:

image.png

四種模擬器,表明四種設備類型,我要驗證個人手機應用,天然就選了P40,啓動很快,也不佔用本地內存,很好。點擊IDE裏的調試,就能夠運行到模擬器中了。模擬器上有個倒計時,應該是雲端模擬器不能佔用太長的時間,超時會被釋放。

嘗試了一下調試,怎麼也設置不了斷點,按照文檔作了各類設置都不行,只好去華爲開發者網站提交一個問題,很快次日收到了回覆,問題修復並提供了升級包下載。同時看了一下華爲的文檔,若是要真機調試,須要先申請調試證書,並配置簽名信息,也就是說,估計華爲的簽名策略會收緊,向蘋果看齊,將來鴻蒙的應用市場可能只有官方一家。

安卓兼容性

個人幾個應用雖然是普通安卓應用,但因爲都用到了比較多的安卓服務和硬件特性,應該能比較能說明鴻蒙的兼容性,在看個人App以前,先看下這個模擬器的版本,後面兼容性測試都是基於這個版本。

image.png

先來看碎片記憶,這個應用使用了懸浮窗和桌面小部件,用adb安裝一下,沒有問題,運行並導入詞庫,碎片記憶的懸浮窗已經跑起來了。

image.png

再想試試桌面小部件,但是雲端模擬器不支持長按桌面加小部件,只支持雙指捏合,這應該是EMUI11的一個改動,在雲端模擬器,沒辦法觸發雙指,因此暫時還看不到小部件的支持狀況。

再試試隱祕參數,這是一個硬件檢測和性能測試工具,使用了不少安卓底層的API,在安裝以前我是有點懷疑它可否正常運行的,但實際狀況是:

image.png

不只正常運行,還竟然測出了顯示屏和觸控廠商,這在純安卓版的P40上都測不出的,兼容性看起來沒什麼問題。性能部分就有意思了,SOC跑分急劇下降,顯示刷新率20hz,內存、存儲性能所有降低的厲害,按道理,若是隻是遠程真機,不該該下降性能,只是有網絡延遲,因此估計是模擬器致使的,彷佛是一個跑在P40物理機上的虛擬機。

最後看下微動手勢,這個一個須要無障礙服務和陀螺儀傳感器才能工做的的手勢工具。

image.png

配置無障礙服務沒有問題,但惋惜由於在雲端,沒辦法觸發陀螺儀手勢,看來這個只能經過真機才能驗證了。但從幾個應用總體來看,當前鴻蒙在兼容apk方面沒什麼問題。

鴻蒙工程

回頭再來看下鴻蒙工程文件,整個工程有些部分和安卓仍是類似的,這對於安卓程序員來講比較友好,能夠快速上手,有一些概念也能夠相互對照:

安卓 鴻蒙
項目配置 AndroidManifest.xml config.json
應用標識 package bundle
字符資源 strings.xml string.json
調試shell adb hdc
gradle配置 build.gradle build.gradle

看一下項目的佈局文件和源碼,UI部分代碼須要徹底重寫了,不可能兼容安卓的Layout和控件了,大部分的API都不一致了,只是有些在安卓中能夠找到一個依稀的影子,但接口都是不同的。

這說明了一個問題,若是不是以安卓兼容模式運行,現有的安卓應用要想移植到鴻蒙,工做量仍是很大的,基本上須要徹底重寫。

總結

整個上手的感受仍是不錯,IDE、文檔、模擬器都挺順暢的,hello-world對原安卓開發人員也保持了剛好的「熟悉」,這已經很是不錯了,做爲常常評估各類奇奇怪怪系統的開發者,一半以上的系統都是由於不成熟的hello-world把我嚇退的,這一點鴻蒙已經有一個好的起點。

在兼容性方面,看起來不用太擔憂,如今的鴻蒙由於自帶安卓,能夠運行apk,起碼從個人幾個App來看,除了沒法驗證的幾個地方,都沒有問題,固然將來若是鴻蒙剝離安卓,那就要考驗第三方的跟進度了,目前看,應用須要重寫才能兼容鴻蒙。

相關文章
相關標籤/搜索