一、背景

鸿蒙的原生开发是无奈反对到安卓原生配置的,导致鸿蒙间接嵌入安卓库须要做相应的革新。MobTech作为第三方SDK提供方,有必要为开发者提供更不便的接入解决方案。咱们的指标是鸿蒙开发者和安卓开发者接入MobSDK的老本是一样的。在这个终极目标的前提下,咱们须要冲破鸿蒙的一些限度。

本文次要就如何冲破安卓和鸿蒙之间的差别做到无缝迁徙开展,同时将为大家介绍鸿蒙的一些原理性知识。上面咱们将从鸿蒙与安卓的差别、兼容的卡点、冲破的原理几个方面进行深刻探讨。

二、鸿蒙我的项目 VS 安卓我的项目

从我的项目整体构造上来看,鸿蒙和安卓根本是雷同的,蕴含代码、资源、布局、配置和国际化等。然而深刻理解则发现存在很大的差异。

1、四大组件到Ability
鸿蒙为了跟安卓剥离的更为彻底,曾经齐全废除了四大组件的设计(仅仅保留四大组件的概念),这种扭转带来的问题是须要重写原来这部分安卓代码。
组件主题

2、AndroidManifest.xml到config.json

鸿蒙废除了XML的配置,采纳了json格局来配置我的项目,然而这种扭转并不是简略的文本格式的转变,外面可配置的内容也做了很大的批改,甚至有些属性是只有鸿蒙才有的,而有些在安卓里的属性在鸿蒙里已被齐全破除。

3、AAR变成了HAR
HAR(HarmonyOS Ability Resources)能够提供构建利用所需的所有内容,包含源代码、资源文件和config.json文件。HA不同HAP,HAR不能独立装置运行在设施上,只能作为利用模块的依赖项被援用。
从下面HAR的解释来看,HA和AAR作用是一样的,但外面的内容却大不一样,这就导致了鸿蒙上是不能间接应用AAR的,而同样安卓上也是不能应用HAR。

4、鸿蒙不反对kotlin语言
如果原来安卓SDK是kotlin语言编写的,那么间接放入鸿蒙工程中,是跑不起来的。目前鸿蒙还不能反对kotlin语言。

三、无缝兼容的卡点

1、 AndroidManifest.xml四大组件怎么配置到鸿蒙外面?
2、 资源文件怎么打入到鸿蒙包外面?
3、 如何无妨碍的应用AAR包?
4、 安卓源码如何和鸿蒙一起通过编译?

**四、理解原理,冲破限度

鸿蒙打包后生成的是hap文件,解压后的构造如下:

hap文件里assets文件夹对应的就是resources文件夹下的各种资源,而libs是依赖的各种jar、har、so等第三方库,dex其实是咱们编写的鸿蒙代码编译成的后果。

最为神秘的就是其中的.apk文件了,它就一个作用:用来兼容安卓零碎。如果没有这个apk,在安卓手机上基本就无奈运行hap文件,它就是一个入口,通过它能够去加载鸿蒙的代码。次要是ShellMyApplication和 MainAbilityShellActivity 去实现加载鸿蒙,有点相似插件化的概念。

ShellMyApplication外围事件

  • 判断鸿蒙环境是否加载实现
  • 初始化鸿蒙利用
  • 加载鸿蒙的Ability
  • 初始化数据总线 接管零碎产生的各种事件而后转发给鸿蒙利用

MainAbilityShellActivity外围事件

  • 初始化AbilityShellActivityDelegate
  • 代理安卓零碎的各种回调事件

有了apk,咱们就有了冲破卡点的入口。因为apk里了咱们须要的AndroidManifest.xml文件、资源文件夹。咱们要做的就是在编译的过程中将原来安卓SDK的配置写进去就能够了。

最终成果

最初,咱们在鸿蒙里接入分享SDK和安卓里接入分享SDK的比照成果:

能够看到当初所有的配置都跟安卓上一样(除了GroupID不同而已),也无需减少其余额定配置。

五、总结

通过冲破鸿蒙无安卓配置的卡点并加上业务逻辑封装成一个独自的插件,咱们就能抹平鸿蒙我的项目接入安卓SDK所代来的差别,使得鸿蒙开发和安卓开发简直能够无缝连接。

目前MobTech的ShareSDK有包含微信、QQ、微博、抖音在内的多个平台曾经“鸿蒙化”,开发者接入这些平台将跟接入安卓保持一致,后续咱们会进一步裁减平台的数量,同时也会将MobTech下的其余SDK也逐渐“鸿蒙化”,不便开发者接入。