鸿蒙应用开发(一)应用适配调研

本文详细介绍了华为鸿蒙OS的构成,包括其组件如HarmonyOS3.1、开发工具DevEcoStudio和ArkTS,以及应用开发中的注意事项,如UI开发、应用模型框架和进程线程模型。还探讨了Java在鸿蒙中的地位和应用转换的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面:

以下内容基于我个人翻阅的官方资料以及自己的理解写的,可能存在认知和理解上的偏差,有些地方并不一定是对的,请谨慎对待,注意甄别!

一、鸿蒙OS是什么?

  1. 华为推出的多端统一平台,可以运行在手机、平板、PC、电视(智慧屏)、音响、甚至是热水壶、洗衣机等设备上,通过鸿蒙系统,可以实现设备间的通信协同能力

  2. 通过华为提供的studio,在创建应用时,指定应用的运行平台,studio会自动帮你集成此平台上所能调用的API等资源

以上所有的统称,叫做鸿蒙OS,针对我们而言,需要关注的是鸿蒙应用的手机(平板)端的适配,以下内容均为手机、平板端的适配方案,不包含PC或者智能硬件上的方案

二、鸿蒙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 :提供应用分发能力,应用列表,链路追踪等

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

ArkTS语言:

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

Java语言:

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

四、鸿蒙应用开发:

1.UI开发:方舟开发框架(ArkUI框架):

开发范式名称

语言生态

UI更新方式

适用场景

适用人群

声明式开发范式

ArkTS语言

数据驱动更新

复杂度较大、团队合作度较高的程序

移动系统应用开发人员、系统应用开发人员

类Web开发范式

JS语言

数据驱动更新

界面较为简单的程序应用和卡片

Web前端开发人员

我们的应用归属于复杂度较大的应用程序,因此采用ArkTS语言进行开发

ArkTS开发框架基于TS语言进行扩展,因此需要开发者具备TS语言开发能力

使用ArkTS开发UI的形式,类似于Android中使用Compose开发UI组件的形式

更多关于ArkTS的相关设计,见这里

2. 应用模型框架:

1) FA模型,鸿蒙已经逐渐废弃,不再调研

2) Stage模型:

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

  1. UIAbility:类似于Android中的Activity

  2. Context:类似于Android中的Context

  3. WindowStage:类似于Android中的window

  4. AbilityStage:类似于Android中的Application

  5. ExtensionAbility:类似于Android中的系统Service,调用这个服务可以拿到一些系统API使用,详情见这里

3. 应用组件开发:

  1. 应用配置:

版本号,启动图标,字符索引等,与Android基本一致,区别在于,从XML配置改为了使用json配置,参考这里

  1. 新增卡片服务:

除了上述 4.2.2中列举的Stage模型,鸿蒙新增了服务卡片,服务卡片与Android的桌面部件不是一回事儿,详情见这里

  1. 跨页面通信:

      Android中使用的是Intent,鸿蒙中使用的是Want,详情见这里

  2. 广播Broadcast:

      广播作为Android中跨进程(页面)通信的工具,在鸿蒙中并不支持

      鸿蒙提供CommonEvent来发布公共事件用以实现跨进程通信的能力,应用可以监听系统的CommonEvent,也可以发送自己的CommonEvent

  3. 服务Service:

      鸿蒙中的FA模型支持Service,但是在Stage模型中并不支持,转而使用以下方式实现:

短时任务:应用在前台或者退到后台的5秒内申请短时任务,同一时机最多申请三个短时任务,每24小时内最多为每个应用执行10分钟短时任务,每个短时任务最多执行3分钟,低电量下最多执行1分钟,运行时间即将超时时,系统会有回调,如果在超时时应用不主动取消任务,则系统会直接关闭应用进程

长时任务:适用于音乐播放、导航等场景,一个UIability最多申请一个长时任务,长时任务运行时会在通知栏有显著提示;同时系统也会对长时任务进行校验(比如开启了音乐播放服务,但是并没有播放音乐,系统会直接关闭应用进程)

延时任务:类似与Android上面的WorkManager,实行分级管控,与用户使用的应用频率有关系,频率越高,延时任务的等级越高,任务越快被执行,默认执行时长2分钟,申请豁免权后,充电下最长20分钟,非充电下最长10分钟

代理提醒:(典型使用场景秒杀活动),由应用注册到系统中,系统在准点时间会通知到用户,用户点击通知后可打开应用(A应用注册的代理,那么只能打开A应用)

4. 进程模型概念:

同一个应用的所有的UIAbility运行在同一个进程中

WebView组件运行在单独的进程中

跨进程通信需要用到CommonEvent来实现

5. 线程模型概念:

与Android一样,鸿蒙中的UI绘制归属于主线程来实现,子线程不能进行UI绘制

