今天是2021年10月13日,目前最适合移动端跨端开发的答案的确是Google开发的Flutter
Flutter
它有如下优点:
- 渐进式开发,作为部分页面嵌入到已有程序中(我认为最大的优点)
- 和原生代码进行相互调用,解决移动操作系统新版本发布导致API变化,但是flutter自身API没更新的问题
- flutter自己保证了数据逻辑的双端一致性。
- 开源
- 社区活跃
- 国际化
- 图片尺寸适配
听说的缺点:
- 代码嵌套有点难受
- 因为没有实际进行过开发,只是比较占内存,有时候有点可接受的卡。
Flutter的UI采用的是直接把控件的样式当做图片绘制到屏幕上的方案,类似于DirectUI(Windows QQ),WPF,UWP,QT等无控件绘制方案,后面提到的几个都,
MAUI
另外一个Microsoft正在开发的MAUI,也称为一次开发多个平台,今天特地把他的源码下载下来研究,它的界面控件是原生控件。MAUI的思路是,利用xaml来描述抽象的界面,解析xaml的时候,创建不同平台的实例, 然后利用C#来写事件。
在移动端,MAUI借助的是比较成熟的.net库(xamarin.ios或者xmarian.android)来创建不同平台实例。
如果发布正式版,它的UI性能是最好的,因为是原生的控件,调试阶段不会有性能问题因为C#性能本身很好,在发布的时候C#代码会被编译成本机代码,无需.net运行环境。
它的一些特性如下
是否支持渐进式开发,在已有的开发项目中开发部分页面
还不支持是否支持和原生代码的相互调用
理论上支持,但是现在没有看到实际的例子,说理论上支持的原因是C#和C语言的互操作已经是非常成熟了,加上xamarin.ios中发现存在对C语言操作的实例,比如objc_msgsend,或者其他C形式的iOS API-
是否支持操作系统新特性更新
比较容易支持,拿iOS(不懂Android)为例子,原因包含1. responseToSelector,performSelector, iOS版本判断,这三个函数在MAUI中可以使用 2. xamarin.ios的源码比较容易修改 3. 如果不想修改xamarin.ios源码,**也许**可以采用C#语法的扩展类方法来实现,因为大部分的API到最后都根据函数名转发给了obj_msgsend
如果MAUI也支持渐进式开发,我想我会选择它吧,不过Flutter发展的太快,不知道等不等得到MAUI的发布。
image.png