鸿蒙系统调研适配
写在前面:
以下内容基于我个人翻阅的官方资料以及自己的理解写的,可能存在认知和理解上的偏差,有些地方并不一定是对的,请谨慎对待,注意甄别!
一、鸿蒙OS是什么?
-
华为推出的多端统一平台,可以运行在手机、平板、PC、电视(智慧屏)、音响、甚至是热水壶、洗衣机等设备上,通过鸿蒙系统,可以实现设备间的通信协同能力
-
通过华为提供的studio,在创建应用时,指定应用的运行平台,studio会自动帮你集成此平台上所能调用的API等资源
以上所有的统称,叫做鸿蒙OS,针对我们而言,需要关注的是鸿蒙应用的手机(平板)端的适配,以下内容均为手机、平板端的适配方案,不包含PC或者智能硬件上的方案
二、鸿蒙OS包括哪些组件:
-
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语言:
指的是 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部分组成:
-
UIAbility:类似于Android中的Activity
-
Context:类似于Android中的Context
-
WindowStage:类似于Android中的window
-
AbilityStage:类似于Android中的Application
-
ExtensionAbility:类似于Android中的系统Service,调用这个服务可以拿到一些系统API使用,详情见这里
3. 应用组件开发:
-
应用配置:
版本号,启动图标,字符索引等,与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应用)
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应用开发
相关文章:
鸿蒙系统调研适配
写在前面: 以下内容基于我个人翻阅的官方资料以及自己的理解写的,可能存在认知和理解上的偏差,有些地方并不一定是对的,请谨慎对待,注意甄别! 一、鸿蒙OS是什么? 华为推出的多端统一平台&…...
SAP gui 登录条目不让修改
今天碰到用户安装的GUI 770 版本,不让修改,也不让添加 后面再选项里面找到了...
华为ac+fit无线2层漫游配置案例
ap的管理dhcp在ac上,业务dhcp在汇聚交换机上、并且带2层漫游 R1: interface GigabitEthernet0/0/0 ip address 11.1.1.1 255.255.255.0 ip route-static 12.2.2.0 255.255.255.0 11.1.1.2 ip route-static 192.168.0.0 255.255.0.0 11.1.1.2 lsw1: vlan batch 100…...
nginx的location中配置路径讲解
初次接触:可能会遇到404找不到页面的错误,主要原因是配置路径问题; 规则:ip port 等于 root,假设server的配置如下: server { listen 80; #端口号 location / { root /opt/sta…...
No appropriate protocol -- Mysql
DataGrip连接mysql报以下异常信息: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) The following required algorithms might be disabled: SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5wi…...
Using Set Processing Effectively 有效地使用集合处理
Using Set Processing Effectively 有效地使用集合处理 The information in the topics that follow applies if you are developing new or upgrading older Application Engine programs to adhere to a set-based model. 如果要开发新的应用程序引擎程序或升级旧的应用程序…...
HarmonyOS开发Java与ArkTS如何抉择
在“鸿蒙系统实战短视频App 从0到1掌握HarmonyOS”视频课程中,很多学员来问我,在HarmonyOS开发过程中,面对Java与ArkTS,应该选哪样? 本文详细分析Java与ArkTS在HarmonyOS开发过程的区别,力求解答学员的一些…...
“茶叶创新:爆改营销策略,三个月狂销2300万“
我的朋友去年制作了一款白茶,并在短短三个月内将其销售量推到了2300万的高峰。你相信吗? 这位朋友并没有任何茶叶方面的经验,他只是一个有着冒险精神的企业家。他先找到了一家代工厂,帮助他把他的茶叶理念转化为现实。 当他把茶叶…...
分享一个生成哈希值的C代码
代码是我在阅读assimp源码时看到的,不依赖任何第三方,可直接集成。 #pragma once #ifndef AI_HASH_H_INCLUDED #define AI_HASH_H_INCLUDED#ifdef __GNUC__ # pragma GCC system_header #endif#include <stdint.h> #include <string.h> #…...
【Windows 常用工具系列 11 -- 福昕PDF搜索高亮过的文本】
文章目录 福昕 PDF 搜索高亮过的文本 福昕 PDF 搜索高亮过的文本 在 pdf 文档阅读过程中,我们需要经常高亮一些文本,以方便下次阅读时找到重点。我这边使用的是 福昕PDF 阅读器,下面就介绍下如何在福昕阅读器中搜索已经高亮过的文本。...
(二)汇编语句组成
一个完整的 RISC-V 汇编程序有多条 语句(statement) 组成。 一条典型的 RISC-V 汇编 语句 由 3 部分组成: 1.标签 List item label(标签): 标签是标识程序位置的记号。通常定义一个名称然后加上":"后缀。…...
Linux C 网络编程概述
网络编程 计算机网络概述分类网络体系结构通信协议通信流程网络通信帧格式以太网帧格式分析ARP 协议分析IP 数据报分析IP分类IP 分配子网掩码 TCP 段分析 TCP三次握手协议 ⭐TCP四次挥手协议 ⭐ TCP编程基于 TCP 客户端编程-步骤说明基于 TCP 服务器端编程-步骤说明基于 TCP 服…...
腾讯云标准型s5和s6有什么区别?CPU处理器有差异吗?
腾讯云服务器CVM标准型S5和S6有什么区别?都是标准型云服务器,标准型S5是次新一代云服务器规格,标准型S6是最新一代的云服务器,S6实例的CPU处理器主频性能要高于S5实例,同CPU内存配置下的标准型S6实例要比S5实例性能更好…...
WPF TextBox实现placeholder
WPF里TextBox没有placeholder,需要自己实现,本篇博客介绍WPF TextBox实现placeholder,效果如下: 实现技巧是在 TextBox 控件的 Style 中使用触发器(Triggers)来显示和隐藏placeholder文本。xmal代码如下&am…...
UiPath Studio 2023.10 Crack
UiPath Studio是一款功能强大且用户友好的集成开发环境 (IDE),专为机器人流程自动化 (RPA) 设计。它由自动化技术领域的领先公司UiPath开发。 以下是 UiPath Studio 的一些主要功能和组件: 图形用户界面 (GUI):UiPath Studio 具有直观且用户友…...
SpringBoot——入门及原理
SpringBoot用来简化Spring应用开发,约定大于配置,去繁从简,是由Pivotal团队提供的全新框架。其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置(有特殊需求可以添加自己的配置覆盖默认配…...
js实现页面滚动时自动切换Sidebar标签,点击标签自动滚动页面
js实现页面滚动时自动切换Sidebar侧边导航标签,点击标签自动滚动页面 <van-sidebar class"sidebar" v-model"activeKey"><van-sidebar-item :title"i.title" click"onChange(i)" v-for"(i,k) in activeList&…...
Failed to load resource: net::ERR_UPLOAD_FILE_CHANGED 谷歌浏览器就会有这个问题 其他的浏览器没有
Failed to load resource: net::ERR_UPLOAD_FILE_CHANGED 10 10: Difficulties in file uploading through all browsers and applications...
微信小程序 prettier 格式化
一、安装prettier插件 二、打开设置 然后再打开setting.json 新增代码 {"editor.formatOnSave": true,"editor.defaultFormatter": "esbenp.prettier-vscode","prettier.documentSelectors": ["**/*.wxml", "**/*.wx…...
SystemVerilog学习 (10)——线程控制
一、概述 在实际硬件中,时序逻辑通过时钟沿来激活,组合逻辑的输出则随着输人的变化而变化。所有这些并发的活动在Verilog 的寄存器传输级上是通过initial和 always块语句、实例化和连续赋值语句来模拟的。为了模拟和检验这些语句块,测试平台使用许多并发执行的线程。在测试平台…...
Azure/setup-helm:GitHub Actions 中 Helm 客户端安装的标准化解决方案
1. 项目概述:为什么我们需要一个官方的 Helm 安装 Action?如果你在 GitHub Actions 的工作流里用过 Helm,大概率经历过这样的场景:为了安装 Helm 客户端,你不得不在steps里写一段run命令,可能是从 GitHub R…...
基于RAG的本地知识库构建:Klug工具实践与优化指南
1. 项目概述:一个轻量级、可扩展的本地知识库构建工具最近在折腾个人知识管理和AI应用落地的过程中,我一直在寻找一个能让我把散落在各处的文档、笔记、网页内容快速“喂”给本地大语言模型(LLM)的工具。市面上的方案要么太重&…...
CANN/pypto argsort排序索引
# pypto.argsort 【免费下载链接】pypto PyPTO(发音: pai p-t-o):Parallel Tensor/Tile Operation编程范式。 项目地址: https://gitcode.com/cann/pypto 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3…...
CANN/hixl C++示例指南
目录 【免费下载链接】hixl HIXL(Huawei Xfer Library)是一个灵活、高效的昇腾单边通信库,面向集群场景提供简单、可靠、高效的点对点数据传输能力。 项目地址: https://gitcode.com/cann/hixl 样例介绍目录结构环境要求程序编译样例运…...
在自动化工作流中实现多模型 API 供应商的动态切换
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在自动化工作流中实现多模型 API 供应商的动态切换 应用场景类,当企业需要构建高可用的 AI 应用时,依赖单一…...
无标签数据下的模型评估:SUDO方法与可靠性-完整性曲线实战指南
1. 项目概述:当数据没有“标准答案”时,我们如何评价模型?在机器学习项目的实际落地中,我们常常会陷入一个尴尬的境地:模型训练好了,但用来评估它性能的“黄金标准”测试集,要么不存在ÿ…...
从亿航EH216-S取证看载人无人机适航:一份给硬件工程师的避坑指南
亿航EH216-S适航取证背后的硬件工程实战:关键挑战与设计启示 当全球首款载人无人机EH216-S的型号合格证(TC)颁发时,整个航空工业的目光都聚焦在了这个不足600公斤的飞行器上。作为硬件工程师,我们看到的不仅是里程碑式…...
Tsuru平台安全合规审计终极指南:定期检查与事件驱动策略
Tsuru平台安全合规审计终极指南:定期检查与事件驱动策略 【免费下载链接】tsuru Open source and extensible Platform as a Service (PaaS). 项目地址: https://gitcode.com/gh_mirrors/ts/tsuru Tsuru作为一款开源且可扩展的Platform as a Service (PaaS)平…...
3个核心优势:阴阳师自动化脚本的智能解决方案
3个核心优势:阴阳师自动化脚本的智能解决方案 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 阴阳师自动化脚本(Onmyoji Auto Script)是一款专…...
基于深度学习的遥感建筑物分割识别 yolov11遥感图像分割 无人机车辆识别 无人机道路分割识别
YOLOv11 在遥感图像分割中的应用:建筑物、汽车与道路的精准识别 遥感图像分割是地理信息系统(GIS)、智慧城市规划和灾害监测等领域的核心技术。随着深度学习的发展,YOLO(You Only Look Once)系列模型因其高…...
