ICode9

精准搜索请尝试: 精确搜索
首页 > 互联网> 文章详细

鸿蒙Harmony谈了这么久,和Android到底啥区别?

2022-10-16 17:33:28  阅读:644  来源: 互联网

标签:华为鸿蒙系统 鸿蒙 HarmonyOS harmony android 啥区别


国产操作系统鸿蒙代码终于开源,IDE也一并公开。迫不及待地安装了IDE并尝了鲜。

将按照鸿蒙OS介绍,IDE介绍,安装及运行,项目构成,APP基本组件,APP可执行文件这几个方面来讲述我自己的开发体验。

HarmonyOS

基于微内核的跨平台分布式操作系统,最新为2.0。不再停留在PPT上,公开了源码和IDE。

官方的资料我一并罗列下来。

鸿蒙OS的官方介绍:

鸿蒙OS在gitee上的主页:

内核源码的地址:

华为开发者论坛:

IDE DevEco Studio

为鸿蒙OS开发的IDE名叫DevEco Studio,基于IntelliJ IDEA Community开源版本打造。界面及开发流程和Android Studio基本一致,极易上手。

下载地址:

官网文档:

DevEco Studio安装及运行

exe下载下来之后双击可以看到配置页面。

选择其他安装目录或默认选项,然后进入启动页面。

十来分钟之后将提示是否下载SDK,选择”接受“继续。

下载成功之后将进入创建项目画面,选择“创建鸿蒙OS项目”继续。

接下来需要选择运行的硬件设备类型,目前支持电视,手表和穿戴设备三种设备类型。也可以看到预设的画面布局,以及开发语言,目前支持JS和JAVA两种开发语言。我们选择“TV”设备,空画面+JAVA开发方式,继续。

当然需要设置项目名称,包名及位置等信息,我们采用“HMApp”名称继续。

配置好之后将进入IDE主界面,并自动下载gradle等依赖包。

gradle下载及配置完毕之后,我们安装下鸿蒙OS模拟器,暂时没有本地的模拟器,只能使用远程的模拟器,需要下载Resources模块和网站登录。我们点击Tools->HVD Manager在打开模拟器设备列表的时候将自动下载Resources模块。

这里必须要提一句,下载Resources模块非常容易遇到如下的失败,很多开发者都遇到。

解决办法很多,没有特别稳妥的方案。比如重启电脑,重启IDE,重装IDE,删除IDE的缓存目录,华为开发者账号注册成功十分钟之后再试等等。反正多试几次终究能成功。

下载成功之后还需要登录华为开发者账号,才可以启动远程模拟器。IDE将自行启动默认浏览器验证账号。在登录成功之后需要“允许”,将看到登录成功的提示。

这之后我们返回IDE,将看到底部的“login success”的提示。然后我们就可以在HVD Manager列表里启动模拟器。

接着运行我们的代码,可以看到成功部署到了远程模拟器上。

项目构成

我们看一下鸿蒙APP的项目构成,并和Android Studio进行对比。

通过仔细对比,发现结构大体是类似的,在主体代码逻辑模块有着明细区别。

1,DevEco将配置清单格式由xml改为json,可能解析起来更为高效。

2,将资源文件分类为存放媒体资源的media目录,存放字符内容的element目录以及存放预设资源的rawfile目录。相比Android原生的资源目录分类更加简洁明了。只是资源文件的尺寸适配,版本适配,国际化适配需要怎么区分开来呢?

3,源文件的几大组件的实现类改了,名字看起来都有些相似,需要看源码才能辨别。

APP基本组件

官方的API说明:

为了搞清楚APP基本组件和Android的区别,我们需要查看源码的实现。我将总结出来的鸿蒙OS的APP组件大致的类图贴出来。

Android原生的Application,Activity及Service三者的类图也一并贴上。

可以看到鸿蒙OS的Ability,AbilitySlice和AbilityPackage组件都继承自同一个父类AbilityContext。而且Context并不像Android,而是个接口。

具体到方法API的区别总结一下,初步感觉是这样的。

可以看到大部分API都是类似的,只是名称上的细微差别,说明组件的设计思路基本一致。但是我们也看到鸿蒙OS出现了一些Android并不存在的API。

