1、flutter 方案
flutter 是什么?
Flutter是Google开源的构建用户界面(UI)工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动、Web、桌面和嵌入式平台。Flutter 开源、免费,拥有宽松的开源协议,适合商业项目。
Flutter 支持三种模式编译 app,
无需重写代码,使用同一套代码库即可将你的移动应用打包生成 Windows、macOS 和 Linux 桌面端软件。
为了安装和运行 Flutter,你的开发环境必须至少满足以下要求:
-
操作系统:Windows 10 或更高的版本(基于 x86-64 的 64 位操作系统)。
-
磁盘空间:除安装 IDE 和一些工具之外还应有至少 2.5 GB 的空间。
-
工具:要让 Flutter 在你的开发环境中正常使用,依赖于以下的工具:
-
Windows PowerShell 5.0 或者更高的版本(Windows 10 中已预装)
-
Git for Windows 2.x,并且勾选从 Windows 命令提示符使用 Git 选项。
如果 Windows 版的 Git 已经安装过了,那么请确保能从命令提示符或者 PowerShell 中直接执行 git 命令。
-
特点
1、跨平台自绘引擎
Flutter 与用于构建移动应用程序的其它大多数框架不同,因为 Flutter 既不使用 WebView,也不使用操作系统的原生控件。Flutter 使用自己的渲染引擎来绘制 UI ,布局数据等由 Dart 语言直接控制,所以在布局过程中不需要像 RN 那样要在 JavaScript 和 Native 之间通信,这在一些滑动和拖动的场景下具有明显优势,因为在滑动和拖动过程往往都会引起布局发生变化,所以 JavaScript 需要和 Native 之间不停的同步布局信息,这和在浏览器中JavaScript 频繁操作 DOM 所带来的问题是类似的,都会导致比较可观的性能开销。
2、高性能
Flutter APP 采用 Dart 语言开发。Dart 在 JIT(即时编译)模式下,执行速度与 JavaScript 基本持平。但是 Dart 支持 AOT,当以 AOT模式运行时,JavaScript 便远远追不上了。执行速度的提升对高帧率下的视图数据计算很有帮助。
采用Dart语言开发
框架层
Framework,即框架层。这是一个纯 Dart实现的 SDK,它实现了一套基础库。自底向上,我们来简单介绍一下:
- 底下两层(Foundation 和 Animation、Painting、Gestures)在 Google 的一些视频中被合并为一个dart UI层,对应的是Flutter中的
dart:ui
包,它是 Engine 暴露的底层UI库,提供动画、手势及绘制能力。 - Rendering 层,即渲染层,这一层是一个抽象的布局层,它依赖于 Dart UI 层,渲染层会构建一棵由可渲染对象组成的渲染树,当动态更新这些对象时,渲染树会找出变化的部分,然后更新渲染。渲染层可以说是Flutter 框架层中最核心的部分,它除了确定每个渲染对象的位置、大小之外还要进行坐标变换、绘制(调用底层 dart:ui )。
- Widgets 层是 Flutter 提供的一套基础组件库,在Widgets 层之上,Flutter 还提供了 Material 和 Cupertino 两种视觉风格的组件库,它们分别实现了 Material 和 iOS 设计规范。
Flutter 框架相对较小,因为一些开发者可能会使用到的更高层级的功能已经被拆分到不同的软件包中,使用 Dart 和 Flutter 的核心库实现,其中包括平台插件,例如 camera (opens new window)和 webview (opens new window),以及和平台无关的功能,例如 animations (opens new window)。
引擎层
Engine,即引擎层。毫无疑问是 Flutter 的核心, 该层主要是 C++ 实现,其中包括了 Skia 引擎、Dart 运行时、文字排版引擎等。在代码调用 dart:ui库时,调用最终会走到引擎层,然后实现真正的绘制和显示。
嵌入层
Embedder,即嵌入层。Flutter 最终渲染、交互是要依赖其所在平台的操作系统 API,嵌入层主要是将 Flutter 引擎 ”安装“ 到特定平台上。嵌入层采用了当前平台的语言编写,例如 Android 使用的是 Java 和 C++, iOS 和 macOS 使用的是 Objective-C 和 Objective-C++,Windows 和 Linux 使用的是 C++。 Flutter 代码可以通过嵌入层,以模块方式集成到现有的应用中,也可以作为应用的主体。Flutter 本身包含了各个常见平台的嵌入层,假如以后 Flutter 要支持新的平台,则需要针对该新的平台编写一个嵌入层。
windows 开发也是一个不错的选择
demo
https://flutter.github.io/samples/#
2、java Compose Multiplatform
什么是KMM (Kotlin Multiplatform Mobile)
KMM用于简化跨平台开发,可以在Android和IOS之间共享通用的代码。 仅在使用各自平台能力的时候,才会去编写各自平台特定的代码。
Compose Multiplatform, by JetBrains
缩写名称:compose-jb
Compose Multiplatform, by JetBrains
JetBrains开源的compose-jb官方的介绍内容:
桌面和Web UI框架,基于Google的JetpackCompose工具包 Compose Multiplatform 简化并加速了桌面和Web应用程序的UI开发,并且允许Android和桌面之间大部分的UI代码共享。
KMM属于Android和IOS各自写各自平台的UI,通用的业务逻辑数据处理需要从shared模块去获取。 优点:重复的业务逻辑数据处理部分,统一处理,在业务需求发生变更,也只需要更新shared模块即可,Android/IOS各自平台只需要关心各自的UI和平台的细节处,分工合作。 缺点:不能统一平台UI,各自平台仍然要每个平台各自写一份,但是总提上来说还是减少了一定的工作量。
Compose Multiplatform
Compose Multiplatform简单来说就是是JetBrains公司将以下三个库合为一体的统称,又叫Compose-jb:
compose-android:Jetpack Compose
compose-desktop:Compose for Desktop
compose-web: Compose for Web
但是它还是基于KMM之上的,不是单纯的UI框架。
与Flutter比,是否具有可比性?
首先Flutter的目标是移动端跨平台的UI框架,但是JetBrains推出Compose最主要的目的首先是为了在桌面端替换 Swing 和 AWT 等基于 Java 的陈旧的技术栈,只不过Google也趁机想要改变Android原生的UI开发方式,赶上React等现代声明式UI框架的步伐,毕竟类似View.java这样三万多行的屎山实在是改不动了。。。再继续下去要出人命的。。Google的程序猿们估计也开始头大了,但是Jetpack Compose的话,可以独立于Android OS代码发布,因为就是一个gradle中配置的远程依赖,这样就不需要等Android OS更新才能用上新的系统UI组件了,这是第二个目的。
compose-jb 在桌面端需要支持 Windows,macOS,Linux 等多套操作系统,基于 Kotlin/Native 的实现成本较高,因此现阶段 compose-desktop 仍然依赖 Kotlin/JVM 编译成 Java 字节码后再发布到各桌面系统。
compose-desktop 提供了专用的 Gradle 插件可以基于 jpackage 将 JVM 一同打包进各种格式的安装包,例如 Mac 的 dmg, Windows 的 msi,exe 以及 Linnux 的 deb 等,使用者无需额外安装 JDK ,可以像二进制程序一样开箱即用,此外还通过使用 jlink 技术只对 Java 模块的最小依赖进行打包以最大限度降低包体积。
网友评论