鸿蒙应用开发:支持JAR、AAR 的API调用 原创 精华
导语:一直都有人问HarmongOS跟Android有什么区别?华为手机能够适配Android应用,那么我们做鸿蒙应用开发能够直接调用JAR/AAR包的API吗?接下我们就一起来一一验证。
一、JAR 的API调用验证
使用HarmonyOS开发工具DevEco Studio 创建一个项目,我们到 entry --> build.gradle --> 查看 dependencies 的引用包含了 JAR / HAR
::: hljs-center
:::
那么是否如截图显示的直接导入JAR包就可以调用其API呢?我马上就把我厂即构科技 Express SDK 的JAR 导进来。以下为详细步骤:
(1)ZegoExpressEngine.jar 包放置到project中的Entry目录下libs文件夹中,在gradle中增加 sync project。
::: hljs-center
:::
::: hljs-center
Sync Project
:::
(2)在程序调用该库(ZegoExpressEngine.jar)的API。 如图显示说明是可以直接调用JAR的API 的:
::: hljs-center
:::
(3)那么问题就来了,可以在鸿蒙 resources -> layout -> xml 里调用 Android 的控件吗?然后我又把 Android 的 v4 包给导进来了。如下图显示v4包是成功引入:
::: hljs-center
:::
resources -> layou -> 长按右键 -> new -> Layout Resource File
::: hljs-center
:::
如上图所示,鸿蒙的Layout 是不允许创建Android 控件的。于是我就手动输入,看会有什么效果:
::: hljs-center
:::
在 Previewer 显示 Initial image data is Iost ,说明是不支持这个包的功能。
并且说明鸿蒙是可以直接进行JAR的API调用,能调用但不一定支持该功能。如,不支持Android 的控件,它有自己的组件来进行UI的渲染。
::: hljs-center
:::
二、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库
三、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 鸿蒙版本的出现吧!
一直有疑问鸿蒙支不支持依赖android的jar包,博主666啊,讲得很清楚
哈哈哈,我没考虑过这样的问题。不过现在知道可以调用却不可以使用。谢谢楼主