图片来源:[杂谈] 鸿蒙开发工具,deveco,可以下载了


最后一次更新

12月开源前应该不会再更新了,更正一下,基于LiteOS内核是没有java虚拟机的,java编写的app只能是未来用在大内存设备上,目前小于128M内存的lite设备只能使用html+js的方法编写、编译程序,在LiteOS中使用华为已经开源的js framework运行app,目前系统整体架构如下图所示(参考华为提供文档中的JS架构增加了未来Java的一部分):

架构

内核包含了Linux这不是我自己加的,文档中JS架构图、驱动架构图均出现了Linux,在驱动架构图中还出现了micro微内核,手机端究竟如何只有等开源了才能揭晓答案。

官方原版架构图:


再次更新

昨晚有空下载并阅读了openharmony的源代码,发现了新大陆。可以确定的是,在嵌入式设备中基于LiteOS内核,华为确实开发出了一套自己的app运行时framework、ability framework以及UI framework,并且与app开发中的java介面相一致。看得比较急,还没找到java虚拟机的实现代码,有一部分框架文档还没开放,点开链接是404,具体的以后有时间再看再更新,考研党逃了~


半天没看知乎,突然多了这么多赞

补充几点说明,首先虽然hap安装包中有apk安装包,但这并不是说鸿蒙是安卓套壳,从前面我的分析可以看出,apk包中是不包含任何软体逻辑的,这个包似乎是自动生成的,并且即使创建新的工程再编译,除了java的包名以外也基本上都不会变的。原回答的图中可以看出,apk的代码包含两个类:MainAbilityShellActivity和ShellMyApplication。shell是壳的意思,例如Linux的shell就是指在内核上套了一层壳,用户在终端通过这层壳与内核交互,从类名可以大致判断,这里的Activity是作为鸿蒙的Ability的一层壳,猜测是用来实现安卓进程与鸿蒙进程通讯。可以先看一下AbilityShellActivity的源代码:

AbilityShellActivity

这里的代码也正是引起大家争议的地方,因为他import了安卓的api,继承自安卓的Activity,不过这里import大多数都是与上下文有关的类,可以看到这个类还实现了一个介面IAbilityShell,查看其源代码:

IAbilityShell

这个介面用来获取系统的上下文、获取系统类载入器、设置UI,也就是说这个Activity会与相应的Ability绑定,通过这个介面在安卓进程中可以获取到鸿蒙Ability相应的上下文信息,实现进程间的ipc。同样看一下HarmonyApplication这个类:

该类继承自安卓的Application,作为一个安卓进程的实体类。该类有get、set Ability等方法来获取、设置所对应鸿蒙进程的ability。

如果分析的没错,这个apk就是用来实现鸿蒙进程与安卓进程通信的,HarmonyApplication中的最后一段代码也能说明这点

可以看到这个类初始化是会载入ipc_core.z这个so库,从名字就可判断是用于进程间ipc的。

知乎上另一个问题有大佬已经解释,鸿蒙作为分散式架构拥有分散式内核,也就是说可能鸿蒙与Linux会同时存在,如果鸿蒙的内核确实是独立于安卓的Linux内核,那么通过上面分析,鸿蒙app启动流程可能是这样:鸿蒙App在鸿蒙的内核中启动运行-&>鸿蒙内核主动向Linux内核发送请求运行apk包中的代码在安卓虚拟机中创建一个用于与该鸿蒙进程通信的Shell进程,并设置好对应ability的上下文环境-&>安卓进程通过这个Shell进程与鸿蒙进程通信。

以上纯属从软体端代码分析做出的判断,而鸿蒙实际上是什么样的存在还需要阅读鸿蒙的内核源代码,目前只开源了用于嵌入式设备的LiteOS内核,手机端只能等到12月开源才能进一步分析。

不论最终鸿蒙是自己的内核还是基于Linux还是别的什么操作,华为能将ide发布,并且公开相应的app开发文档,说明鸿蒙App基于java的开发框架就是目前这样了。华为肯定是希望开发者能尽快适配鸿蒙OS,之所以鸿蒙的Api与安卓是如此的类似,就是为了减少开发者迁移和学习的成本,现在只需静等手机端开源再下结论,其他的只能说是猜测。

最后补一句毛主席的话:没有调查就没有发言权。

以下为原回答


不知道具体的机制不多做主观回答,个人觉得为了能够兼容安卓吧,鸿蒙才2.0,想要独立的用方舟编译器把apk直接编译成鸿蒙app不太现实。刚刚装好DevCro体验了一下,整个界面和Android Studio非常接近,可用html+js的方式开发,也可以用纯java开发。api也和安卓没有太大区别,部分类名做了修改,比如activity改成了ability,整体上基本不变,这样应该是为了能够更方便的将安卓代码移植过来。

Ability类

