当前位置: 首页 > article >正文

App开发Flutter支持Harmony OS Next方案

1. 背景

由于当前部门使用Flutter框架进行开发,支持生成AndroidiOS两端的App应用。现在鸿蒙系统计划完全去掉AOSP核心代码,将无法支持Android应用。因此,鸿蒙手机接下来只能安装鸿蒙App应用。鉴于此,从长远来看,部门App后续也需要支持鸿蒙系统。那么,如何从成本和可维护性方面考虑后续的开发模式?可以兼顾到AndroidiOS和鸿蒙系统,同时老项目又能支持在鸿蒙手机上运行?重新开发鸿蒙版本?显然不切实际。

2. 解决方案

2.1 方案一:Flutter for OpenHarmony

https://gitee.com/openharmony-sig/flutter_flutter

鸿蒙官方计划对Flutter进行反向适配,即基于Flutter SDK的稳定版本进行拓展,使其能够在鸿蒙DevEco Studio上构建和生成鸿蒙App应用。

2.1.1 优势

  1. 官方支持。
  2. Flutter源码直接可用,只需简单适配,成本低。

2.1.2 劣势

  1. 因使用 Flutter版本为 3.7,与当前最新 3.24版本相差过大,加上 Flutter迭代特别频繁,很多开发方式、组件都在不断变化,后续要使用新的 Flutter特性,可能不会那么容易。
  2. Flutter正在考虑使用自研的图形渲染引擎 Impeller替换掉 Skia,这无疑又加大了更多的变数。最后,可能会变成多个分支进行维护。
  3. 部门已有项目,使用的 Flutter版本都是最新的,可能是没办法兼容的。除非新项目统一使用这个 3.7版本的 Flutter SDK来开发。

2.2 方案二:ArkUI-X 跨平台框架

https://gitee.com/arkui-x

ArkUI-X扩展ArkUI开发框架到多个OS平台,让开发者基于一套主代码,就可以构建支持多平台的精美、高性能应用。目前支持OpenHarmonyHarmonyOSAndroidiOS,后续会逐步增加更多平台支持,可以简单理解为鸿蒙版的Flutter

2.2.1 优势

  1. 官方支持。
  2. 鸿蒙版的 Flutter

2.2.2 劣势

  1. 有学习成本,虽然鸿蒙和 Flutter是有一些共性的,学习成本相比之下不会太高,但是毕竟是新的开发模式,各种各样的知识和问题都是需要积累和时间的。
  2. 有开发成本,已有的 Flutter项目需要重新开发。
  3. 生态各方面还处于初期,还未成熟和完善,也不适合立马接入商业项目应用。

2.3 方案三:Flutter Web【推荐】

http://192.168.24.10/appweb/index.html

通过Flutter Web可以部署在网页上,然后在手机浏览器上使用,并设置为全屏,则可以达到和App一样的使用效果。

2.3.1 优势

  1. 无开发成本。
  2. 使用时无需安装。
  3. 与系统无关,只要有浏览器就可使用。

2.3.2 劣势

  1. 需要说服使用鸿蒙手机的客户接受这种使用方式。
  2. 各手机浏览器需要支持全屏功能,不过可以代码实现,检测到当前是手机访问,则自动全屏即可。
  3. 考虑到毕竟是在网页上使用,体验可能不如 App,但是现在手机性能、网络访问各方面发展都很不错,这方面应该不会特别明显。
  4. 不联网的项目怎么办?可以基于鸿蒙开发一个基于 WebView的简单手机浏览器,并加载本地 Flutter Web部署的包,打开这个应用就可访问。
  5. 额外多一些适配的工作,但不会很多, Flutter项目开发,需同时考虑兼容 Web端。

2.4 方案四:Flutter 官方支持 HarmonyOS

Flutter官方暂没有支持HarmonyOS的计划,但是这个问答 《HarmonyOS Support》 毕竟是几年前了,以后的发展并不好说,如果鸿蒙系统大规模发展起来,发展到可以倒逼Flutter官方支持也不是没有可能。

3. 结论

到底选哪个方案,不是绝对的,只能是阶段性的,因为很多方案都还存在变数。考虑到部门的App项目情况,推荐选择【方案三】,但是方案一、方案二可以在后续进行这方面的调研和准备工作,伺机而动。

本文由 mdnice 多平台发布


http://www.kler.cn/a/372710.html

相关文章:

  • 企业新闻及产品宣传稿怎么写?有哪些商业财经类报纸杂志或媒体发布?
  • 第二十三章 Vue组件通信之非父子组件通信
  • 前端好用的网站分享——CSS(持续更新中)
  • SpringBoot最佳实践之 - 项目中统一记录正常和异常日志
  • net mvc中使用vue自定义组件遇到的坑
  • 13.音乐管理系统(基于SpringBoot + Vue)
  • python通过keyboard库实现模拟/监听键盘
  • Spring Security使用
  • 使用three.js 实现 自定义绘制平面的效果
  • Golang 并发编程入门:Goroutine 简介与基础用法
  • 适配器模式:连接不兼容接口的桥梁
  • NVR小程序接入平台/设备EasyNVR多个NVR同时管理多平台级联与上下级对接的高效应用
  • Nginx 的讲解和案例示范
  • SpringBoot+VUE2完成WebSocket聊天(数据入库)
  • ‌MySQL中‌between and的基本用法‌
  • macOS 15 Sequoia dmg格式转用于虚拟机的iso格式教程
  • 【Mac】安装 F5-TTS
  • 阿里云ECS访问GitHub解决方案
  • 公共命名空间,2024年10月的笔记
  • 6款IntelliJ IDEA插件,让Spring和Java开发如虎添翼
  • 微信小程序生成二维码
  • Vue中如何解析docx文件(word文档)
  • 零跑汽车嵌入式面试题汇总及参考答案
  • 如何理解Js中闭包
  • LeetCode 242 - 有效的字母异位词
  • (done) 什么 RPC 协议? remote procedure call 远程调用协议