移动端开发思考:Uniapp的上位替代选择

本文分析了C#.NET开发者在移动端跨平台开发中的技术需求,对比了Flutter的成熟度、Uniapp的易用性、MAUI的Bug问题以及Avalonia在桌面与移动端的支持情况,作者最终倾向于Avalonia用于桌面开发,暂不深入移动端学习。
摘要由CSDN通过智能技术生成

前言

作为C# .NET程序员,我有一些移动端的开发需求。虽然一般是Windows 和安卓平台。因为IOS和MAC的上架非常的麻烦,我对苹果也不是很感冒。

跨平台开发

跨平台解决方向技术举例
套壳浏览器Uniapp
原生组件对应React Native
自绘Flutter,Unity等游戏引擎

技术需求

  • 必须支持安卓,Windows其次(因为Windows我可以用WPF写)。IOS,MAC,Linux暂不考虑
  • 可以调用本地接口。比如安卓的通知,蓝牙,定位

技术选型

uniapp

我目前用的就是Uniapp,Uniapp的优点就是简单,能凑合用。但是Uniapp的Debug真的是一言难尽。

Uniapp最突出的优点就是wgt更新,因为Uniapp本身就是浏览器套壳,所以wgt更新就是把里面的浏览器文件换了一下

Flutter

非常成熟,开源10年了。基本算是React Native的上位替代。毕竟Flutter和Andorid都是谷歌开发的。

MAUI

Bug太多了,等两年看看
在这里插入图片描述
在这里插入图片描述

Avalonia

移动端支持不够。桌面端支持还行

安卓原生

用原生肯定是最好的,但是如果以后要迁移到IOS上面,就比较麻烦了。跨平台本身就是为了解决这个的。

Flutter开发尝试

跨平台开发该不该用Flutter?2023年版Flutter全面解析

Flutter环境安装(超详细)

Flutter运行第一个项目时出现javax.net.ssl.SSLHandshakeException的一些解决思路

flutter:国内镜像https://storage.flutter-io.cn/ 用不了了

由于Flutter使用自绘,所以会有一点延迟,大概是100ms不到。在滑动等操作的时候体验比较明显。

然后我就遇到Bug了,折腾了半天没解决成功
在这里插入图片描述

Avalonia开发测试

测试项目

新建项目

在这里插入图片描述
配置清单
在这里插入图片描述

代码

MainView
<UserControl xmlns="https://github.com/avaloniaui"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:vm="clr-namespace:AvaloniaApplication3.ViewModels"
             mc:Ignorable="d"
             d:DesignWidth="800"
             d:DesignHeight="450"
             x:Class="AvaloniaApplication3.Views.MainView"
             x:DataType="vm:MainViewModel">
  <Design.DataContext>
    <!-- This only sets the DataContext for the previewer in an IDE,
         to set the actual DataContext for runtime, set the DataContext property in code (look at App.axaml.cs) -->
    <vm:MainViewModel />
  </Design.DataContext>
  <StackPanel Orientation="Vertical"
              VerticalAlignment="Center"
              HorizontalAlignment="Center">
    <TextBlock Text="{Binding Greeting}"
               FontSize="50"
               HorizontalAlignment="Center"
               VerticalAlignment="Center"/>
    <Button Content="ClickMe"
            Command="{Binding TestBtnCommand}"
            FontSize="50" />
    <TextBlock Text="{Binding TestNum}"
               FontSize="50"/>
  </StackPanel>
</UserControl>

MainViewModel
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;

namespace AvaloniaApplication3.ViewModels;

public partial class MainViewModel : ViewModelBase
{

    private int num = 0;
    public string Greeting => "Welcome to Avalonia!";

    [ObservableProperty]
    private string testNum = "TestNum";

    [RelayCommand]
    public void TestBtn()
    {
        TestNum = $"TestNum {num}";
        num++;
    }
}

在这里插入图片描述

发布/存档

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
打包之后的文件有140MB。应该能用一些方法来压缩。

MAUI

在这里插入图片描述
在这里插入图片描述

实战,简单略过

MAUI 的潜在BUG实在是太多了,先暂时不去深入了解
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

打包和Avalonia差不多

在这里插入图片描述

总结

我打算还是选择Avalonia好了,至少Avalonia的桌面端还是不错的,非常的成熟了。就是移动端的本机API支持力度还不够。目前就是了解一下,也不会专门去学。现在的需求用Uniapp就够用了。

  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值