Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果

这篇具有很好参考价值的文章主要介绍了Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

相信大家都已经听说过,明年的 Harmony Next 版本将正式剥离 AOSP 支持 ,基于这个话题我已经做过一期问题汇总 ,当时在现有 App 如何兼容 Harmony Next 问题上提到过:

华为内部也主导适配目前的主流跨平台方案,主动提供反向适配支持,估计后面就会有类似 Flutter for harmony 的社区支持。

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

没想到 HDC 大会才刚过去一个多月,就有网友提醒,针对 OpenHarmony 的 Flutter 版本已经开源:https://gitee.com/openharmony-sig/flutter_flutter ,这既让人惊喜又是「情理之中」,因为在众多框架里,Harmony 和 Flutter 之间的联系可以说是最密不可分

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

关系

为什么说 Harmony 和 Flutter 之间的联系很密切?因为不管是 ArkUI 还是 ArkUI-X ,它们的底层支持里都或多或少存在 Flutter 的身影

例如 ArkUI 的 framework arkui_ace_engine ,里面就可以看到很多熟悉的 Flutter 代码,不过这里面有点特殊在于,这些代码都是用 C++ 实现的,例如下图中的 Stack 的控件。

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

另外,除了 ArkUI 华为还开源了 ArkUI-X ,ArkUI-X 扩展了 ArkUI 框架让其支持跨平台开发,而这部分跨平台的底层逻辑,同样来自 Flutter 和 Skia 的支持

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

与 Flutter 不同的是,OpenHarmony 上层开发用的是 ArkTS 和 ArkUI,调用走的是 NAPI(Native API),NAPI 是一套基于 Node.js 规范开发的原生模块扩展开发框架。

NAPI 可以实现 JS 与 C/C++ 代码之间相互访问,也就是 ArkTS 可以直接和 C/C++ 无缝调用,类似 dart ffi 效果。

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

举个例子,例如通过 ArkUI-X 里的 getDefaultDisplaySync 获取设备屏幕信息, 对于 Android 系统而言, ets 下的代码通过 napi 会调用到 C++ 层的 DisplayInfo 对象,从而再通过 jni 调用 java 下的 DisplayInfo 对象。

 var dsp = display.getDefaultDisplaySync();
Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为 Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为 Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为 Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为 Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

其实这一点对于 Flutter 来说很重要,因为对于 Flutter 兼容 Harmony OS 的支持上, napi 是必不可少的一部分。

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

因为在 Flutter 里,Dart 除了可以直接和 C/C++ 调用之外,还支持和 Objective-C/Swift 与 Java/Kotlin 直接调用而不需要通过 Channel 。

  • 其中 Objective-C / Swift interop 是通过 package:ffigen :
ffigen:
  name: AVFAudio
  description: Bindings for AVFAudio.
  language: objc
  output: 'avf_audio_bindings.dart'
  headers:
    entry-points:
      - '/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioPlayer.h'
  • Java / kotlin 是通过 jnigen 支持调用,不过目前还属于 experimental 的状态:
output:
  c:
    library_name: example
    path: src/example/
  dart:
    path: lib/example.dart
    structure: single_file

source_path:
  - 'java/'
classes:
  - 'dev.dart.Example'

所以,后续在 Harmony OS 上,就会有多一个类似 napi gen 支持的需要

兼容

本次开源支持 OpenHarmony 的 flutter 社区版本来自 openharmony-sig ,该组织主要用于孵化 OpenHarmony 相关开源生态项目。

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

另外,在 openharmony 组织下 sig_crossplatformui 也有 Taro 主导的一些跨平台支持计划。

OpenHarmony 的 flutter (简称 OP Flutter )版本目前所用的分支应该是 3.7 版本,因为是刚开源,目前 flutter tools 指令仅支持 linux 下使用 ,但是相信后续跟上节奏应该不成问题。

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

以下分析基于 2023-09-18 的部分内容,后续肯定会有新的变化,这里主要提供一些思路和方向

