V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
beginor
V2EX  ›  程序员

请问类似于 AnyDesk 的跨平台 UI 是怎么实现的?

  •  
  •   beginor ·
    beginor · 2021-08-26 14:14:34 +08:00 via Android · 4046 次点击
    这是一个创建于 1210 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想知道 AnyDesk 哪种只有几兆的跨平台原生应用,用什么实现?

    肯定不是 Cef, 也不像是 Qt 。

    第 1 条附言  ·  2021-08-26 20:52:36 +08:00
    还是是绿色版软件,各平台都不用安装直接运行
    16 条回复    2021-09-03 10:51:39 +08:00
    harde
        1
    harde  
       2021-08-26 14:16:48 +08:00
    每个平台单独开发就行了。
    tsanie
        2
    tsanie  
       2021-08-26 14:28:40 +08:00
    不是一套代码,就比如 macOS 版可以看出视图都是 interface builder 编译出来的 nib,没用第三方框架
    Rwing
        3
    Rwing  
       2021-08-26 14:33:07 +08:00
    考虑一下 avalonia
    https://github.com/AvaloniaUI/Avalonia

    aot 编译后自带运行时 30M 左右体积,内存占用 20M 😊
    opentrade
        4
    opentrade  
       2021-08-26 15:03:30 +08:00   ❤️ 1
    我的压缩后也是 5M 多一点,用的 Sciter
    ysc3839
        5
    ysc3839  
       2021-08-26 15:21:06 +08:00
    可能是自研的 UI 引擎,不开源也不公开给他人使用。
    agagega
        6
    agagega  
       2021-08-26 15:42:53 +08:00 via iPhone
    macOS 原生应用很清楚,就是 Cocoa,简单一点上 SwiftUI.
    Windows 上是啥? WPF? WinForm? WinUI?
    Linux 好像更迷惑了,Qt? GTK?
    chenstack
        7
    chenstack  
       2021-08-26 20:16:46 +08:00
    用 spy++检测 AnyDesk 的界面,发现其中的控件基本都没有句柄,应该是自绘制的,同时从窗口类排除 WPF, WinForm,应该不是.net 的技术。搜到一篇 AnyDesk 的博客
    https://blog.anydesk.com/why-is-anydesk-so-lightweight/
    mmdsun
        8
    mmdsun  
       2021-08-26 20:48:02 +08:00 via Android
    看过 Xamarin 开发过跨平台 ,优化的好一样很小。
    beginor
        9
    beginor  
    OP
       2021-08-26 21:23:46 +08:00 via Android
    @opentrade sciter 了解过,确实挺不错的。
    beginor
        10
    beginor  
    OP
       2021-08-26 21:24:42 +08:00 via Android
    @chenstack 看着样子是封装原生 API ?
    beginor
        11
    beginor  
    OP
       2021-08-26 21:26:16 +08:00 via Android
    @mmdsun Xamarin 我也用过一段时间,还是收钱的时候。 不过当时也是仅仅限于移动端
    beginor
        12
    beginor  
    OP
       2021-08-26 21:38:34 +08:00 via Android
    @Rwing 看起来不错的样子,截图都是 Windows 的, 不知道 Linux 和 Mac 下体验如何
    wangxn
        13
    wangxn  
       2021-08-27 11:23:42 +08:00
    wxWidgets 可以达到这种效果,平台原生 UI,C++ 开发。
    kerro1990
        14
    kerro1990  
       2021-08-27 22:38:54 +08:00
    sciter
    secondwtq
        15
    secondwtq  
       2021-08-27 22:46:40 +08:00   ❤️ 4
    AnyDesk 不知道,不过不用现成框架,自己封装 UI 的软件见过不少。

    Adobe 系工具软件用的应该是自己的 UI 库,当然 Adobe 软件并不小,但是效果确实不错。特别提一句是因为我看过一个 Adobe 长者 Sean Parent 的”Better Code“系列 talk,感觉讲得很不错。其中有一次提到了他搞得一个叫做”property model“的东西,老实说这东西我现在搞不明白,但是他似乎 imply 了这东西在 Adobe 一些产品的 UI 中有应用。
    Adobe 的竞品们也很有意思,比如 Affinity,也是支持 Win 和 Mac,好像也是用的自己的 UI 库(不一定是一个 PAL,可能是整个 UI 都是每个平台分别开发的)。而 Linux 一半 GUI 程序的妈 GTK+( 4.0 发布之后没 + 了)(虽然我发现我现在主要用的工具都是 Qt 写的),原名叫 GIMP Toolkit,是 GIMP 开发的副产品(尽管可能本站大多数人不认为 GIMP 构成 PS 的一个竞品,并且 GTK 现在在其他平台的表现也十分捉鸡)。

    另外还有(自己做 UI 但是体积不小的)还有 Blender,Blender 应该是 DirectUI,自己还带了一堆特别魔幻的 skin,但是具体是怎么一个实现模式没研究过。说起来在最近的某次更新之前,Blender 的 CommonFile 操作是没有对话框的,直接在 main window 里面选文件,并且会把你当前的工作流打断。Dear imgui 这种草台班子 DirectUI 经常无视多窗口支持,不知道 Blender 是不是一样的情况。
    Steam 也是 DirectUI,V 社直接把 Source 引擎里面的 UI 部分,叫做 VGUI 搬过来用了(游戏引擎大多都有自己的 in-house UI,好不好用和高不高效就两说了)。因为是 Source 的东西,所以你甚至可以找到开发文档(会找的话,更禁忌的东西也不是不能找到哦~),并且这东西有自己的 markup,就放在 Steam 目录下面,所以你可以自己给 Steam 换肤( Anyway.fm 听众狂喜)。当然周所众知 Steam 现在主要是 CEF,不过 Steam 有个 flag 可以直接强关 CEF,此时除了下载页面和 Steam 设置界面(游戏的 ”Properties“ 界面好像现在也是 CEF 了)之外,Steam 基本所有的功能都瘫痪了,吊诡的是,好友界面会 fallback 到 VGUI 版(理论上 overlay 应该也能用),另外还保留了一个轻量版的游戏列表,所以不需要喜加一(或者想控制下手)的时候还是可以当启动器用,不用开 CEF 省太多资源了。

    一个本站接触比较少,但是可能是最相似的软件之一,REAPER DAW,开发者 Cockos 公司老板 Justin Frankel,这位老哥看起来很有 geek 风范。他之前做的公司叫 Nullsoft,做出过 Winamp 和 NSIS 。REAPER 既不是 FOSS 也不是 freeware,但是采用的分发方式很特别,并且除了 Win 和 Mac 之外,还支持 Linux,并且官网还特别提到 Win 在 Wine 上跑的效果也很不错。我把 tar 包下来看了一眼,Linux 版的 executable 大概不到 10M 。
    虽然 REAPER 不开源,但是他们开源了一个 C++ 库叫 WDL,大概是 REAPER 用的一些基础库,其中的 LICE 模块可以做矢量绘图,而 virtwnd 模块声称可以“building of dynamic, complex UIs within OS hosted windows”。虽然我看了两眼代码感觉挺草台班子的,不知道 REAPER 用的是不是这玩意。

    本站接触比较多的就是 Sublime Text,这东西只知道是自己写的 UI,细节暂时未知。
    另外我之前别的主题里提过,Pascal 系的 Lazarus 现在可以跨平台,Beyond Compare 就是这么在 Linux 下面跑起来的,这东西和上面 Direct UI 不一样,应该是 native 的。当然这货在 Linux 下貌似会依赖 Qt 之类的,不过处理 GUI 的复杂性本来也不是 Lazarus 的工作,而且谁家 Linux 跑 GUI 应用不装他几十个框架啊 ... Windows 下大小和 VCL 一个级别,还是很美丽的。

    还有虽然说 Electron 和类 Electron 框架一直被人诟病,但是一直有人试图继续进行改进,做 trimmed down 版本的 Electron 。比如有个叫 Ultralight 的,几年前叫 Awesomium,虽然用的应该是 WebKit 内核,现在貌似 80M 左右大小,而我 VSCode 用的这个 Electron,和 Steam 的 CEF 均大于 130M,这东西主要客户之一是游戏,这个大小在游戏中还能接受。其实说到 Web 和游戏,在游戏里面用 Web 界面的想法很早就有了,我知道 Awesomium 还是从 Overgrowth 这篇十几年前的博客来的 http://blog.wolfire.com/2009/07/a-webkit-primer-part-1,那时候 WebKit 估计也要瘦上一个数量级。再往前的时代,Flash 很火,SAGE 引擎用的所谓 APT,根据一些折腾过的人的描述,就是 Flash 技术,当时 Flash 还是 Macromedia 家的,直到 CC3 发布之后才改姓 Adobe 。
    更小的是 Miniblink,声称“小巧”,大概 40M 吧。另一种思路是不用现成浏览器引擎,自己重新搞一个类似的,比如 libRocket,稍微复杂一点的有 sciter,上面有人提过了。虽然我还是觉得拿文档模型做应用不太合适,不如 WPF,Qt Quick 之类的。
    除了大而全的 Qt 之类的库之外,也有一些小点的库,比如 FLTK,这货跟 GTK 貌似一个年纪,但是看样子可能永远地停留在了那个时代 ...
    qW7bo2FbzbC0
        16
    qW7bo2FbzbC0  
       2021-09-03 10:51:39 +08:00
    @Rwing #3 RoslynPadAvalonia 就是用的 Avalonia,不知道是框架还是设置的问题,复制快捷键在 mac 上还是 ctrl + c,打分号还经常 crash
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5375 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 08:20 · PVG 16:20 · LAX 00:20 · JFK 03:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.