跨平台是最近几年非常火的主题,因为现在的各种平台简直太多了。Windows、macOS、Linux、Android、iOS、Web、小程序、IoT等等。以后还可能会不断增加。没人希望挨个为每个平台开发应用,所以就希望开发一次,就同时适应各种平台。目前支持跨平台开发的技术非常多。这里先对这些主要的跨平台技术做一个总结,然后再详细谈谈.NET 6 Preview1。
目前Python被认为是最牛叉的全栈开发语言,可以用一种语言开发桌面、移动和Web应用,不过随着.NET 6的发布,以及其他跨平台技术的发展,Python也将迎来更大的挑战。下面就看看本文说了些什么。
1. 跨平台领域的六大高手齐聚,来一场华山论剑如何
目前主流的跨平台技术如果从语言上分,可分为如下6种编程语言,另外,这里的跨平台,主要是指三大平台:桌面、移动和Web。
(1)Java
(2)Dart
(3)Python
(4)JavaScript
(5)C
(6)C#
这6个编程语言背后所涉及到的技术相当复杂,这里就不详细介绍了,只列出开发相关平台的技术。
(1)Java(包括运行在JVM上的其他编程语言)
桌面:Swing、SWT、JavaFX
移动:Android(Java、Kotlin)、iOS(RoboVM、XMLVM等)
Web:Java EE
Apple官方并不支持Java开发iOS App,但通过一些框架,可以进行曲线救国。例如,RoboVM可以将Java Bytecode转换为iOS的LLVM字节码,也提供一个Java到Objective-C的桥,可像其他Java对象一样来使用 Objective-C对象。且支持大多数UI Kit。
XMLVM可以将Java代码编译为Objective-C,在iOS平台上运行。
至于Web应用,前端肯定是JavaScript,这里跨平台主要指的后端,也就是Web框架和相关技术(JSP、Servlet等)。
(2)Dart(Google的亲儿子)
桌面、移动、Web:Flutter
Google为了掌控开发入口,设计了Dart语言。由于Dart语言与JS的编程方式类似,例如,不支持多线程,使用Future、wait等处理异步和等待。所以从Dart转换到JS是非常容易的,这也是为什么基于Dart的Flutter可以三大类型应用通吃的原因,Google的野心啊!
(3)Python
桌面:PyQt5(第三方)、PySide6(QT的亲儿子)
移动:kivy(Android)、pybee(iOS)
Web:Flask、Django
(4)JavaScript
桌面:Electron、NW.js
移动:各种基于H5的框架、RN、uni-app等
Web:Node.js
(5)C
桌面:QT、wxWidgets等
移动:QT也能开发Android和iOS App哦,另外,Android可以通过NDK嵌入C 、iOS也可以与C 混合编程
Web:尽管C 不是做Web的最佳选择,但Go语言都可以做Web应用,凭啥我大C 不能呢!有很多基于C 的Web框架,大家可以自己查。
(6)C#
桌面、移动、Web:.NET 6、7、8、9、....、N、N 1
从这6种语言对应的跨平台技术来看,只有基于Dart的Flutter和基于C#的.NET是一种技术通吃的。看来广大程序员朋友又要学新东西了!
2 .NET 6继续在统一的道路上越走越远
我们知道,.NET 5是第一次真正的跨平台大统一,取消了原来的.NET Core的命名规则,以后将会用.NET 5、.NET 6、.NET 7等形式命名,类似于Java8、Java9等方式。所以以后如果提到.NETX,不要再认为只能运行在Windows下了,macOS和Linux都可以运行。这也标志着.NET正式进入跨平台时代。
.NET 6 在 .NET 5 的统一的基础之上,继续借助 Xamarin 扩展到 Android、iOS 和 macOS。此外,.NET 6 还扩展了 Blazor 的适用范围,开发者可以通过 Blazor Hybrid 开发混合的跨平台客户端应用。
可能很多同学没听过Blazor,这是一个使用.NET生成交互式客户端Web UI的框架,说白了,就是可以用C#代替JavaScript设计页面。
3. .NET 6支持的平台
.NET 6 LTS 将在 2021 年 11 月正式发布,除了目前支持的平台之外,还将支持以下平台:
(1)Android
(2)iOS
(3)Mac 和 Mac Catalyst(x64 和 M1)
(4)Windows Desktop 的 ARM64
4. 跨平台GUI框架MAUI
.NET MAUI (Multi-platform App UI) 是一组现代 UI 框架,在 Xamarin.Forms 的基础上扩展并集成到 .NET 6 中,利用 MAUI 将能够面向 Android、iOS、macOS 和 Windows 等构建应用。
在统一的过程中,将会把 Xamarin.Essentials 库集成到 MAUI 当中,除此之外你将还能容易地利用设备机能,例如传感器、照片库、联系人和存储等等。
.NET 6 Preview 1 中首先包含了 Android 和 iOS 两个平台的 MAUI,可以在此处查看示例项目和安装说明:https://github.com/dotnet/net6-mobile-samples。
未来还将添加 macOS 和 Windows 桌面支持,以及除了 XAML 热重载之外,还将支持 C# 代码的热重载。
对于今天已经在使用 Xamarin 构建应用的开发者,将会提供转换工具和迁移指导帮助迁移到 .NET 6。
5. 混合UI技术
Blazor Desktop 将允许开发者利用 Blazor 技术开发混合客户端程序,将原生 UI 和 Web 技术混合起来构建原生的客户端应用,这有点像Electron和NW.js。
例如你可以直接将 Blazor 作为组件集成到现有的 WPF 应用当中,下面是几个例子:
在 macOS 运行的 Blazor 桌面客户端应用:
在 WPF 中集成 Blazor 的混合应用:
其他技术还包括快速迭代技术,允许在应用运行时修改代码,持续改进的ARM64支持,以及ARM64性能改进。WPF 支持 Windows ARM64 ,macOS ARM64支持、新的指令,以及对Apple新芯片(Apple Silicon)的原生支持。
Python、.NET6或其他跨平台技术,哪一种或哪几种是你的菜呢?