Arce 发表于 2021-8-12 17:13:36

鸿蒙应用开发:支持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 鸿蒙版本的出现吧!
想了解更多关于鸿蒙的内容,请访问:
51CTO和华为官方战略合作共建的鸿蒙技术社区
https://harmonyos.51cto.com/#bkwz

文档来源:51CTO技术博客https://blog.51cto.com/harmonyos/3386655
页: [1]
查看完整版本: 鸿蒙应用开发:支持JAR、AAR 的API调用