SIG 社区适配的主要有 OP flutter 和 OP flutter engine 两个项目,根据目前的提交,OP flutter 目前主要是添加了 flutter tools 对于构建 hap 的支持,例如:

  • 添加环境检测

    Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

  • 实现 tools 下的自定义的 build_hap.dart ,还有识别鸿蒙设备的支持等。

    Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

    Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

  • 提供 create 时对应的 ets 模版

    Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

而关于运行支持,主要是通过 OP flutter engine 来实现,主要代码新增在对应的 ohos/ 目录下:

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

从 OP flutter engine 变更的内容上看,主要是从原有 shell/platform/android 下的代码拷贝一份进行调整,例如 GL Context 代码部分目前几乎太大区别。

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

另外,大家比较关心的应该就是 Impeller 在 OP 上是否支持,目前看来 OP Flutter Engine 里对于 Impeller 有一定预设,但是并没有启用,因为 Flutter 官方目前对于 Android 上的 Impeller 也没有正式发布,所以这个目前看来也不需要着急。

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

关于字体部分, 目前看来 OP 上 Flutter 默认会使用 sans-serif ,这个应该是和 鸿蒙上的 HarmonyOS Sans 保持一致。

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

关于刷新率部分,目前暂时可以看到是默认写死了 60hz ,后续应该可以通过 napi 等支持获取实际刷新率,支持动态刷新率这个大家不用担心。

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

另外,因为版本问题,目前 OP Flutter Engine 里还保留了 partial repaint 操作,但是其实 Flutter 官方已经在 Android 上 Disable 了 partial repaint ,因为 Android 上的部分重绘存在太多问题,所以该功能被直接屏蔽。

Flutter 官方之后打算与 Vulkan Impeller 单独适配后再重新开放 partial repaint,这对 OP Flutter Engine 来说也许也是一个历史包袱,猜测 OP Flutter 后续会跟随 Impeller 同步

当然,因为不同平台,所以 OP Flutter Engine 也有自己需要单独实现的逻辑,例如数据的类型转化处理,在 Android 上对应的是 shell/platform/android/platform_view_android_jni_impl.cc , 而在 OP 上对应的就是 shell/platform/ohos/napi/platform_view_ohos_napi.cpp :

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

最后,Flutter 适配不只是 embedding 和 tools 的适配,还有新的 channel 和 plugin 的支持,目前看来 SIG 也在致力与这点,一些常用或者知名的 plugin 社区都会逐步增加支持,这看起来是一个苦力活,但是对于 Harmony 脱离 AOSP 构建自己的生态来说,无疑会是历史性的一步。

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为

最后

通过本篇,相信你应该能简单理解到 Flutter 和 Harmony 之间的「因果关系」,对于 Flutter 开发来说,Harmony Next 会是一个相对较好的新平台

当然,这不代表这你可以不学 ArkTS 和 ArkUI ,因为不管是打包构建或者 napi 都离不开 Harmony 平台本身的支持,而且在于这样一个「百废待兴」的社区环境下,完全靠社区支撑明显不现实,关键时刻还得是「自己动手」才能「丰衣足食」。

Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果,Android开发,flutter,harmonyos,华为文章来源地址https://www.toymoban.com/news/detail-720222.html

