2024年跨平台应用解决方法

个人博客:Sekyoro的博客小屋
个人网站:Proanimer的个人网站
很久没有写这类high-level的文章了,本身这类框架就一直层出不穷,但是其中历久弥坚,坚韧不拔的框架又有多少呢?
首先考虑到学习成本以及掌握一些编程语言在工作、学习生态上的价值,给这些东西适用生态划分一下.

React Native

React Native 允许了解 React 的开发人员创建原生应用程序。同时,原生开发人员可以使用 React Native 编写一次通用功能,从而获得原生平台之间的平等性。

Get Started with React Native · React Native

使用前端技术开发移动端和web程序. 通常与Expo搭配,后者是一个生产级的 React Native 框架。Expo 提供开发人员工具,使应用程序的开发更加轻松,例如基于文件的路由、原生模块标准库等.

npx create-expo-app StickerSmash --template blank && cd StickerSmash
import { StyleSheet, Text, View } from 'react-native';

export default function App() {
  return (
    <View style={styles.container}>
      <Text>Hello world!</Text>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  },
});

使用一些库的话直接就是npm,跟前端开发类似.

缺点的话就是使用前端和android studio混合搭配优点乱吧,而且可能还有一些坑.

如果你不喜欢React,可以试试IonicIonic Framework - The Cross-Platform App Development Leader其实在这里我并不想推荐其他技术了.

更多前端技术,参看2023 JavaScript Rising Stars

优点:

  • 强大的生态和社区(毕竟背靠折腾的厉害的前端),文档非常友善
  • 专注用户界面,呈现原生平台的用户界面组件
  • fast refresh,使得开发时能立即看见改动
  • 有了debugger工具,提供log viewer, interactive layout inspector, 和network inspector.

Flutter

Install | Flutter

虽然前段时间听说flutter遭重,被google layoff了一些人.

广泛文档也不错,目前支持mobile, web甚至desktop(beta).

ListView(
  children: const <Widget>[
    ListTile(
      leading: Icon(Icons.map),
      title: Text('Map'),
    ),
    ListTile(
      leading: Icon(Icons.photo_album),
      title: Text('Album'),
    ),
    ListTile(
      leading: Icon(Icons.phone),
      title: Text('Phone'),
    ),
  ],
),

使用Dart语言的命令式UI,目前很多框架都使用这种方式了.其实也类似jsx,无非是利用编程语言层层嵌套替代原本的xml配置的方式.

Jetpack compose和Qt的qml也都类似这种了,分别替代了原本xml和widget.

利用Dart的pub.dev装一些库The official repository for Dart and Flutter packages. (pub.dev),众所周知,提到php,ruby就是web,那么提到dart就是flutter了,因此dart的很多库也是方便flutter开发的.

缺点就是Dart也有上手门槛,不过如果你熟悉类似Kotlin,

Swift这种语言,其实它向这些语言学习了很多.

优点:

  • Flutter 的热重载功能可让您在修改代码后立即查看应用程序的变化,而无需重新编译。
  • Flutter 支持谷歌的 Material Design,这是一种帮助开发人员构建数字体验的设计系统.在构建应用程序时,您可以使用多种视觉和行为小部件。
  • Flutter 不依赖浏览器技术.相反,它拥有自己的渲染引擎来绘制部件

Kotlin Multiplatform

如果你已经熟悉Jetpack Compose,那这个就是多平台下的开发框架,便于写ios,web等等. 我个人感觉它和Flutter就是这方面的leader了,如果你对desktop没有要求,那也可以使用React Native.

Compose Multiplatform UI 框架 | JetBrains | JetBrains: Developer Tools for Professionals and Teams

但说实话,目前还需要再等一等.毕竟它的时间还不像前两者那么久.

首先需要Kotlin Multiplatform Wizard | JetBrains下载需要的库,然后进行一堆配置,目前看来还是需要再等等,先熟悉熟悉Jetpack Compose更好.

当然,前提条件都是必须要会Kotlin的基本语法.

.NET MAUI

Flutter是谷歌的技术,React Native是Meta的技术,而MAUI就是微软的技术. 使用C#和XAML(类似xml)开发mobile和desktop程序.如果你还想要web,可以结合Blazor.

.NET Multi-platform App UI (.NET MAUI) | .NET (microsoft.com)

