鸿蒙应用开发:支持JAR、AAR 的API调用 原创 精华

即构忠武
发布于 2021-8-5 16:38
浏览
10收藏

导语:一直都有人问HarmongOS跟Android有什么区别?华为手机能够适配Android应用,那么我们做鸿蒙应用开发能够直接调用JAR/AAR包的API吗?接下我们就一起来一一验证。

一、JAR 的API调用验证

使用HarmonyOS开发工具DevEco Studio 创建一个项目,我们到 entry --> build.gradle --> 查看 dependencies 的引用包含了 JAR / HAR

::: hljs-center

鸿蒙应用开发:支持JAR、AAR 的API调用-鸿蒙开发者社区

:::

那么是否如截图显示的直接导入JAR包就可以调用其API呢?我马上就把我厂即构科技 Express SDK 的JAR 导进来。以下为详细步骤:

(1)ZegoExpressEngine.jar 包放置到project中的Entry目录下libs文件夹中,在gradle中增加 sync project。

::: hljs-center

鸿蒙应用开发:支持JAR、AAR 的API调用-鸿蒙开发者社区

:::

::: hljs-center

Sync Project

:::

(2)在程序调用该库(ZegoExpressEngine.jar)的API。 如图显示说明是可以直接调用JAR的API 的:

::: hljs-center

鸿蒙应用开发:支持JAR、AAR 的API调用-鸿蒙开发者社区

:::

(3)那么问题就来了,可以在鸿蒙 resources -> layout -> xml 里调用 Android 的控件吗?然后我又把 Android 的 v4 包给导进来了。如下图显示v4包是成功引入:

::: hljs-center

鸿蒙应用开发:支持JAR、AAR 的API调用-鸿蒙开发者社区

:::

resources -> layou -> 长按右键 -> new -> Layout Resource File

::: hljs-center

鸿蒙应用开发:支持JAR、AAR 的API调用-鸿蒙开发者社区

:::

如上图所示,鸿蒙的Layout 是不允许创建Android 控件的。于是我就手动输入,看会有什么效果:

::: hljs-center

鸿蒙应用开发:支持JAR、AAR 的API调用-鸿蒙开发者社区

:::

在 Previewer 显示 Initial image data is Iost ,说明是不支持这个包的功能。
并且说明鸿蒙是可以直接进行JAR的API调用,能调用但不一定支持该功能。如,不支持Android 的控件,它有自己的组件来进行UI的渲染。

::: hljs-center

鸿蒙应用开发:支持JAR、AAR 的API调用-鸿蒙开发者社区

:::

二、AAR 的API调用验证

JAR能够直接调用API,那AAR呢?重复JAR的导入流程导入AAR。

entry --> build.gradle --> dependencies 的引用添加 AAR 。

::: hljs-center

鸿蒙应用开发:支持JAR、AAR 的API调用-鸿蒙开发者社区

:::

以为很完美,这样就可以直接调用了

::: hljs-center

鸿蒙应用开发:支持JAR、AAR 的API调用-鸿蒙开发者社区

:::

哇,我的API 呢? 证明鸿蒙是不能直接调用 AAR 的方法的。
这样我们就放弃了吗?有没有其他的辅助的手段让我们能够调用 AAR 的方法。
我们知AAR的本质是 class.jar + res ,基于JAR包是可以直接在鸿蒙系统上调用的,所以我们提取 AAR中的 class.jar 是不是就可以了。

有了这个想法我们就要开始验证:
(1) 把 AAR 后缀修改为 zip 后解压 ,找到 class.jar 并修改昵称为 cardview.jar

::: hljs-center

鸿蒙应用开发:支持JAR、AAR 的API调用-鸿蒙开发者社区

:::

如上图验证这样是可以直接调用,但是不能每次都手动解压再导入,于是就找了第三方的(aar2jar),为了解决鸿蒙依赖AAR库的问题,实现的原理也是解包AAR,再依赖其中的class.jar

(2)aar2jar
打开链接有依赖流程就不再累赘,新测有效。

鸿蒙应用开发:支持JAR、AAR 的API调用-鸿蒙开发者社区

如上图:成功调用了 logger 的AAR库

三、HAR 的编译过程

创建鸿蒙的项目,默认包含的就是JAR/HAR。
HarmonyOS库(HarmonyOS Ability Resources,简称HAR)可以提供应用构建所需的一切内容,包括源代码、资源文件、HarmonyOS配置文件以及第三方库。

官网(HAR的编译流程官网链接)已经详细的讲解了编译过程,就不再累赘。

把我厂的 ZegoExpressEngine.jar 放到 HarmonyOS Library 编译:

::: hljs-center

鸿蒙应用开发:支持JAR、AAR 的API调用-鸿蒙开发者社区

:::

生成的har 再放到项目的 libs 进行验证,是可以正常调用的,说明har编译成功。

::: hljs-center

鸿蒙应用开发:支持JAR、AAR 的API调用-鸿蒙开发者社区

:::

结语

以下为本次验证总结:鸿蒙应用开发,不能直接使用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 鸿蒙版本的出现吧!

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
14
收藏 10
回复
举报
2条回复
按时间正序
/
按时间倒序
mb610bf54647033
mb610bf54647033

一直有疑问鸿蒙支不支持依赖android的jar包,博主666啊,讲得很清楚

回复
2021-8-5 22:34:24
Anzia
Anzia

哈哈哈,我没考虑过这样的问题。不过现在知道可以调用却不可以使用。谢谢楼主

1
回复
2021-8-5 22:52:13
回复
    相关推荐