从网络代理软件看跨平台技术

实用技术 其它网络跨平台应用
浏览数 - 165发布于 - 2025-10-30 - 20:25

背景

在一些小众软件方面,跨平台是一个衡量应用的关键要素。对于网络代理这种非常基本的要求,跨平台更是几乎必需的衡量标准。  

列表

PixPin_2025-10-30_20-00-52.png

跨平台底层技术

首先要明白大致的原理,大多数应用是如何实现跨平台的?  

  1. 原生抽象,在上层提供统一的API,下层由框架来调用各种原生功能。从而做到开发体验一致。  

    Qt(C++,研发Qt的商业公司。Pyside也是Qt) 

    React Native(js,背靠facebook,只有移动端)

  2. 自绘引擎

    Flutter(dart,背靠谷歌),Avalonia(C#,背靠微软)

  3. Webview

    webview构建页面都是js前端,不同的地方在于各个框架使用的后端语言。

    Electron(nodejs后端)、Tauri(Rust后端,商业公司)、Wails(go语言后端)

Qt

Qt是目前最为成熟的跨平台GUI构建框架,但是由于一些缺陷如今逐渐式微。  

  • 使用C++编写,这是优势,但是同时C++具有较高的学习成本,让C++人才来写GUI多少有些大材小用。

  • Qt的收费问题

Qt6的使用是否需要付费,取决于具体的使用场景和许可证类型。Qt提供了两种主要的授权模式:开源协议(LGPL/GPL)[&和商业授权&]。

开源协议(LGPL/GPL)

Qt6在开源协议下是免费的,但有一定的限制条件:

  • 桌面应用:可以免费使用动态链接的方式开发闭源商业软件(Windows/macOS/Linux),但需遵循LGPLv3协议,并在软件中声明使用了Qt。

  • 移动端和嵌入式开发:Qt官方未提供动态库支持,需自行编译动态库,或者购买商业授权。

  • 部分模块限制:某些模块(如Qt Charts、Qt Digital Advertising)仅限商业授权使用。

商业授权

商业授权适用于需要更多功能和灵活性的场景:

  • 支持静态链接:允许闭源发布,适用于所有平台(包括移动端和嵌入式)。

  • 技术支持:提供专属技术支持和独家模块(如自动化测试工具、MCU支持)。

  • 费用:每位开发者的年度订阅费用约为3950美元,三年订阅费用约为8400美元。嵌入式设备的分发费用需根据项目规模单独报价。

  • UI界面较为简陋,Qt可以构建好看的界面,但是并不像其他框架那样默认提供(Flutter默认页面也是好看的)或是容易编写(web技术轻松构建美观页面)

PixPin_2025-10-30_10-21-58.png

Flutter

Flutter使用了Skia自绘引擎,相较于webview具有显著优势。  

目前在企业中,已有使用Flutter作为跨平台选择的现象。

生态偏向移动端。  

Tauri

Tauri是使用Rust开发的webview跨平台框架。不同于Electron,其调用了系统原生的webview,但是正因如此,这个框架具有一些兼容性问题,比如在windows7上没有预装Edge,因此也就没有Webview,需要用户手动安装,在Linux平台,依赖于WebKitGTK,会存在版本不统一的情况。  

Tauri相较于Electron,并没有从根源上解决问题。Electron的问题是内存占用大,这是由于webview,只要继续使用webview,就不太可能写出内存占用低的应用程序。  

Tauri只是解决了安装包体积大的问题,然而这个问题说大不大,只是表面上好看而已。 

因此,商业型项目通常还是使用Electron作为webview跨平台选择。 

评价

除去nekobox以及clashN。GUI for clash和GUI for singbox是同一个作者。  

一共10位开发者,有4位使用了webview,3位使用flutter,2位使用Qt(pyside归到qt里面),以及1位使用C#不知道哪个框架。  

足以看出,webview在开发者中多受欢迎,主要有以下几个原因:  

  1. 一致性高,webview构建的页面在不同平台能够显示相同的页面。  

  2. 开发难度小,使用前端框架可以轻松构建页面,并且可以利用前端生态。  

    webview的开发者工具应该算是GUI程序中最强的开发者工具,调试起来简单。  

    轻松具备热重载等特性,开发效率高。  

  3. 更容易做出美观的界面,因为前端构建页面的自由程度非常高。  

但是用户体验就很扯了,内存占用大不说,bug还多。  

[0806/044639.668:ERROR:icu_util.cc(243)] Invalid file descriptor to ICU data received. - 魂祈梦 - 博客园

vscode我用起来没啥bug,但是utools会有无法唤醒的情况,和clash的情况类似。  

我的使用历程

最早期使用一个不知名的vpn,打开了新世界的大门,然后有一天不能用了。

后来使用蓝灯、老王等vpn应用。

接触到Youtube之后,开始使用SSR。  

然后是v2rayN;  

后面不知为啥就换成clash了,clash死后又换成clash verge rev。  

别的没什么,clash verge rev的bug还是挺多的,卡死、页面只显示左上角、点任务栏点不出来。  

而且很重要的一点是托盘上右键选项中没有更换节点的菜单,这导致更换节点必须打开GUI页面。  

本文版权遵循 CC BY-NC 协议 本站版权政策

1 条回复

茅羽耶
发布于 2025-10-30 - 20:27

(。>︿<。) 已经一滴回复都不剩了哦~