目前微软正在大推,而之前的桌面开发应用比如WPF等已经没有什么大更新了,但是还是有一些公司(可能不是那么互联网的公司)正在使用.

如果你没有那么强调跨平台,我觉得WPF完全够用了.

还是使用的是利用文件配置声明UI控件,然后代码写事务逻辑.

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Notes.AboutPage">
    <VerticalStackLayout Spacing="10" Margin="10">
        <HorizontalStackLayout Spacing="10">
            <Image Source="dotnet_bot.png"
                   SemanticProperties.Description="The dot net bot waving hello!"
                   HeightRequest="64" />
            <Label FontSize="22" FontAttributes="Bold" Text="Notes" VerticalOptions="End" />
            <Label FontSize="22" Text="v1.0" VerticalOptions="End" />
        </HorizontalStackLayout>

        <Label Text="This app is written in XAML and C# with .NET MAUI." />
        <Button Text="Learn more..." Clicked="LearnMore_Clicked" />
    </VerticalStackLayout>
</ContentPage>
private async void LearnMore_Clicked(object sender, EventArgs e)
{
    // Navigate to the specified URL in the system browser.
    await Launcher.Default.OpenAsync("https://aka.ms/maui");
}private void OnCounterClicked(object sender, EventArgs e)
{
    count++;

    if (count == 1)
        CounterBtn.Text = $"Clicked {count} time";
    else
        CounterBtn.Text = $"Clicked {count} times";

    SemanticScreenReader.Announce(CounterBtn.Text);
}

Solution Explorer pane with MainPage.xaml file highlighted.

C#语言本身我个人还是非常喜欢的,属于历久弥坚.使用.NET开发移动程序基本上要搭配visual studio了(或者也可以使用Jetbrains的Rider),可能一些操作不熟悉.

此外也有第三方的Avalonia欢迎 | Avalonia Docs (avaloniaui.net)和Uno,也是可以考虑的. 但目前可能仍然存在一些坑,生态上资源可能也没有那么丰富.

优点:

  • .NET MAUI 提供跨平台 API,用于访问本地设备功能,如 GPS、加速计、电池和网络状态。
  • 它有一个单一的项目系统,可使用多目标功能针对 Android、iOS、macOS 和 Windows 启用。
  • 由于支持 .NET hot reload,开发人员可以在应用程序运行时修改托管源代码

这可能不太互联网和开源,但我还是想说说:

Qt

Qt最新已经到了6.x版本,官方也推荐Quick application,另外还有design studio方便界面设计. 官方文旦也很不错.

[Qt Documentation | Home](https://doc.qt.io/qt-5/gettingstarted.html)

Qt Documentation | Modules

image-20240608144743992

随便新建一个项目,设置允许使用design studio打开的格式,这样下面文件会多一些东西.

image-20240608150703433

可以看到使用qml和cpp进行开发,qml里可以写UI也可以写一些简单逻辑,类似MAUI和WPF.

Qt目前支持桌面和android等【Qt】如何从零配置Qt Android安卓环境_qt 安卓环境搭建,但我也不推荐使用qt开发移动应用。

而是使用qml技术开发跨平台桌面应用(毕竟针对不同IDE设置一个android模拟器还是挺麻烦的).

否则跟下面一样

image-20240608155750208

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    const QUrl url(u"qrc:/ada/Main.qml"_qs);
    QObject::connect(
        &engine,
        &QQmlApplicationEngine::objectCreationFailed,
        &app,
        []() { QCoreApplication::exit(-1); },
        Qt::QueuedConnection);
    engine.load(url);

    return app.exec();
}

import QtQuick
import QtQuick.Controls

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")
    Rectangle {
        anchors.fill: parent
        color: "red"
        Column {
            spacing: 20
            Text {
                text: qsTr("Hello World")
                font.pixelSize: 254
                font.bold: true
            }

            Button {
                text: qsTr("Hi, press me!")
                onClicked: console.log("Button clicked!")
            }

            Button {
                text: qsTr("Hi, press me!")
                onClicked: console.log("Button clicked!")
            }
        }
    }
}

而且Qt不只是一个UI库,它包括cpp的各种封装与工具,qml也支持js执行.

不过开发上qt本身并不支持热重载,每次改完还要重新运行.

我不会说c++很难,但这是个事实,不过Qt已经方便你很多了.构建工具也从原本Qt自己的qmake变成了cmake优先.

