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

文章目录

  • 前言
  • 跨平台开发
    • 技术需求
    • 技术选型
      • uniapp
      • Flutter
      • MAUI
      • Avalonia
      • 安卓原生
  • Flutter开发尝试
  • Avalonia开发测试
    • 测试项目
      • 新建项目
      • 代码
        • MainView
        • MainViewModel
      • 发布/存档
  • MAUI
    • 实战,简单略过
    • 打包和Avalonia差不多
  • 总结

前言

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/575540.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【浅尝C++】使用模板实现泛型编程第一弹=>函数模板/类模板/模板匹配原则/函数模板原理

&#x1f3e0;专栏介绍&#xff1a;浅尝C专栏是用于记录C语法基础、STL及内存剖析等。 &#x1f6a9;一些备注&#xff1a;之前的文章有点杂乱&#xff0c;这里将前面的知识点重新组织了&#xff0c;避免了过多冗余的废话。 &#x1f3af;每日努力一点点&#xff0c;技术变化看…

MoonBit MeetUp回顾——张正、宗喆:编程语言在云原生与区块链领域的技术探索

宗喆和张正分别给我们带了 KCL 相关的最新进展&#xff0c;由蚂蚁集团开发的 Rust 编写的开源 DSL&#xff0c;目标是优化云原生策略配置和用户体验。它通过引入动态配置管理、配置校验和基础设施抽象等核心概念&#xff0c;解决开发者认知负担、配置膨胀和标准化工具缺乏的问题…

京东云0基础搭建帕鲁服务器_4核16G和8核32G幻兽帕鲁专用服务器

使用京东云服务器搭建幻兽帕鲁Palworld游戏联机服务器教程&#xff0c;非常简单&#xff0c;京东云推出幻兽帕鲁镜像系统&#xff0c;镜像直接选择幻兽帕鲁镜像即可一键自动部署&#xff0c;不需要手动操作&#xff0c;真正的新手0基础部署幻兽帕鲁&#xff0c;阿腾云atengyun.…

go的通信Channel

go的通道channel是用于协程之间数据通信的一种方式 一、channel的结构 go源码&#xff1a;GitHub - golang/go: The Go programming language src/runtime/chan.go type hchan struct {qcount uint // total data in the queue 队列中当前元素计数&#xff0c;…

IDEA一键备份MySQL数据库(mysqldump版)

问题 又到了搬MySQL数据库的时刻&#xff0c;这次我不想使用命令行备份&#xff0c;这次我想使用IDEA一键备份MySQL数据库。 解决 假设安装好mysqldump命令后&#xff0c;让IDEA使用mysqldump一键备份指定的数据库。具体IDEA配置如下&#xff1a; 这是IDEA上面的数据库到处…

typescript 实现RabbitMQ死信队列和延迟队列 订单10分钟未付归还库存

Manjaro安装RabbitMQ 安装 sudo pacman -S rabbitmq rabbitmqadmin启动管理模块 sudo rabbitmq-plugins enable rabbitmq_managementsudo rabbitmq-server管理界面 http://127.0.0.1:15672/ 默认用户名和密码都是guest。 要使用 rabbitmqctl 命令添加用户并分配权限&#xf…

云数据仓库Snowflake论文完整版解读

本文是对于Snowflake论文的一个完整版解读&#xff0c;对于从事大数据数据仓库开发&#xff0c;数据湖开发的读者来说&#xff0c;这是一篇必须要详细了解和阅读的内容&#xff0c;通过全文你会发现整个数据湖设计的起初原因以及从各个维度&#xff08;架构设计、存算分离、弹性…

使用Apache Flink实现MySQL数据读取和写入的完整指南

1. 导言&#xff1a; Apache Flink是一款功能强大的流式处理引擎&#xff0c;可用于实时处理大规模数据。本文将介绍如何使用Flink与MySQL数据库进行交互&#xff0c;以清洗股票数据为例。 2. 环境准备&#xff1a; 首先&#xff0c;确保已安装Apache Flink并配置好MySQL数据…

如何为企业策划一场XR虚拟直播?

活动年年办&#xff0c;都是老一套&#xff0c;想玩点新花样&#xff1f; 预算有限&#xff0c;但还是想把活动办的逼格高一点&#xff1f; 想通过活动&#xff0c;让更多的人知道自己企业的品牌&#xff1f; 随着AIGC技术的不断演变&#xff0c;企业活动的形式和内容也在不…

kprobe/kretprobe的介绍,原理图,运行情况,用户层代码+内核层代码+预编译代码(详细解释+语法介绍),修改.bpf.c入口处的函数

目录 kprobe/kretprobe 介绍 原理图 运行情况 代码解释 .bpf.c 源码 语法 / 函数接口 char LICENSE[] SEC("license") "Dual BSD/GPL" SEC do_unlinkat filename结构体 ​编辑 BPF_KPROBE bpf_get_current_pid_tgid(…

Mybatis别名 动态sql语句 分页查询

给Mybatis的实体类起别名 给Mybatis的xml文件注册mapper映射文件 动态sql语句 1 if 2 choose 3 where 4 foreach 一&#xff09;if 查询指定名称商品信息 语法&#xff1a; SELECT * FROM goods where 11 <if test "gName!null"> and g.g_name like co…

学习vue3第十二节(组件的使用与类型)

1、组件的作用用途 目的&#xff1a; 提高代码的复用度&#xff0c;和便于维护&#xff0c;通过封装将复杂的功能代码拆分为更小的模块&#xff0c;方便管理&#xff0c; 当我们需要实现相同的功能时&#xff0c;我们只需要复用已经封装好的组件&#xff0c;而不需要重新编写相…