一、背景

鸿蒙的原生开发是无法支持到安卓原生配置的,导致鸿蒙直接嵌入安卓库需要做相应的改造。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也逐步“鸿蒙化”,方便开发者接入。

极客星球 | Android原生SDK无缝嵌入鸿蒙开发“黑科技”相关推荐

  1. uniapp 调用 android 原生sdk

    1.Android Studio 下载地址:Android Studio官网 OR Android Studio中文社区 2.HBuilderX 3.App离线SDK下载:最新android平台SDK ...

  2. uniapp集成Android原生sdk

    最近公司有个项目,需要调用客户提供的sdk扫描rfid,项目又是用uni开发的,客户提供的sdk只有Java版本,我发现uni是提供集成原生sdk的,所以研究了一下怎么使用,并记录下来过程. 准备 S ...

  3. android开发rn插件,在Android原生应用中嵌入React Native

    开发工具:Android Studio , WebStorm 参考链接:React Native官方中文文档 一.创建React Native项目 1.在本地React Native项目目录下,创建一 ...

  4. 极客星球 | 阿里:云原生数据湖构建与分析实践

    编者按:6月24日[Coder Park]第一季架构篇之大数据平台架构分享线上直播活动圆满结束.本期特邀MobTech袤博科技合伙人.首席数据官杨冠军担当出品人,阿里巴巴计算平台事业部大数据平台技术专 ...

  5. 极客星球 | 图像技术在上亿规模实拍图片中的应用

    ​ 编者按: 闲鱼高级算法专家远悠近日出席了由MobTech袤博科技主办的[CoderPark]直播活动,与MobTech专家以及行业知名算法KOL齐聚云端,并分享了图像技术在上亿规模实拍图片中的应用 ...

  6. 极客星球 | Flink在数据智能公司的探索实践与优化

    ▌Flink探索 1.1:Why Flink Apache Flink 是一个分布式处理引擎,用于离线和实时的计算.Flink凭借其极致的流式处理性能和优秀的框架设计吸引了众多开发者加入,各大厂也都纷 ...

  7. 极客星球 | FATE联邦学习框架理论与应用初探

    一.背景 随着大数据.云计算等技术的发展,数据隐私安全问题受到越来越多的重视,各国都在加强数据安全和隐私保护.中国在2017年实施的<中华人民共和国网络安全法>要求网络运营者不得泄露.篡改 ...

  8. 极客星球 | 前端工程化之路的探索与实践

    前言 随着业务越来越重,越来越复杂,双倍工作量,团队规模肯定不会扩大双倍,蛮力已经无法持续高效的支持业务,如何因地制宜地打造出适合自己的前端工程化,成了每个到了一定规模的前端团队都在思考和探索的问题. ...

  9. 极客星球 | 机器学习赋能商业地产决策进阶

    编者按:3月3日,由MobTech袤博科技主办的[CoderPark]第二季数智有为--以"数据科学赋能商业场景应用与决策"为主题在云端举行.MobTech袤博科技资深数据挖掘工程 ...

最新文章

  1. J2SE基础夯实系列之数组
  2. 《用户至上:用户研究方法与实践(原书第2版)》一 3.4 法律层面的考虑
  3. 自动化发布-GitLab WEB Hooks 配置
  4. Linux 检查域名服务,linux上的域名服务
  5. leetcode312. 戳气球(动态规划)
  6. Python选择结构中多条件测试的简化写法
  7. mysql远程连接 host_MySQL远程连接:Host 'x' is not allowed to connect to this MySQL server
  8. memset()函数
  9. Spring框架(IoC、AOP面向接口切面)
  10. 勒索病毒最新变种for linux,Satan勒索病毒新变种卷土重来 安全狗提醒您注意
  11. TSX指令集之RTM无锁并发能加快速度吗?与mutex加锁比较
  12. 计算机领域CCF推荐会议列表+
  13. liu系统的混沌特性及其matlab仿真,Liu系统的混沌特性及其Matlab仿真.doc
  14. 用计算机算e的平方为什么显示错误,计算器中出现的E是什么意思?
  15. 2016年第四届C/C++ A组蓝桥杯省赛真题
  16. PS自学教程之色彩三原色RGB
  17. 为什么网线接法要分交叉连接和直连连接两种方式
  18. 【外挂编程】外挂编程技术揭秘(一)
  19. layim之绑定未读消息数量
  20. [转]基于POI的功能区划分()

热门文章

  1. 【设计模式】第15章·代理模式
  2. 揭秘:NFT智能合约到底都干了什么?
  3. 精益产品过程Step1:明确问题和目标用户
  4. DELL 工作站声音设置(当没有声音时)
  5. 小牛的学习笔记--乳腺癌症数据分析
  6. 阿里云(表格OCR)API调用流程
  7. 华为mate50os鸿蒙,华为Mate50将如期发布,屏下镜头+鸿蒙OS。
  8. 做一个回填数据库的报表
  9. RFM数据分析法帮你的男朋友值不值得嫁
  10. 八、GIO Channels