当前位置: 首页 > ds >正文

[特殊字符][特殊字符] HarmonyOS相关实现原理聊聊![特殊字符][特殊字符]

Hey小伙伴们~ 今天咱们来聊聊HarmonyOS的实现原理吧!🤔💡 虽然直接看源代码是最直接的方式,但是OpenHarmony项目的开源进度有点让人捉急呢… 不过没关系,我们可以通过已经开放的SDK、IDE、开发示例和编译产物来一探究竟!🔍✨

1️⃣ ‌安装IDE & 配置环境 & 编译运行‌ 📦💻
这部分还算简单啦,下载个DevEco Studio,照着文档一步步操作就OK啦!👌 我选了个JS模板:Phone > Refresh Feature Ability,然后一直下一步,申请个虚拟机,编译运行就成功啦!🚀

2️⃣ ‌分析编译产物‌ 🔍📁
运行成功后,先瞅瞅编译产物,找找程序入口。点开build文件夹,咦?.hap文件?这和我想的不太一样呢!🤔 不过没关系,把.hap改成.apk,用Android Studio打开看看!👀

对比官方给出的App逻辑视图,我发现了几个有意思的点:

没有找到描述每个HAP属性的pack.info,可能是因为只定义了一个Entry。
config.json是正常的。
abilities竟然编译成了Android包的.dex执行文件,js定义的界面、视图、逻辑都归入了assets中。
编译的可执行文件中竟然包含一个.apk文件!这个在App逻辑视图中完全没体现呢!🤔
3️⃣ ‌重点分析entry_signed_entry.apk‌ 🔍📱
继续用Android Studio打开这个文件,发现它是一个标准的Android App!😮 通过描述文件AndroidManifest.xml可以发现,整个apk只做了两件事:定义Application为ShellApplication和定义MainActivity为MainAbilityShellActivity。这名字起得可真直白呢!😅

接着分析源代码:

ShellMyApplication继承自HarmonyOS SDK的AceHarmonyApplication,不过啥事都没干。
AceHarmonyApplication也啥事没干,继续找它的父类HarmonyApplication。
HarmonyApplication可是正主啦!它主要做了初始化HarmonyOS应用、输出日志、加载Ability到Android的HashMap中、接收系统事件转发给鸿蒙应用等工作。而且!HarmonyApplication竟然继承自Android的Application!😲
4️⃣ ‌揭秘HarmonyOS的“分布式设计”‌ 🌐💻
在HarmonyApplication中,还初始化了一个EventRunner,结合ohos包的代码来看,估计就是官方文档提到的「分布式软总线」,是HarmonyOS所谓的「分布式设计」的相关实现啦!🤔

5️⃣ ‌ShellApplication & MainAbilityShellActivity的作用‌ 🛡️💪

ShellApplication的作用就是给Android的Application提供一个Shell(壳),让HarmonyOS的Application寄生其中。
MainAbilityShellActivity的作用就是将Android的MainActivity的生命周期、Intent等通过代理转发给HarmonyOS的Ability。
好啦,今天的分享就到这里啦!希望对你们有所帮助哦!💖 如果有任何问题或者需要更多的帮助,随时告诉我哈!💬

http://www.xdnf.cn/news/1716.html

相关文章:

  • 【玩转全栈】—— 无敌前端究极动态组件库--Inspira UI
  • 乡村治理数字化平台:信息技术赋能乡村振兴的深度探索
  • 数据结构-选择排序(Python)
  • QT创建软件登录界面(14)
  • JavaScript 的“世界模型”:深入理解对象 (Objects)
  • 理解欧拉公式
  • 弄清C语言中的链表
  • 济南国网数字化培训班学习笔记-第二组-1节-输电线路工程
  • DRF凭什么更高效?Django原生API与DRF框架开发对比解析
  • 如何创建和使用 Hive 视图
  • 【低配置电脑预训练minimind的实践】
  • 【网络安全】社会工程学策略
  • H3C Magic路由器安全警报来啦![特殊字符][特殊字符]
  • Spark-Streaming核心编程(2)
  • 三国杀专业分析面板,立志成为桌游界的stockfish
  • AI与智能能源管理:如何通过AI优化能源分配和消耗?
  • 矩阵运营的限流问题本质上是平台与创作者之间的流量博弈
  • 【25软考网工】第三章(3)虚拟局域网VLAN
  • Nginx 反向代理,啥是“反向代理“啊,为啥叫“反向“代理?而不叫“正向”代理?它能干哈?
  • Qt5.15.2+OpenCV4.9.0开发环境搭建详细图文教程(OpenCV使用Qt自带MinGW编译的全过程,包教包会)
  • 低代码平台开发串口调试助手
  • 【Java面试笔记:进阶】17.一个线程两次调用start()方法会出现什么情况?
  • 单体OJ项目
  • Java语言的进化:JDK的未来版本
  • vue-study(1)
  • Vue3项目中 npm 依赖安装 --save 与 --save-dev 的区别解析
  • 面试篇:Spring Boot
  • leetcode 69和367
  • 一道MySQL索引题
  • 如何下载适用于语音识别功能增强的Google Chrome浏览器