【无标题】

鸿蒙OS适配调研文档

写在前面:

以下内容基于我自己翻阅的华为官方文档以及我自己的理解而写,限于知识面和理解的偏差,可能存在错误,请自行辨别

1、 鸿蒙OS是什么?

  1. 华为推出的多端统一平台,可以运行在手机、平板、PC、电视(智慧屏)、音响、甚至是热水壶、洗衣机等设备上,通过鸿蒙系统,可以实现设备间的通信协同能力
  2. 通过华为提供的studio,在创建应用时,指定应用的运行平台,studio会自动帮你集成此平台上所能调用的API等资源
    以上所有的统称,叫做鸿蒙OS,针对我们而言,需要关注的是鸿蒙应用的手机(平板)端的适配,以下内容均为手机、平板端的适配方案,不包含PC或者智能硬件上的方案

2、 鸿蒙OS包括哪些组件:

  1. HarmonyOS 3.1 :系统版本,比如同样为3.0系统版本的电视和手机,兼容性是最好的,但是3.0版本的电视和4.0版本的手机,中间的某些协同能力可能就无法支持了
  2. DevEco Studio :等价与Android Studio 、XCode,是华为提供给开发者使用的开发工具,用来开发鸿蒙应用,调试等,也是我们开发者接触最多的工具
  3. ArkTS :鸿蒙生态的应用开发语言,等价于Android开发中的Java语言,或者kotlin语言
  4. ArkUI : UI开发框架,实现UI绘制显示的东西,类似于Android中的XML布局文件
  5. ArkCompiler :类似于JDK,负责把代码转译为方舟字节码,开发上层应用时无需关心
  6. DevEco Testing : 提供远程真机,性能测试,漏洞检测等
  7. AppGallery Connect :提供应用分发能力,应用列表,链路追踪等

3、 鸿蒙应用支持的开发语言:

3.1 ArkTS语言:

指的是 ArkTS以及JavaScript,是鸿蒙首推的开发语言

3.2 Java语言:

从华为的官方文档上来看,3.0版本的开发文档支持ArkTS和Java两种编程语言,但是华为官方3.1和4.0版本的文档中,已经没有Java语言的开发说明了,虽然官方没有明确声明不再支持Java,但是从现象上来看,的确是在逐步放弃Java的支持

4、 鸿蒙应用开发:

4.1 UI开发:方舟开发框架(ArkUI框架):

开发范式名称 语言生态 UI更新方式 适用场景 适用人群
声明式开发范式 ArkTS语言 数据驱动更新 复杂度较大、团队合作度较高的程序 移动系统应用开发人员、系统应用开发人员
类Web开发范式 JS语言 数据驱动更新 界面较为简单的程序应用和卡片 Web前端开发人员
  • 我们的Android应用归属于复杂度较大的应用程序,因此采用ArkTS语言进行开发
  • ArkTS开发框架基于TS语言进行扩展,因此需要开发者具备TS语言开发能力
  • 使用ArkTS开发UI的形式,类似于Android中使用Compose开发UI组件的形式
  • 更多关于ArkTS的相关设计,见这里

4.2 应用模型框架:

4.2.1 FA模型,鸿蒙已经逐渐废弃,不再调研
4.2.2 Stage模型:

Stage模型描述了应用的开发框架,主要由一下5部分组成:

  1. UIAbility:类似于Android中的Activity
  2. Context:类似于Android中的Context
  3. WindowStage:类似于Android中的window
  4. AbilityStage:类似于Android中的Application
  5. ExtensionAbility:类似于Android中的系统Service,调用这个服务可以拿到一些系统API使用,详情见这里