比如Ability提供了停止Ability的stopAbility(),设置是否支持侧滑消失的setSwipeToDismiss(),设置路由主入口的setMainRoute(),用来指定先启动的AbilitySlide实例。

比如AbilitySlice提供了开启,停止和获取Ability实例的startAbility(),stopAbility()和getAbility(),同时还提供了设置UI视图的setUIContent()。

AbilitySlice可以直接展示视图,而Android的Service不可以直接展示视图,需要依赖WindowManager去添加Window。再结合官网API的说明,我们可以断定鸿蒙OS的AbilitySlice并不同于Android的Service,它只是Ability的UI展示的一个补充,一个部分而已,更像是Fragment。上述表格的对比维度并不准确,不能直接将AbilitySlice和Service进行对比。

我们还发现一个细节,Ability和AbilitySlice在提供了onConfigurationUpdated()以外都提供了监听屏幕方向变化的onOrientationChanged()。为何将屏幕方向的变化单独处理,比较微妙。

上述表格并未展示的一点是,Ability和AbilitySlice都提供了connectAbility(Intent intent, IAbilityConnection conn)和disconnectAbility(IAbilityConnection conn)去绑定和解绑Ability。但是只有Ability提供了onConnect(Intent intent)和onDisconnect(Intent intent)去处理绑定和解绑的回调。

可以知道AbilitySlice也可以参与绑定组件但只有它依附的Ability可以处理绑定和解绑的回调。

可以发现这和Android完全不一样,Android是Activity通过bindService()和unbindService()去绑定和解绑Service,Service提供了onBind()和onUnbind()去处理绑定和解绑请求。

总结来说,

Android上活动和服务是两个不一样的概念,活动提供和用户交互的UI,服务提供后台任务的执行。活动可以启动和停止服务,也可以绑定,远程调度和解绑服务。他们两者的实现类也是分开的。

而鸿蒙OS则将活动和服务整合,统称为抽象的"能力",由实现类Ability来统一管理。需要展示UI交互的时候,它就是活动;需要执行后台任务的话它就是服务。当然,因为是Ability的缘故,服务拥有了在需要交互时直接展示UI的便利。

必须指出的一点是,虽然将前台活动和后台服务进行整合是个好想法,但很多概念容易混淆,进而导致生命周期的管理混乱。在开发的过程中也极易出错。尤其对于习惯了Activity和Service两大概念的Android开发者来说,需要好好适应一下。。。

APP可执行文件

鸿蒙OS编译出来的应用程序格式为hap,全称是harmony application package?和APK一样也是压缩包,改名之后解压下来如图。有一个同名的APK文件。。。

和一般APK的内容DIFF一下。

我们再把APK文件解压下来和一般的APK对比一下,结构和名称完全一致。

HAP文件内置APK文件当然是为了兼容Android系统,便于系统生态的营造。

具体怎么兼容?我猜想有两个可能性。

1,鸿蒙OS底层仍然是像Android一样,暂时通过PMS和PackageInstaller解析和安装APK文件。所以内置了APK文件,外部的json只是额外配置和补充。

2,鸿蒙OS完全有自己的HAP格式解析和安装流程。这个HAP里内置的APK是为了方便HAP能安装和运行到Android OS上去的。这样可以方便鸿蒙开发者开发的APP可以不用修改代码直接运行到Android设备上。具体怎么实现呢,比如HMS的App Gallery分发HAP格式到手机里的时候,可以自动解压出来APK到手机上,然后执行和APK一样的流程。

从IDE的安装和使用来看,目前还有很多需要优化的地方。

比如每次启动HVD都需要登录,比如运行APP的日志从出不来,比如没有体用本地模拟器等等。

罗马也不是一天建成的,我们需要保持积极的心态去尝试和反馈,给华为开发者一些时间。这样大家才能不断进步。

鸿蒙OS的IDE,组件设计,以及可执行文件构成,和Android有着相似之处却又有差异频频。

这种貌合神离的方式既能在生态营造上取巧,又能树立自己的风格,无奈之中透着倔强。

到底孰优孰劣尚无法评判,只能把问题交给时间和用户。

此刻我只想祝愿鸿蒙OS越来越好!

标签:华为鸿蒙系统,鸿蒙,HarmonyOS,harmony,android,啥区别
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有