导语:一直都有人问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 鸿蒙版本的出现吧!