4.2.3 应用组件开发:

  1. 应用配置:
    版本号,启动图标,字符索引等,与Android基本一致,区别在于,从XML配置改为了使用json配置,参考这里
  2. 新增卡片服务:
    除了上述 4.2.2中列举的Stage模型,鸿蒙新增了服务卡片,服务卡片与Android的桌面部件不是一回事儿,详情见这里
  3. 跨页面通信:
    Android中使用的是Intent,鸿蒙中使用的是Want,详情见这里
  4. 广播Broadcast:
    广播作为Android中跨进程(页面)通信的工具,在鸿蒙中并不支持
    鸿蒙提供CommonEvent来发布公共事件用以实现跨进程通信的能力,应用可以监听系统的CommonEvent,也可以发送自己的CommonEvent
  5. 服务Service:
    鸿蒙中的FA模型支持Service,但是在Stage模型中并不支持,转而使用以下方式实现:
  • 短时任务:应用在前台或者退到后台的5秒内申请短时任务,同一时机最多申请三个短时任务,每24小时内最多为每个应用执行10分钟短时任务,每个短时任务最多执行3分钟,低电量下最多执行1分钟,运行时间即将超时时,系统会有回调,如果在超时时应用不主动取消任务,则系统会直接关闭应用进程
  • 长时任务:适用于音乐播放、导航等场景,一个UIability最多申请一个长时任务,长时任务运行时会在通知栏有显著提示;同时系统也会对长时任务进行校验(比如开启了音乐播放服务,但是并没有播放音乐,系统会直接关闭应用进程)
  • 延时任务:类似与Android上面的WorkManager,实行分级管控,与用户使用的应用频率有关系,频率越高,延时任务的等级越高,任务越快被执行,默认执行时长2分钟,申请豁免权后,充电下最长20分钟,非充电下最长10分钟
  • 代理提醒:(典型使用场景秒杀活动),由应用注册到系统中,系统在准点时间会通知到用户,用户点击通知后可打开应用(A应用注册的代理,那么只能打开A应用)

4.2.4 进程模型概念:

  • 同一个应用的所有的UIAbility运行在同一个进程中
  • WebView组件运行在单独的进程中
  • 跨进程通信需要用到CommonEvent来实现

4.2.5 线程模型概念:

  • 与Android一样,鸿蒙中的UI绘制归属于主线程来实现,子线程不能进行UI绘制
  • 鸿蒙中的子线程叫做Worker线程,最多只能创建8个Worker线程,Worker线程不能刷新UI,更多关于Worker见这里
  • 线程间通信:使用Emitter实现,类似于Handler,用于传递事件到队列中,详情见这里
  • 注意点:Worker线程不会自动销毁,当运行完毕后,需要手动销毁

4.3 应用发布:

4.3.1 应用构建:

鸿蒙应用中,API 1~7使用Gradle语言进行构建,在API 8、9中使用Hvigor语言进行构建

4.3.2 应用签名:

类似于Android应用签名,详情见这里

4.3.3 鸿蒙发布:

跟Android应用的分发一样,区别在于上传应用时选择鸿蒙应用即可,后缀为 .app

5. 一些问题:

5.1 华为是否准备放弃Android应用的支持?

先说结论:

到目前为止,华为并没有公开声明放弃Android应用的支持;如果宣布放弃的话,也会给广大的开发者一定的时间去做迁移适配工作

下面是支撑信息:
  • 华为开发者大会上提到的harmonyOS NEXT 是提供给开发者用于开发应用的版本,因为它的目的就是拿来调试鸿蒙应用的,所以本质上就不兼容Android(NEXT预览版仅针对合作企业开放,我们暂时看不到它是个什么样子)
  • 目前在官方暂未找不到任何关于此方面的言论,一些民间说法是鸿蒙4.0 NEXT系统上会放弃Android的支持,但是没有找到任何官方的证实
  • 网上的各种充斥着各种鸿蒙放弃Android应用的“沸腾文章”,不排除有小道消息的可能性,但是,如果华为真的决定放弃Android应用的支持,那必定会给广大开发者一定的时间去做适配,而不是靠着各种“沸腾文章”来做宣传

5.2 现有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

5.3 鸿蒙应用可否使用Java语言进行开发?

先说结论:Java要被放弃
支撑信息:见5.2

5.4 是否支持使用方舟编译器开发出来的应用编译为Android、iOS、鸿蒙App?

不支持,方舟编译器只能开发鸿蒙应用

5.5 鸿蒙中的免安装应用是怎么实现的?

此类应用在鸿蒙系统中称之为元服务(原子化服务),应用大小不超过10MB,其实是有安装过程的,但是对于用户来讲是无感的,由系统进行下发

6、参考文档:

  • Harmony-最新最全鸿蒙常用开源库总结 - 掘金
  • 华为开发者社区_开发者中心 | 华为开发者联盟
  • 开发准备-快速入门-入门-HarmonyOS应用开发

最后:

以上是我个人的理解总结,可能存在理解偏差,请慎重对待~

你可能感兴趣的:(鸿蒙,android)