编译后生成了hap安装包,可以直接将其作为zip压缩包打开,里面有一个entry_signed_entry.apk,这里应该是程序的入口。

hap包

classes.dex是java编译后的文件,反编译可以看出是我们前面的harmonyOS的代码

将apk解压后可以看到是正常的安卓安装包

反编译这个apk中的dex,jar包查看java源代码,发现里面也确实调用到了安卓的api,不过只用到了android.os.bundle,这个类是用来在activity间通讯的。

而且这个apk是可以在安卓手机安装的只不过无法运行,因为其余的资源文件和我们编写的harmony app的代码都被抽在了外面,直接安装里面的apk运行是不行的。不知道鸿蒙具体的运行机制是啥,这个entry_signed_entry.apk的源代码也没有看出是从他来启动harmonyOS的ability。具体等后面官方公布技术细节,个人觉得鸿蒙是有安卓的运行时支持的,因为鸿蒙的hap包内本身并没有第三方的lib,要想调用这个android.os.bundle只能是系统已经内置了,鸿蒙本身就是分散式架构,针对不同的应用可以选择不同的运行时,不过这样的系统不臃肿吗?


你这问题就是错误的。

不是鸿蒙2.0需要导入,而是开发工具在开发需要兼容安卓的程序的时候,需要导入依赖库,这个很正常,比如你需要支持JAVA就需要导入相应的库,否则虽然介面的名称一样,但内部实现不一样,那是要出大问题的。这样做是为了保证过程和结果的一致性,同时也是为了尊重人家的版权。当今主流的程序开发工具,都是插件式的,需要下载相应的库,不然就不可能具备相应的功能,起码连编译都通不过

系统级支持、框架级支持、类库支持、介面支持与扩展这些是不同层级的概念。

鸿蒙2.0指是HarmonyOS2.0,它是操作系统,而开发工具是DevECO IDE,它是一个工具。这二者根本就是两个东西,不可混为一谈。

所谓的鸿蒙兼容安卓是指,安卓的APK程序可以直接在鸿蒙系统上「正常」运行。这个正常是指看起来没啥差异,但是背后运行的机制不一样,安卓是有虚拟机的,而鸿蒙是可以直接支持相关的介面。从目前披露的代码来看,鸿蒙不可能是套皮的安卓,因为他们的机制根本性的不一样,把精力花在这些上,没有意义。


补充说一句:目前吹和踩的人,都没有必要,因为都没有充足的论据。

从我个人的情感倾向来讲,我希望华为能坚持地做完,长久地希望他能做好,虽然这很难也很遥远。为啥?竞争促进繁荣。更何况还是解决一个第三方操作系统有无的问题,要应付极端情况,就必须要有备胎,不要认为中美之间永远都不可能脱钩,永远都不会发生战争,那违背了事物发展的规律,变化是世界永恒的主题,谁也想不到明天会怎么样。就象恶狗扑上来,即使没有先进的枪,有一根打狗棒也是好的,总比没有要安全一些。


华为员工没有把时间浪费在构建这种可以直接就用的包上说明华为还是非常清醒的,没有像某些同志一样沸腾。。。

别人的东西,用了不违法,没有隐患,正常人的思路必然是拿来就用。只有脑子里全是水的人才会想著我们每一行代码每一个标点符号都要自己构建。


想要开发兼容Android的程序,导入sdk很正常

想要证明鸿蒙不是套皮很简单,不import任何Android相关sdk,写一个能在鸿蒙设备上流畅运行的程序(比如闹钟),即可

如果这样一个程序都因为各种原因无法写出来,无论是不是套皮,要鸿蒙何用?


import了几个包,把这些人急得

先自己立个虚无的靶子:

鸿蒙要从底层写起,每一行代码都是自己写的!吊打安卓ios!鸿蒙天下第一!

然后再对著自己的靶子攻击:

看,华为又吹牛了,小粉红又沸腾了,怎么是安卓套壳啊?

按照这道理,是不是我装个MinGW,我的win10就变成Linux套壳了?

什么是开源先百度搞清楚先,再来谈项目结构,真心不建议一点背景知识都没有储备的人,来夸夸其谈


这个没有营养的回答就别赞了,大家移步大佬们的回答

年轻人啊不要熬夜:如何看待 9 月 10 日华为发布的鸿蒙 OS 2.0 系统,应用前景如何??

www.zhihu.com图标真的是个营销号:如何评价华为发布的鸿蒙OS 2.0需要导入安卓部分SDK等功能??

www.zhihu.com图标

我是做演算法的,方向不同也不能给出多专业的答案

只是想告诉各位,隔行如隔山,即便同属计算机领域,不同方向也千差万别,自己不了解的东西千万别随意做出判断甚至胡乱攻击

而看到个截图有Android,不加以了解就沸腾,甚至都不知道这个SDK用在何处的人,大概连hello world都没写过吧


推荐阅读:
相关文章