一、背景
鸿蒙的原生开发是无奈反对到安卓原生配置的,导致鸿蒙间接嵌入安卓库须要做相应的革新。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 也逐渐“鸿蒙化”,不便开发者接入。