導語:一直都有人問HarmongOS跟Android有什麼區別?華爲手機可以適配Android應用,那麼咱們作鴻蒙應用開發可以直接調用JAR/AAR包的API嗎?接下咱們就一塊兒來一一驗證。
#
1、JAR 的API調用驗證
###
使用HarmonyOS開發工具DevEco Studio 建立一個項目,咱們到 entry --> build.gradle --> 查看 dependencies 的引用包含了 JAR / HAR
###
::: hljs-centergit
:::github
###
那麼是否如截圖顯示的直接導入JAR包就能夠調用其API呢?我立刻就把我廠即構科技 Express SDK 的JAR 導進來。如下爲詳細步驟:
#markdown
(1)ZegoExpressEngine.jar 包放置到project中的Entry目錄下libs文件夾中,在gradle中增長 sync project。
###
::: hljs-centeride
:::工具
::: hljs-center開發工具
Sync Projectgradle
:::
#
(2)在程序調用該庫(ZegoExpressEngine.jar)的API。 如圖顯示說明是能夠直接調用JAR的API 的:
###
::: hljs-centerui
:::3d
#
(3)那麼問題就來了,能夠在鴻蒙 resources -> layout -> xml 裏調用 Android 的控件嗎?而後我又把 Android 的 v4 包給導進來了。以下圖顯示v4包是成功引入:
###
::: hljs-centerxml
:::
#
resources -> layou -> 長按右鍵 -> new -> Layout Resource File
###
::: hljs-center
:::
###
如上圖所示,鴻蒙的Layout 是不容許建立Android 控件的。因而我就手動輸入,看會有什麼效果:
###
::: hljs-center
:::
###
在 Previewer 顯示 Initial image data is Iost ,說明是不支持這個包的功能。
而且說明鴻蒙是能夠直接進行JAR的API調用,能調用但不必定支持該功能。如,不支持Android 的控件,它有本身的組件來進行UI的渲染。
###
::: hljs-center
:::
#
2、AAR 的API調用驗證
###
JAR可以直接調用API,那AAR呢?重複JAR的導入流程導入AAR。
###
entry --> build.gradle --> dependencies 的引用添加 AAR 。
###
::: hljs-center
:::
###
覺得很完美,這樣就能夠直接調用了
###
::: hljs-center
:::
###
哇,個人API 呢? 證實鴻蒙是不能直接調用 AAR 的方法的。
這樣咱們就放棄了嗎?有沒有其餘的輔助的手段讓咱們可以調用 AAR 的方法。
咱們知AAR的本質是 class.jar + res ,基於JAR包是能夠直接在鴻蒙系統上調用的,因此咱們提取 AAR中的 class.jar 是否是就能夠了。
###
有了這個想法咱們就要開始驗證:
(1) 把 AAR 後綴修改成 zip 後解壓 ,找到 class.jar 並修改暱稱爲 cardview.jar
###
::: hljs-center
:::
###
如上圖驗證這樣是能夠直接調用,可是不能每次都手動解壓再導入,因而就找了第三方的(aar2jar),爲了解決鴻蒙依賴AAR庫的問題,實現的原理也是解包AAR,再依賴其中的class.jar
###
(2)aar2jar
打開連接有依賴流程就再也不累贅,新測有效。
###
###
如上圖:成功調用了 logger 的AAR庫
#
3、HAR 的編譯過程
###
建立鴻蒙的項目,默認包含的就是JAR/HAR。
HarmonyOS庫(HarmonyOS Ability Resources,簡稱HAR)能夠提供應用構建所需的一切內容,包括源代碼、資源文件、HarmonyOS配置文件以及第三方庫。
###
官網(HAR的編譯流程官網連接)已經詳細的講解了編譯過程,就再也不累贅。
###
把我廠的 ZegoExpressEngine.jar 放到 HarmonyOS Library 編譯:
###
::: hljs-center
:::
###
生成的har 再放到項目的 libs 進行驗證,是能夠正常調用的,說明har編譯成功。
###
::: hljs-center
:::
#
結語
###
如下爲本次驗證總結:鴻蒙應用開發,不能直接使用Android 上的第三方庫。
###
(1) 能夠直接引用JAR 的 API 。但不能是運行時強依賴Android 環境的,否則只能作移植,並作必定的修改。因此不依賴Android 的 JAR 是能夠直接在鴻蒙中使用的。
(2) 鴻蒙的gradle plugin 環境下不能直接依賴AAR,最好的辦法是從新整理AAR工程,編譯成相應的HAR。
(3) AAR運行時不依賴Android 環境的,能夠提取其中的 class.jar,並作依賴。
###
我廠即構 ZEGO Express SDK (ZegoExpressEngine.jar)有引用到Android 庫,因此在適配 HarmonyOS中只能作移植並修改。讓咱們一塊兒期待ZEGO Express SDK 鴻蒙版本的出現吧!