首页
论坛
课程
招聘
[原创]HarmonyOS 2.0全解析:这究竟是一个怎么样的系统?
2021-6-4 05:45 22615

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

2021-6-4 05:45
22615

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软件的内容。注意安卓应用模式下是无法获取鸿蒙应用的真实安装包路径的,只能获取壳包路径,可以使用免安装模式来加载。


[2022夏季班]《安卓高级研修班(网课)》月薪三万班招生中~

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

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

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

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

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

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

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

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