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

前言

作为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就够用了。

相关推荐

  1. 动态选择pc移动css文件

    2024-03-29 14:52:02       35 阅读
  2. uniapp】Vue3移动滚动加载 分页组件封装

    2024-03-29 14:52:02       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-29 14:52:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-29 14:52:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-29 14:52:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-29 14:52:02       20 阅读

热门阅读

  1. 深入理解Kubernetes中的Deployment

    2024-03-29 14:52:02       17 阅读
  2. FPGA选型

    2024-03-29 14:52:02       21 阅读
  3. websocket

    websocket

    2024-03-29 14:52:02      14 阅读
  4. LeetCode-热题100:238. 除自身以外数组的乘积

    2024-03-29 14:52:02       13 阅读
  5. .NET core 5.0 及以上的Windows Service开发

    2024-03-29 14:52:02       20 阅读
  6. SpringBoot -- 自动配置机制

    2024-03-29 14:52:02       19 阅读
  7. 牛客的一道题(C)变种水仙花

    2024-03-29 14:52:02       15 阅读
  8. Qt使用事件过滤器

    2024-03-29 14:52:02       15 阅读
  9. Pytorch nn.Linear()

    2024-03-29 14:52:02       18 阅读
  10. mybatis plus 数据权限插件在项目中的使用

    2024-03-29 14:52:02       17 阅读