另外Qt和visual studio也是我很喜欢的c++的IDE,最近jetbrains又发力搞了clion nova据说占用内存小了,也可以试试.

但可能由于各种原因,Qt的生态跟前面几者不太相同,这里引用一句.

以往QT需求比较强烈的领域主要集中于军工、安防、车联网、工业控制、电力等相对偏传统的行业领域,整体需求比较稳定。但是近年来由于…,采用…,实现…。这也就意味着,像QT这种GUI框架必然会越受青睐。

作者:飞援
链接:https://juejin.cn/post/7076273798311313439
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

我并不是觉得Qt需要有多么受青睐,但是它的需求确实如上面所说,导致很多人拿来工作的并不多.

FYI

  1. The Six Most Popular Cross-Platform App Development Frameworks | Kotlin Multiplatform Development Documentation (jetbrains.com)

如有疑问,欢迎各位交流!

服务器配置
宝塔:宝塔服务器面板,一键全能部署及管理
云服务器:阿里云服务器
Vultr服务器
GPU服务器:Vast.ai

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于JSP技术的文物管理系统

你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;IDEA/Eclipse、Navicat、Maven 系统展示 首页 管理员界面 用户前台…

免费条形码生成工具,批量生成条形码

易条形是一款完全免费的条形码生成工具&#xff0c;可以帮助你快速生成条形码&#xff0c;支持生成18种条形码生成。 目前支持生成包括CODE128、CODE128A、CODE128B、CODE128C、EAN、EAN-13、UPC、EAN-8、EAN-5、EAN-2、CODE39、ITF14、MSI、MSI10、MSI11、MSI1010、MSI1110、…

ssm学生考勤签到小程序-计算机毕业设计源码43160

摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受学生的喜爱&#xff0c;学生考勤签到小程序被学生普遍使用&#xff0c;为方便学生…

硕思闪客精灵(shankejingling)软件最新版下载及详细安装教程

闪客精灵&#xff08;Sothink SWF Decompiler&#xff09;是一款先进的SWF反编译软件&#xff0c;它不但能捕捉、反编译、查看和提取Shock Wave Flash影片&#xff08;.swf和.exe格式文件&#xff09;&#xff0c;而且可以将SWF格式文件转化为FLA格式文件。它能反编译Flash的所…

人工智能、机器学习、深度学习:技术革命的深度解析

目录 人工智能、机器学习、深度学习&#xff1a;技术革命的深度解析 引言 第一部分&#xff1a;人工智能的起源与演进 1.1 人工智能的定义 1.2 人工智能的历史 1.3 人工智能的关键概念 1.4 人工智能的应用领域 1.5 人工智能的未来发展 1.6 人工智能的代码案例 第二部…

【乐吾乐3D可视化组态编辑器】用开关控制巡检车和路灯

一、运动设备开关控制 3D组态编辑器地址&#xff1a;3D可视化组态 - 乐吾乐Le5le 1.在场景中新建模拟运动设备及控制面板&#xff1a;启动/停止 2.单击巡检车设备新建模拟动画 3.设置模拟动画属性 4.单击启动面板&#xff0c;新建交互事件 5.设置交互触发类型&#xff0c;新建…

【vue2+css】实现球内波浪百分比效果

halo&#xff0c;小伙伴们&#xff0c;今天笔者分享一个关于css实现球内&#xff08;圆形&#xff09;波浪进度百分比效果&#xff0c;如下图所示&#xff1a; 话不多说上代码&#xff0c;首先是html代码&#xff1a; <div class"card1-left-bottom"><div …

SQL自动发送邮件的方法有哪些?如何配置?

SQL自动发送邮件设置时的注意事项&#xff1f;邮件群发如何操作&#xff1f; 在现代企业中&#xff0c;自动化流程越来越普遍&#xff0c;SQL自动发送邮件作为其中一项重要功能&#xff0c;能够大大提高工作效率并简化数据管理流程。AokSend将介绍几种实现SQL自动发送邮件的方…

SpringBoot整合SpringSecurit(二)通过token进行访问

在文章&#xff1a;SpringBoot整合SpringSecurit&#xff08;一&#xff09;实现ajax的登录、退出、权限校验-CSDN博客 里面&#xff0c;使用的session的方式进行保存用户信息的&#xff0c;这一篇文章就是使用token的方式。 在其上进行的改造&#xff0c;可以先看SpringBoot…

STM32 printf 重定向到CAN

