百科问答小站 logo
百科问答小站 font logo



如何评价华为发布的鸿蒙OS 2.0需要导入安卓部分SDK等功能? 第1页

  

user avatar   calvinxu17 网友的相关建议: 
      

最后一次更新

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的源代码:

这里的代码也正是引起大家争议的地方,因为他import了安卓的api,继承自安卓的Activity,不过这里import大多数都是与上下文有关的类,可以看到这个类还实现了一个接口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,整体上基本不变,这样应该是为了能够更方便的将安卓代码移植过来。

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

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只能是系统已经内置了,鸿蒙本身就是分布式架构,针对不同的应用可以选择不同的运行时,不过这样的系统不臃肿吗?




  

相关话题

  为什么不能让IOS统一世界的移动端? 
  继 SD 存储卡协会之后更多行业组织恢复华为会员资格,如此反复是不是所谓的「帝国主义都是纸老虎」? 
  如何理解5G下载速度? 
  华为5年后能战胜苹果和三星成为全球第一吗? 
  如何看待华为海思总裁17日凌晨的致信? 
  程序员和设计师等专业人员是否更青睐 macOS / Mac 电脑? 
  任正非在最新讲话中谈到研发 6G 的重要性,你对我国的 6G 技术有哪些期待? 
  如何看待余承东回应今年先不发布手机鸿蒙OS,明年有可能? 
  华为车业务单元(BU)员工称自己离职被逼签竞业协议,竞业范围离谱至极,是真的吗?遇到此情况该怎么办? 
  为什么1KB等于1024B? 

前一个讨论
利物浦盈利状况良好,但近两年转会投入为什么并不多?
下一个讨论
怎样判断一个业余足球队的水平?





© 2024-05-17 - tinynew.org. All Rights Reserved.
© 2024-05-17 - tinynew.org. 保留所有权利