首页
社区
课程
招聘
[原创]HarmonyOS 2.0全解析:这究竟是一个怎么样的系统?
发表于: 2021-6-4 05:45 35304

[原创]HarmonyOS 2.0全解析:这究竟是一个怎么样的系统?

2021-6-4 05:45
35304

HarmonyOS 2.0公测版本已经发布,当然内测版本是可以直接升级的,我也第一时间升级了公测版本。
先说使用体验再解析:流畅度没发生变化,原神、王者游戏耗电和流畅度没任何区别,运行内存占用反而变多了(没有变少)。
再说大致分析:通过解析鸿蒙OS2.0的目录结构,我们发现鸿蒙OS 2.0整体是AOSP 10的深度定制,使用了Android Q的相当一部分内容。
接下来是组件和应用的分析:
libart与Android 10 AOSP(r7)上的完全一样,相比EMUI11反而没有进行特殊的改动,具体原因不明。
framework当中,安卓的framework部分是没有变化的,我们重点关注鸿蒙的framework。鸿蒙的framework独立于安卓的framework(framework.jar)之外,集成在boot-zframework当中。而华为的boot-zframework的vdex文件是特殊编码,因为修改了加载机制,文件头和结构跟普通安卓不同,因此需要特殊的读取和转换方式转换为原始dex。
解包鸿蒙自主的框架,可以看见ohos的包下面有鸿蒙的Ability、Application等等类似安卓Activity和Application的组件,并且加载也不是通过安卓的framework进行加载的,而是使用了鸿蒙自己的框架(但是应该是安卓框架使用适配器模式代理各种事件)。
但是,这些框架与系统服务通信,分析以后发现依然依赖安卓的服务,包括窗口管理服务、显示服务以及服务所依赖的安卓硬件抽象层。
解包鸿蒙的hap应用,可以看见里面包含一个apk,经过逆向分析,里面包含的apk不包含任何实质意义的代码、资源,仅供别的安卓应用识别。例如别的安卓应用可以通过getPackageInfo来获取鸿蒙应用的信息,实际上获取的是壳(Shell)应用的信息,而不是真实的鸿蒙应用信息,因此鸿蒙应用并不是使用安卓应用框架的。
打开鸿蒙应用以后,发现鸿蒙应用加载jar或者dex有限制,不能将jar或者dex放到数据目录动态加载。为了解决这个限制,我们hook openDexNative函数,具体是在C层实现,同Android Q,不多介绍。鸿蒙应用开发的SDK屏蔽了安卓的各种组件,包括libcore、framework,libcore、art等等,华为框架的限制可以在C层解决。
这里下个结论:鸿蒙OS 2.0严格意义上来说是基于安卓10开发的一个操作系统,内置了安卓和鸿蒙的框架。
鸿蒙框架应用是上层应用,底层依赖鸿蒙框架、安卓的框架等等。而安卓应用则依赖包括安卓framework在内的所有安卓组件,内存dump里面可以看见有鸿蒙的框架,但是没有实质使用或者调用。
而HarmonyOS 2.0所说的替换安卓是指替换安卓的framework,不包括替换art、services、libcore等等组件,也就是说仅实现了安卓的framework(虽然现在还是适配器模式,依赖安卓的框架),没有实现别的轮子。
有个有趣的地方,安卓沙盒内可以通过特殊手段加载并启动鸿蒙应用,但是需要自己实现鸿蒙的所有接口和服务。对于Sample里面的应用来说,我实现了Ability、Application以及tryLoadHarmony方法就能加载应用,实现服务管理就能使用跨进程通信以及一些基础数据库服务功能,通过代理鸿蒙的窗口管理类、实现内部类似Button等组件的类,就可以启动并显示hap软件的内容。注意安卓应用模式下是无法获取鸿蒙应用的真实安装包路径的,只能获取壳包路径,可以使用免安装模式来加载。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2021-6-7 00:44 被lhxdiao编辑 ,原因:
收藏
免费 13
支持
分享
最新回复 (35)
雪    币: 15028
活跃值: (6233)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
华为自己美其名曰,使用安卓开源代码。其实就是安卓套壳。
2021-6-4 10:26
12
雪    币: 715
活跃值: (203)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
受限于生态,所以要兼容安卓,底层用安卓的libcore,art。等到以后鸿蒙的生态建立起来,华为再造底层的轮子,彻底剔除安卓的影子,实现完全自主的鸿蒙。这布局还是可以的。
2021-6-4 11:36
8
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
流畅度没发生变化,原神、王者游戏耗电和流畅度没任何区别
因为这些游戏还是Android版的吧,并没有使用华为的sdk和编译器适配HarmonyOS版本
HarmonyOS设计的本意是微内核架构,并且已经摈弃了Android虚拟机架构,直接跑编译后的机器码
而机器码在app开发阶段就已经完成了,也不存在虚拟机中间层解释执行和ART预编译
理论上是比Android更快,但前提是app基于HarmonyOS的版本
而现阶段HarmonyOS为了兼容安卓apk,又不能完全脱离虚拟机
综上,要测试鸿蒙2.0,就需要华为编译器sdk开发app,纯鸿蒙版本的app
否则,安卓apk处于兼容运行模式,也还是基于虚拟机解释执行,测不出来HarmonyOS的设计初衷
2021-6-4 13:00
9
雪    币: 15028
活跃值: (6233)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
kylin小小鱼 受限于生态,所以要兼容安卓,底层用安卓的libcore,art。等到以后鸿蒙的生态建立起来,华为再造底层的轮子,彻底剔除安卓的影子,实现完全自主的鸿蒙。这布局还是可以的。

