2024年跨平台应用解决方法

news2024/11/29 2:35:15

个人博客: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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

能放在桌面上的倒数提醒软件 桌面提醒软件倒数日

在忙碌的生活中&#xff0c;我们总有许多待办事项和重要的纪念日需要牢记。可是&#xff0c;人的记忆毕竟有限&#xff0c;有时候一不小心就会错过那些重要的时刻。 桌面提醒软件是我日常生活中的得力助手。它小巧轻便&#xff0c;静静地待在我电脑的桌面上&#xff0c;每次打…

【漏洞复现】多客圈子论坛系统 httpGet 任意文件读取漏洞

0x01 产品简介 多客圈子论坛系统是一种面向特定人群或特定话题的社交网络&#xff0c;它提供了用户之间交流、分享、讨论的平台。在这个系统中&#xff0c;用户可以创建、加入不同的圈子&#xff0c;圈子可以是基于兴趣、地域、职业等不同主题的。用户可以在圈子中发帖、评论、…

2024教资认定报名流程,点赞收藏!

2024年要进行教资认定的宝子们提早准备 &#x1f525;教资认定网上报名流程概览 一、进入教资认定网报入口 二、进行实名核验 三、申请网报时间查询 四、个人信息维护 五、认定申请报名 &#x1f525;教资认定所需材料 1⃣️身份证 2⃣️户口本&#xff0f;居住证&#xff0f;学…

17_Vue高级监听器生命周期Vue组件组件通信