鸿蒙中的子线程叫做Worker线程,最多只能创建8个Worker线程,Worker线程不能刷新UI,更多关于Worker见这里

线程间通信:使用Emitter实现,类似于Handler,用于传递事件到队列中,详情见这里

注意点:Worker线程不会自动销毁,当运行完毕后,需要手动销毁

五、应用发布:

1.应用构建:

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

2.应用签名:

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

3. 鸿蒙发布:

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

六、一些问题:

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

先说结论:

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

下面是支撑信息:

华为开发者大会上提到的harmonyOS NEXT 是提供给开发者用于开发应用的版本,因为它的目的就是拿来调试鸿蒙应用的,所以本质上就不兼容Android(NEXT预览版仅针对合作企业开放,我们暂时看不到它是个什么样子)

目前在官方暂未找不到任何关于此方面的言论,一些民间说法是鸿蒙4.0 NEXT系统上会放弃Android的支持,但是没有找到任何官方的证实

网上的各种充斥着各种鸿蒙放弃Android应用的“沸腾文章”,不排除有小道消息的可能性,但是,如果华为真的决定放弃Android应用的支持,那必定会给广大开发者一定的时间去做适配,而不是靠着各种“沸腾文章”来做宣传

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

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

先说结论:Java要被放弃

支撑信息:见5.2

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

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

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

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

七、参考文档:

Harmony-最新最全鸿蒙常用开源库总结 - 掘金

华为开发者社区_开发者中心 | 华为开发者联盟

开发准备-快速入门-入门-HarmonyOS应用开发

### HarmonyOS 手电筒应用程序开发者指南 #### 3.1 应用概述 手电筒应用作为款实用工具类软件,在移动设备上扮演着重要角色。对于基于HarmonyOS NEXT Beta1开发的手电筒应用而言,其设计旨在提供简洁易用的操作界面以及稳定的性能表现[^1]。 #### 3.2 主要功能模块介绍 - **权限管理**:为了能够控制闪光灯硬件资源,程序启动时需向操作系统申请相应权限; - **UI交互逻辑构建**:通过图形化组件实现开关按钮等功能控件布局设置; - **API调用接口封装**:利用新增加的C API能力完成对底层驱动层指令发送接收处理流程抽象化描述。 #### 3.3 关键技术点解析 针对该应用场景下涉及到的技术难点主要有以下几个方面: ##### 3.3.1 权限获取机制分析 由于访问摄像头/LED补光灯属于敏感操作范畴内事项之,因此在首次运行期间会弹窗提示用户授予必要的授权许可给到当前进程实例对象使用。具体来说就是借助`ohos.permission.CAMERA`这个常量字符串来标识所需请求项名称,并将其配置至清单文件当中去以便于后续动态加载验证过程顺利开展。 ```xml <manifest> ... <uses-permission ohos:name="ohos.permission.CAMERA"/> </manifest> ``` ##### 3.3.2 控制元件样式定制方法论探讨 考虑到不同品牌型号终端之间可能存在外观差异性因素影响用户体验致性效果的问题所在,则建议采用自定义ViewGroup容器配合ShapeDrawable绘制器共同作用的方式来达成最佳视觉呈现目的。这样不仅可以灵活调整各个子视图之间的相对位置关系而且还能有效提升整体美观度水平层次感更强些。 ```java // 创建圆形背景形状 ShapeDrawable circleBackground = new ShapeDrawable(new OvalShape()); circleBackground.getPaint().setColor(Color.parseColor("#FFFFFF")); // 设置Button属性并添加上述创建好的drawable资源为其指定按下状态下的反馈特效形式 button.setBackground(circleBackground); button.setClickable(true); button.setOnClickListener(v -> toggleFlashlightState()); ``` ##### 3.3.3 外设通信协议适配策略研究 鉴于各厂商生产的配件产品规格参数不尽相同这实际情况出发,在编写实际业务代码之前应当充分调研目标市场主流机型所支持的标准规范文档资料集锦,从而确保最终成品能够在尽可能广泛范围内正常工作不受限制。特别是当涉及到跨平台移植改造项目时更要注意遵循官方推荐的最佳实践指导原则来进行针对性修改完善直至满足预期质量标准为止。 ```c /* 假定存在个名为flashlight_control.c的源码片段 */ #include "sensor_api.h" void turnOnFlashlight() { int ret; /* 初始化传感器句柄 */ SensorHandle handle; InitSensor(&handle); /* 配置相关参数选项 */ SetParameter(handle, PARAM_KEY_BRIGHTNESS_LEVEL, BRIGHTNESS_HIGH); /* 发送开启命令 */ ret = SendCommand(handle, CMD_TURN_ON); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值