到了这里,关于Harmony 开始支持 Flutter ,聊聊 Harmony 和 Flutter 之间的因果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android Studio快速实现Flutter应用的国际化和多语言支持

    在Flutter中实现国际化和多语言支持通常涉及以下步骤: 首先,你需要添加flutter_localizations依赖库到你的pubspec.yaml文件中。这个库包含了Flutter国际化所需的核心功能。 Android Studio菜单File-Settings-Plugins(直接搜索效率菜单效率更高) 安装Flutter Intl插件后重启Android Studio 插件安装

    2024年02月08日
    浏览(30)
  • 【Flutter】支持多平台 多端保存图片到本地相册 (兼容 Web端 移动端 android 保存到本地)

    免责声明: 我只测试了Web端 和 Android端 可行哈

    2024年02月09日
    浏览(47)
  • Flutter 开发者工具 Android Studio 开发Flutter应用

    Flutter 开发者工具 在 Android Studio 开发Flutter应用 🔥 Android Studio 版本更新 🔥 Android Studio Check for Update Connection failed ​ 解决方案 ​    ​  🔥 编辑代码,和查看问题 🔥  Dart 插件 可以做到如下几点 :  语法高亮显示。 基于多种类型分析的代码补全。 定位到类型的声明(

    2024年02月15日
    浏览(89)
  • Flutter混合开发:Android中如何启动Flutter

    如果你想在你的Android应用中使用Flutter,则需要遵循以下步骤: 1. 配置Flutter环境 在Android Studio中安装Flutter和Dart插件,并确保Flutter SDK已安装并配置好环境变量。这些步骤可以通过Flutter官方文档提供的说明来完成。 2. 创建Flutter Module 使用Flutter命令行工具创建一个Flutter Modul

    2024年02月10日
    浏览(35)
  • Android Flutter开发环境搭建

    本栏亦在快速上手Android Flutter,Flutter框架就不介绍了,框架这个东西怎么说呢,对于大部分人来说只是了解即可,如需了解的话,可以度娘资料很多。 本节我们主要看下如何在Windwos下搭建Android Flutter开发环境,然后了解下IDE上面的Flutter开发。 要安装并运行Flutter,您的开发

    2024年02月09日
    浏览(38)
  • Android Studio Flutter 开发配置

    近来比较闲,就研究下Flutter 开发,在此记录下studio 配置过程,时间是2023.7.19 1.首先下载 Flutter SDKhttps://storage.flutter-io.cn/flutter_infra_release/releases/stable/windows/flutter_windows_3.10.6-stable.zip 2.将压缩包解压,然后把其中的  flutter  目录整个放在你想放置 Flutter SDK 的路径中(例如 

    2024年02月16日
    浏览(32)
  • flutter开发实战-MethodChannel实现flutter与原生Android双向通信

    flutter开发实战-MethodChannel实现flutter与原生Android双向通信 最近开发中需要原生Android与flutter实现通信,这里使用的MethodChannel MethodChannel:用于传递方法调用(method invocation)。 通道的客户端和宿主端通过传递给通道构造函数的通道名称进行连接 一个应用中所使用的所有通道名称

    2024年02月13日
    浏览(28)
  • Android开发从0开始(图形与按钮)

    drawable是抽象类。包括图片,色块,画板,背景。 drawable-ldpi 存放低分辨率图片。drawable-hdpi 高分辨率。drawable-xxhdpi 超高分辨率。 Android:src= ” @drawable/image ”  即可使用 形状图形。圆角,矩形等常见几何图形,可以自定义画内置图形。 属性有:  size尺寸  stroke描边 corner填充

    2024年02月13日
    浏览(29)
  • Android开发入门——从零开始构建第一个Android App

    作者:禅与计算机程序设计艺术 首先,让我们回顾一下Android系统的特性。Android是一个开源、免费的移动操作系统,最初起源于Google,后被开源。它提供统一的API,使得手机厂商可以针对不同版本的Android系统定制不同的应用。同时,Android也支持对设备硬件进行二次开发,可

    2024年02月07日
    浏览(43)
  • 【Android开发】不同Activity之间的数据回传实例(一)摘桃子游戏

    该项目实现的功能主要有: 在首页显示一个按钮点击该按钮跳转到桃园页面 在桃园页面,点击桃子会弹窗显示摘到几个桃子,同时被点击桃子消失,总桃子数+1 点击退出桃园会返回首页,首页桃子数会根据点击的桃子数动态增加 将项目所需要的图片bg.png、monkey.png、btn_peac

    2024年01月23日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包