文章目录 1. 数据监听器watch2. Vue生命周期3. Vue组件4. Vue组件通信Appendix 1. 数据监听器watch 首先watch需要单独引 import {watch} from vuewatch函数监听ref响应式数据 watch(监听的内容&#xff0c;监听行为)监听行为默认为(newValue,oldValue) let firstname ref…

[职场] 生产安全员求职简历范文 #媒体#经验分享

生产安全员求职简历范文 生产安全员是现代企业中不可或缺的职位&#xff0c;他们的主要职责是确保生产过程中的安全和健康。下面是生产安全员求职简历范文&#xff0c;供大家参考。 个人信息 姓名&#xff1a;蓝山 年龄&#xff1a;25岁 地址&#xff1a;嘉兴 工作经验&am…

Inpaint9.1软件下载附加详细安装教程

软件简介: Inpaint 是个人开发者Max开发的图片处理软件&#xff0c;可以高效去除水印&#xff0c;修复照片等。使用方法和操作都很简单&#xff0c;非常适合不会PS等软件的小白用户。 安 装 包 获 取 地 址&#xff1a; Iinpaint win版&#xff1a;​​https://souurl.cn/b…

xm文件怎么转换成mp3文件,亲测有效!附工具下载

朋友们&#xff0c;你们有没有遇到过喜马拉雅的.xm文件转成MP3格式的麻烦&#xff1f;别急&#xff0c;我这儿有个好消息告诉你&#xff0c;有个免费的转换工具&#xff0c;简单几步就能搞定&#xff0c;还能批量处理呢&#xff01; 咱们先聊聊这个数字音频的小困扰。喜马拉雅…

使用Rufus工具制作Ubuntu To Go——很详细

一、准备工作 准备工具&#xff1a; 1、下载Rufus(主角)软件 2、准备一个U盘&#xff08;制作启动盘&#xff0c;32G足够&#xff09; 3、准备一个U盘或硬盘&#xff08;小白128G足够&#xff0c;装Ubuntu系统&#xff09; 4、下载Ubuntu系统镜像文件 1、下载软件Rufus 先来看…

用PlantUML描绘C++世界:通过文本描述精准控制UML图的生成

往期本博主的 C 精讲优质博文可通过这篇导航进行查找&#xff1a; Lemo 的C精华博文导航&#xff1a;进阶、精讲、设计模式文章全收录 前言 在编写程序时&#xff0c;可视化的工具可以极大地帮助我们理解和设计复杂的系统。对于C程序员来说&#xff0c;一个强大的工具是UML&am…

JVM学习-MAT

MAT(Memory Analyzer Tool) 基本概述 Java堆内存分析器&#xff0c;可以用于查找内存泄漏以及查看内存消耗情况MAT是基于Eclipse开发的&#xff0c;不仅可以单独使用&#xff0c;还能以插件方式嵌入Eclipse中使用&#xff0c;是一款免费的性能分析工具 获取堆dump文件 dump…

Edge浏览器十大常见问题,一次性解决!

Edge曾被称为最好用的浏览器&#xff0c;拳打Chrome脚踢firefox, 可如今却隐藏着像是播放卡顿、下载缓慢、广告繁多等诸多问题&#xff0c;不知道各位还在用吗&#xff1f; 今天小编收集整理了Edge浏览器十大烦人问题&#xff0c;并提供简单有效的解决办法&#xff0c;让你的E…

65. UE5 RPG 实现远程攻击

前面&#xff0c;我们实现了敌人的近战普通攻击&#xff0c;还兼容了对于没有武器的敌人的攻击。有近战就要有远程&#xff0c;这一篇&#xff0c;我们实现一下敌人的远程攻击。 首先&#xff0c;由于创建的资源增多&#xff0c;我们将GA和GE按敌人和英雄的类别分开&#xff0c…

MPC控制简化版

MPC控制算法简化版 模型预测控制&#xff08;Model Predictive Control&#xff0c;MPC&#xff09;是一种先进的控制策略&#xff0c;广泛应用于人形机器人的运动控制。具体实现过程中&#xff0c;还需结合机器人的实际动力学模型和更多的物理约束条件。以下是一个人形机器人…

基本 MOSFET 恒流源

恒流源在电路分析练习和网络定理中占有重要地位&#xff0c;然后它们似乎或多或少消失了。。。除非你是IC设计师。尽管在典型 PCB 设计中很少遇到&#xff0c;但电流源在模拟 IC 领域却无处不在。这是因为它们 1) 用于偏置&#xff0c;2) 作为有源负载。 偏置&#xff1a; 用作…

【SkyWalking】启用apm-trace-ignore-plugin追踪忽略插件

背景 使用Agent采集追踪数据的时候&#xff0c;想排除某些路径&#xff0c;比如健康检查等&#xff0c;这样可以减少上报的数据&#xff0c;也可以去除一些不必要的干扰数据。 加载插件 在agent/optional-plugins目录中有个apm-trace-ignore-plugin-${version}.jar插件&…

Hive on Spark版本兼容性

Hive on Spark仅在特定版本的Spark上进行测试&#xff0c;因此给定版本的Hive只能保证与特定版本的Spark一起工作。其他版本的Spark可能与给定版本的Hive一起工作&#xff0c;但不能保证。以下是Hive版本及其对应的Spark版本列表&#xff1a; 详情参考官方文档&#xff1a;http…

C# 异步方法async / await 任务超时处理

一、需求 如果调用一个异步方法后&#xff0c;一直不给返回值结果怎么办呢&#xff1f;这就涉及到怎么取消任务了。 二、Task取消任务 static CancellationTokenSource source new CancellationTokenSource();static void Main(string[] args){Task.Run(() >{for (int i …

C# WPF入门学习主线篇(十)—— DataGrid常见属性和事件

C# WPF入门学习主线篇&#xff08;十&#xff09;—— DataGrid常见属性和事件 欢迎来到C# WPF入门学习系列的第十篇。在前面的文章中&#xff0c;我们已经学习了 Button、TextBox、Label、ListBox 和 ComboBox 控件。今天&#xff0c;我们将探讨 WPF 中的另一个重要控件——D…

CHATGPT升级plus(已有账号前提下)

注册wildcard(虚拟卡) 注册号账号后先进行充值&#xff0c;充值后选择CHATGPT一键升级按照他的流程来即可 Wildcard网址&#xff1a;Wildcard跳转注册 填写邀请码充值时少两美金合计14&#xffe5; 邀请码&#xff1a;OL3QXTRH

Adobe Illustrator 矢量图设计软件下载安装,Illustrator 轻松创建各种矢量图形

Adobe Illustrator&#xff0c;它不仅仅是一个简单的图形编辑工具&#xff0c;更是一个拥有丰富功能和强大性能的设计利器。 在这款软件中&#xff0c;用户可以通过各种精心设计的工具&#xff0c;轻松创建和编辑基于矢量路径的图形文件。这些矢量图形不仅具有高度的可编辑性&a…