以下内容基于我个人翻阅的官方资料以及自己的理解写的,可能存在认知和理解上的偏差,有些地方并不一定是对的,请谨慎对待,注意甄别!
华为推出的多端统一平台,可以运行在手机、平板、PC、电视(智慧屏)、音响、甚至是热水壶、洗衣机等设备上,通过鸿蒙系统,可以实现设备间的通信协同能力
通过华为提供的studio,在创建应用时,指定应用的运行平台,studio会自动帮你集成此平台上所能调用的API等资源
以上所有的统称,叫做鸿蒙OS,针对我们而言,需要关注的是鸿蒙应用的手机(平板)端的适配,以下内容均为手机、平板端的适配方案,不包含PC或者智能硬件上的方案
HarmonyOS 3.1 :系统版本,比如同样为3.0系统版本的电视和手机,兼容性是最好的,但是3.0版本的电视和4.0版本的手机,中间的某些协同能力可能就无法支持了
DevEco Studio :等价与Android Studio 、XCode,是华为提供给开发者使用的开发工具,用来开发鸿蒙应用,调试等,也是我们开发者接触最多的工具
ArkTS :鸿蒙生态的应用开发语言,等价于Android开发中的Java语言,或者kotlin语言
ArkUI : UI开发框架,实现UI绘制显示的东西,类似于Android中的XML布局文件
ArkCompiler :类似于JDK,负责把代码转译为方舟字节码,开发上层应用时无需关心
DevEco Testing : 提供远程真机,性能测试,漏洞检测等
AppGallery Connect :提供应用分发能力,应用列表,链路追踪等
指的是 ArkTS以及JavaScript,是鸿蒙首推的开发语言
从华为的官方文档上来看,3.0版本的开发文档支持ArkTS和Java两种编程语言,但是华为官方3.1和4.0版本的文档中,已经没有Java语言的开发说明了,虽然官方没有明确声明不再支持Java,但是从现象上来看,的确是在逐步放弃Java的支持
开发范式名称 |
语言生态 |
UI更新方式 |
适用场景 |
适用人群 |
声明式开发范式 |
ArkTS语言 |
数据驱动更新 |
复杂度较大、团队合作度较高的程序 |
移动系统应用开发人员、系统应用开发人员 |
类Web开发范式 |
JS语言 |
数据驱动更新 |
界面较为简单的程序应用和卡片 |
Web前端开发人员 |
我们的应用归属于复杂度较大的应用程序,因此采用ArkTS语言进行开发
ArkTS开发框架基于TS语言进行扩展,因此需要开发者具备TS语言开发能力
使用ArkTS开发UI的形式,类似于Android中使用Compose开发UI组件的形式
更多关于ArkTS的相关设计,见这里
描述了应用的开发框架,主要由一下5部分组成:
UIAbility:类似于Android中的Activity
Context:类似于Android中的Context
WindowStage:类似于Android中的window
AbilityStage:类似于Android中的Application
ExtensionAbility:类似于Android中的系统Service,调用这个服务可以拿到一些系统API使用,详情见这里
应用配置:
版本号,启动图标,字符索引等,与Android基本一致,区别在于,从XML配置改为了使用json配置,参考这里
新增卡片服务:
除了上述 4.2.2中列举的Stage模型,鸿蒙新增了服务卡片,服务卡片与Android的桌面部件不是一回事儿,详情见这里
跨页面通信:
Android中使用的是Intent,鸿蒙中使用的是Want,详情见这里
广播Broadcast:
广播作为Android中跨进程(页面)通信的工具,在鸿蒙中并不支持
鸿蒙提供CommonEvent来发布公共事件用以实现跨进程通信的能力,应用可以监听系统的CommonEvent,也可以发送自己的CommonEvent
服务Service:
鸿蒙中的FA模型支持Service,但是在Stage模型中并不支持,转而使用以下方式实现:
短时任务:应用在前台或者退到后台的5秒内申请短时任务,同一时机最多申请三个短时任务,每24小时内最多为每个应用执行10分钟短时任务,每个短时任务最多执行3分钟,低电量下最多执行1分钟,运行时间即将超时时,系统会有回调,如果在超时时应用不主动取消任务,则系统会直接关闭应用进程
长时任务:适用于音乐播放、导航等场景,一个UIability最多申请一个长时任务,长时任务运行时会在通知栏有显著提示;同时系统也会对长时任务进行校验(比如开启了音乐播放服务,但是并没有播放音乐,系统会直接关闭应用进程)
延时任务:类似与Android上面的WorkManager,实行分级管控,与用户使用的应用频率有关系,频率越高,延时任务的等级越高,任务越快被执行,默认执行时长2分钟,申请豁免权后,充电下最长20分钟,非充电下最长10分钟
代理提醒:(典型使用场景秒杀活动),由应用注册到系统中,系统在准点时间会通知到用户,用户点击通知后可打开应用(A应用注册的代理,那么只能打开A应用)
同一个应用的所有的UIAbility运行在同一个进程中
WebView组件运行在单独的进程中
跨进程通信需要用到CommonEvent来实现
与Android一样,鸿蒙中的UI绘制归属于主线程来实现,子线程不能进行UI绘制
鸿蒙中的子线程叫做Worker线程,最多只能创建8个Worker线程,Worker线程不能刷新UI,更多关于Worker见这里
线程间通信:使用Emitter实现,类似于Handler,用于传递事件到队列中,详情见这里
注意点:Worker线程不会自动销毁,当运行完毕后,需要手动销毁
鸿蒙应用中,API 1~7使用Gradle语言进行构建,在API 8、9中使用Hvigor语言进行构建
类似于Android应用签名,详情见这里
跟Android应用的分发一样,区别在于上传应用时选择鸿蒙应用即可,后缀为 .app
先说结论:
到目前为止,华为并没有公开声明放弃Android应用的支持;如果宣布放弃的话,也会给广大的开发者一定的时间去做迁移适配工作
下面是支撑信息:
华为开发者大会上提到的harmonyOS NEXT 是提供给开发者用于开发应用的版本,因为它的目的就是拿来调试鸿蒙应用的,所以本质上就不兼容Android(NEXT预览版仅针对合作企业开放,我们暂时看不到它是个什么样子)
目前在官方暂未找不到任何关于此方面的言论,一些民间说法是鸿蒙4.0 NEXT系统上会放弃Android的支持,但是没有找到任何官方的证实
网上的各种充斥着各种鸿蒙放弃Android应用的“沸腾文章”,不排除有小道消息的可能性,但是,如果华为真的决定放弃Android应用的支持,那必定会给广大开发者一定的时间去做适配,而不是靠着各种“沸腾文章”来做宣传
先说结论:
Android-apk不能转,需要从源码上转,而且不支持无缝转换,需要改动的地方很多,难度不小,不建议
支撑信息:
从官方文档看到,目前鸿蒙的SDK-API 最新是到 9,而从SDK-API 7开始,就不再新增Java的API了,也就是说,如果我们使用Java开发鸿蒙应用,那么只能使用低于API 7 版本的SDK ,而新增的API,则无法使用Java调用
官方文档上没有找到支持kotlin的说明,而我们的应用大部分代码都是用的kotlin编写
如果依然要使用Java开发,那么,华为官方并没有提供相关API或者转换工具供我们使用,但是现有的一些基于Java的三方SDK仍然可以直接使用,最新最全鸿蒙常用开源库总结,也就是说我们可以创建一个Java版的鸿蒙应用工程,然后把代码拷贝进去,具体的工作量在于:
现有Android提供的四大组件,在鸿蒙的SDK中是不存在的,需要改为使用鸿蒙提供的API
现有的XML布局无法使用,需要换成鸿蒙提供的UI框架来做
替换一些鸿蒙无法支持的三方SDK
先说结论:Java要被放弃
支撑信息:见5.2
不支持,方舟编译器只能开发鸿蒙应用
此类应用在鸿蒙系统中称之为元服务(原子化服务),应用大小不超过10MB,其实是有安装过程的,但是对于用户来讲是无感的,由系统进行下发
Harmony-最新最全鸿蒙常用开源库总结 - 掘金
华为开发者社区_开发者中心 | 华为开发者联盟
开发准备-快速入门-入门-HarmonyOS应用开发