理想很丰满,现实很骨感。
中国软件发展这么多年,你举个例子目前有哪个操作系统是中国自主版权的底层内核?

最后于 2021-6-4 13:28 被tDasm编辑 ,原因:
2021-6-4 13:27
2
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
tDasm kylin小小鱼 受限于生态,所以要兼容安卓,底层用安卓的libcore,art。等到以后鸿蒙的生态建立起来,华为再造底层的轮子,彻底剔除安卓的影 ...
你错了,中国自主版权的操作系统有很多,诸子百家,太多了,甚至都升华到天人合一道法自然的哲学高度了,语言是汉语,只是没有被先祖们给物化,所以才被西方抢占先机,那一串串代码最终都是0和1,还不都是阴阳哲学演变过来的?
2021-6-4 13:54
2
雪    币: 916
活跃值: (3434)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
7
 看起来反过来说人家是鸿蒙上面加了一个 Android Runtime 也没啥问题。 
我更想看看鸿蒙做了哪些新东西,而不是用了哪些东西。
2021-6-4 14:06
4
雪    币: 1037
活跃值: (1780)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8

1楼评论除了当喷子  能做个人吗

最后于 2021-6-4 14:13 被wooyunking编辑 ,原因:
2021-6-4 14:13
2
雪    币: 2239
活跃值: (1109)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我更想看看鸿蒙做了哪些新东西,而不是用了哪些东西,  别搞华丽花哨的
2021-6-4 14:25
0
雪    币: 2089
活跃值: (3933)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
灬哈密瓜 我更想看看鸿蒙做了哪些新东西,而不是用了哪些东西, 别搞华丽花哨的
总体来说做的是加入了一套类似Android Framework的东西,具体看 http://aosp.opersys.com/xref/android-10.0.0_r47/xref/frameworks/base/core/java/
可以说实现了这部分Java层的一些东西,加入到了鸿蒙里面。别的东西还是Android 10。
2021-6-4 14:33
0
雪    币: 6364
活跃值: (3430)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
wooyunking 1楼评论除了当喷子  能做个人吗
现实中1l这种喷子太多了,活着的意义就是为了喷
2021-6-4 19:16
1
雪    币: 453
活跃值: (134)
能力值: (RANK:0 )
在线值:
发帖
回帖
粉丝
12
还是得感谢,特郎普,拜大爷.
否则,就这些公司,可不愿意.
所以,被欺负都是活该.
2021-6-5 08:53
1
雪    币: 7067
活跃值: (2900)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
很多人连AOSP和安卓的关系都搞不明白,就乱喷。我这边顺便把查到的一点儿资料给这些人贴一下:
 AOSP,“Android Open-Source Project”的缩写,“Android开放源代码项目”。我们常说的安卓是指谷歌搭载在nexus系统产品上的基于AOSP开发的原生系统。AOSP指的是开源安卓项目,核心是安卓集成了谷歌服务,而AOSP没有。
楼主文中写道“鸿蒙OS 2.0整体是AOSP 10的深度定制”,其实是和Android平级的一个东西。而AOSP是他们的底层,AOSP的底层的开源Linux。
2021-6-5 12:08
2
雪    币: 634
活跃值: (458)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
请问是怎么hook的?
2021-6-5 14:40
0
雪    币: 733
活跃值: (1395)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
15

最后于 2021-6-7 11:16 被狐臭编辑 ,原因:
2021-6-7 11:12
0
雪    币: 1022
活跃值: (292)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
韬光养晦才是王道,有一点点小成绩,就被这些五毛吹破天。什么世界无敌,宇宙第一,真的是秒天秒地秒空气,玄幻小说看多了脑残,王者菜不说,抖音里还各种骚。专业的人做专业的是。
2021-6-7 12:30
0
雪    币: 2239
活跃值: (1109)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17

这篇文章写的很好,我反编译hap文件简单对执行流程相关的梳理思考, 如果是apk文件走Android分支.. hap文件走另外个定制分支(暂且这样定义), 鸿蒙系统利用apk文件作为跳板把hap文件下dex文件加载起来, 还是熟悉PathClassLoader流程, HarmonyApplication继承于application进行深度定制修改, 感觉和壳方案差不多, 不知道楼主觉得如何

最后于 2021-6-8 10:59 被灬哈密瓜编辑 ,原因:
2021-6-8 10:58
0
雪    币: 195
活跃值: (123)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
只能说华为吹一个死一个
2021-6-8 11:51
0
雪    币: 3393
活跃值: (4038)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
内存管理,进程线程调度,i/o管理,中断控制,只有把这些核心功能完全自主实现才算是真正的自主操作系统,否则就是套壳
2021-6-9 10:30
3
雪    币: 100
活跃值: (2498)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
环境总体还是太浮躁
2021-6-9 18:00
0
雪    币: 1
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
Mr.hack 内存管理,进程线程调度,i/o管理,中断控制,只有把这些核心功能完全自主实现才算是真正的自主操作系统,否则就是套壳
安卓也没自主实现这些功能,算不算google自主的操作系统呢
2021-6-12 03:48
1
雪    币: 10413
活跃值: (4576)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
安卓不也是linux套了个壳,只是生态做起来了。
2021-6-12 06:55
2
雪    币: 119
活跃值: (479)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
为了兼容安卓应用这也是没办法的事
2021-6-21 14:09
0
雪    币:
能力值: (RANK:0 )
在线值:
发帖
回帖
粉丝
24
牛逼!
2021-6-25 23:20
0
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
superlover 安卓不也是linux套了个壳,只是生态做起来了。
人家谷歌可没宣传不是linux内核
2021-7-8 12:25
1
游客
登录 | 注册 方可回帖
返回
//