最近在调试一款电机驱动板 使用的是CAN总线而且板子上只有一个CAN 想移植Easylogger到上面试试easylogger的效果&#xff0c;先实现pritnf的重定向功能来打印输出 只需要添加以下代码即可实现 代码 #include <stdarg.h> uint8_t FDCAN_UserTxBuffer[512]; void FDCAN_p…

【Java】解决Java报错:OutOfMemoryError

文章目录 引言1. 错误详解2. 常见的出错场景2.1 内存泄漏2.2 大数据结构2.3 JVM内存参数配置不当 3. 解决方案3.1 内存泄漏检测与修复3.2 优化数据结构3.3 调整JVM内存参数3.4 使用弱引用 4. 预防措施4.1 定期进行内存分析4.2 合理设计数据结构4.3 使用合适的JVM内存参数4.4 优…

前端工程化工具系列(十)—— Browserslist:浏览器兼容性配置工具

Browserslist 是一个能够在不同的前端工具间共享目标浏览器的配置&#xff0c;各工具根据该配置进行代码转译等操作。 具体的这些前端工具为&#xff1a;Autoprefixer、Babel、postcss-preset-env、eslint-plugin-compat、stylelint-no-unsupported-browser-features、postcss-…

Java开发-面试题-0004-HashMap 和 Hashtable的区别

Java开发-面试题-0004-HashMap 和 Hashtable的区别 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff08;纯纯技术文&#xff09; 生活…

批量高效调整图片像素:自定义缩小bmp图片,画质优先,一键实现高效优化

图片已经成为我们生活中不可或缺的一部分。无论是社交媒体分享&#xff0c;还是工作文件传输&#xff0c;图片总是扮演着重要的角色。然而&#xff0c;有时候&#xff0c;我们可能会面临一个问题&#xff1a;图片像素过大&#xff0c;不仅占用过多的存储空间&#xff0c;还可能…

【JavaSE】面向对象---多态

前言 本篇以Java初学者视角写下&#xff0c;难免有不足&#xff0c;或者术语不严谨之处。如有错误&#xff0c;欢迎评论区指正。本篇说明多态相关的知识。若本文无法解决您的问题&#xff0c;可以去最下方的参考文献出&#xff0c;找出想要的答案。 多态概念 多态&#xff08…

如何实现网站HTTPS访问

在当今网络安全至关重要的时代&#xff0c;HTTPS已经成为网站安全的基本标准。HTTPS&#xff08;超文本传输安全协议&#xff09;通过在HTTP协议基础上加入SSL加密层&#xff0c;确保了数据在用户浏览器和服务器之间的传输是加密的&#xff0c;有效防止数据被窃取或篡改&#x…

【学术小白成长之路】01三方演化博弈(基于复制动态方程) -基础概念与模型构建

1.演化博弈基础知识 经典博弈论起源于1944年Von Neumann和Morgenstern合著的《博弈论与经济学行为》&#xff0c;是研究理性决策者之间竞争和合作关系的数学方法。 博弈论主要研究完全理性的博弈个体为实现利益最大化而做的策略选择&#xff0c;在过去几十年取得了极大发展&am…

【JMeter接口测试工具】第二节.JMeter基本功能介绍(下)【入门篇】

文章目录 前言八、Jmeter常用逻辑控制器 8.1 如果&#xff08;if&#xff09;控制器 8.2 循环控制器 8.3 ForEach控制器九、Jmeter关联 9.1 正则表达式提取器 9.2 xpath提取器 9.3 JSON提取器十、跨越线程组传值 10.1 高并发 10.2 高频…

详解 Flink 的时间语义和 watermark

一、Flink 时间语义类型 Event Time&#xff1a;是事件创建的时间。它通常由事件中的时间戳描述&#xff0c;例如采集的日志数据中&#xff0c;每一条日志都会记录自己的生成时间&#xff0c;Flink 通过时间戳分配器访问事件时间戳Ingestion Time &#xff1a;是数据进入 Flink…

K8s速览

k8s的核心能力 ● 服务发现与负载均衡 ● 服务恢复 ● 服务伸缩 ● 自动发布与回滚 ● 批量执行 架构 server-client两层架构&#xff0c;Master作为中央管控节点&#xff0c;会和每一个Node进行一个连接&#xff1b; 所有UI层&#xff0c;client的操作&#xff0c;只会和Mat…