V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Kawa
V2EX  ›  程序员

我想自己写一个前后分离的 UWP QQ, 遇到了一些问题

  •  
  •   Kawa · 2022-04-06 03:11:45 +08:00 via Android · 2744 次点击
    这是一个创建于 955 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近收了一台 Lumia 930 来玩, 发现没什么 app, 就打算试着自己写一个 UWP QQ 来玩玩.

    本人只对前端熟悉, 所以打算把它做成前后端分离的模式. 原本的想法是, 用 go-cqhttp 做后端,然后用 H5 写前端.Windows mobile 自带的 webview 是 Edge, 还算比较 modern, 写起来应该不会特别难受.

    结果一上手傻眼了,UWP 应用根本不允许直接运行 exe 程序… 查了一下发现,有一个 FullTrustProcessLauncher, 但是好像只能在桌面端用, 手机上估计没法用.

    所以有懂哥来支点招或者提供点思路么, 比如让 exe 直接在当前进程里运行的 trick 之类的.

    用的 C#, 正好朋友用 C#写了个基于手 Q 协议实现的 QQ 客户端, 叫 Konata(GitHub 上无料有售), 不过这样一来貌似工程量就很大, 感觉会被逼着学一大堆 C#.

    20 条回复    2022-04-07 12:01:10 +08:00
    likai
        1
    likai  
       2022-04-06 08:25:38 +08:00 via Android
    开源 mirai 加 http 就可以了
    learningman
        2
    learningman  
       2022-04-06 08:31:59 +08:00
    不能本地起服务器,那就在云上运行呗
    CrazyMonkeyV
        3
    CrazyMonkeyV  
       2022-04-06 08:59:19 +08:00
    不会 c#+wpf 写什么 uwp
    CrazyMonkeyV
        4
    CrazyMonkeyV  
       2022-04-06 09:00:45 +08:00
    哦,H5 啊,叫会 wpf 的给你搞个壳子访问你的网页就行了
    nothingistrue
        5
    nothingistrue  
       2022-04-06 09:04:05 +08:00
    UWP 的基准就是 C#+Xamarin ,你这一不想用 C#二想绕过 Xamarin 直接启 exe ,那搞出来的只能是 Win32 转制 UWP (只能在 PC 端使用的假 UPW )。
    leisure
        6
    leisure  
       2022-04-06 09:38:07 +08:00
    建议,如果想搞一个 UWP 就去学一下相关技术。JS 撸一切的想法在这种平台上不太现实。
    janus77
        7
    janus77  
       2022-04-06 09:49:56 +08:00
    uwp 好像可以套壳 exe 的,不知道用的什么技术
    不过这种套壳好像也不能在手机上运行?
    idealhs
        8
    idealhs  
       2022-04-06 09:58:52 +08:00
    如果你的应用只使用核心 API ,它将在任何 Windows 设备上运行,不论你是定位台式电脑、Xbox 、混合现实头戴显示设备还是其他设备。
    使用 C++/WinRT 编写的 UWP 应用可以访问属于 UWP 的 Win32 API 。 所有 Windows 设备都实现这些 Win32 API 。
    https://docs.microsoft.com/zh-cn/windows/uwp/get-started/universal-application-platform-guide
    ch2
        9
    ch2  
       2022-04-06 10:23:00 +08:00
    你不用 C#写 UI ,按 lumia930 的骁龙 800 的性能,很不够看的
    ch2
        10
    ch2  
       2022-04-06 10:23:58 +08:00
    mobile 的 sdk 早就永远停在在 1709 了好像?新加的 feature 全是给桌面用的
    abc8678
        11
    abc8678  
       2022-04-06 10:52:05 +08:00 via Android
    确定不会出事?
    0o0O0o0O0o
        12
    0o0O0o0O0o  
       2022-04-06 10:59:29 +08:00 via iPhone
    @abc8678 总有人说这类工具会有人利用它们做非法的事情,这个不假,并且事实上是这类工具自身也违法,都是逆向来实现。
    abc8678
        13
    abc8678  
       2022-04-06 11:02:52 +08:00 via Android
    我还是很需要第三方客户端的,这样就不需要把 QQ 留在后台了,只留一个小体积的通知工具就行了。最近 play 版 QQ 居然在应用内下载更新包,受不了。而 wp 手机上,我已经没有 QQ 可以用了,听说过电报可以转发 QQ 消息,但没试过。Linux 上只有 wine 版和十几年前那个老版本,难受
    abc8678
        14
    abc8678  
       2022-04-06 11:03:43 +08:00 via Android
    @0o0O0o0O0o 以前的 QQ 支持很多平台的,买个杂牌机都内置 QQ ,现在只有安卓和苹果
    Kawa
        15
    Kawa  
    OP
       2022-04-07 03:19:18 +08:00 via Android   ❤️ 1
    @leisure
    @nothingistrue
    没有打算 js 撸一切, 只是打算撸个前端, 写起来比较顺手而已.
    但是裸 js 基本啥都干不了, 需要一个后端. 本来想法很简单, go-cqhttp 用 go 的跨平台编译, 直接就能编译出 native 的玩意, 可以直接在对应的平台上运行, 然后 js 做前端, go-cqhttp 处理 QQ 的协议, C#处理 app 与系统交互层面(消息通知, 分享, 保存内容)的东西, 结果发现 uwp 根本不允许直接拉起进程.

    然后我就想干脆协议层也用 C#处理, 结果发现, uwp 不支持.net 5, 也没有.net standard 2.1, 这样唯一能用的 C#协议层 Konata 也跑不起来, 这事情我觉得算是彻底烷基八氮了.

    最后可能就被迫 QQ 上云, 脱离 uwp 去运行.
    或者干脆解锁掉 win10m, 搞点花活强行拉一个 exe 进程起来, 这样折腾的代价比较大, 但是至少可以完全单机运行.

    反正我也差不多打算放弃这种骚想法了, 直接上云就没啥意义了, 不够好玩.
    Kawa
        16
    Kawa  
    OP
       2022-04-07 03:24:51 +08:00 via Android
    @ch2
    不用 C#写 UI 我觉得是可行的, 再怎么说 Edge 也是个半残 webview, H5 界面性能肯定是够看, 大不了少做点动画, 但是内存开销就可能会很美丽.
    试过, 就打开我自己一个两百来行代码的个人主页, 内存开销就达到了可观的 250M, 离谱得不行.

    Mobile 的 SDK 确实永远停在了 1709, 这样一来兼容性不可能出问题(确信
    Kawa
        17
    Kawa  
    OP
       2022-04-07 03:29:28 +08:00 via Android
    讲真, 我在 kindle 上搞一个 QQ, 都没有在 win10m 上搞 QQ 这么委屈…
    只要解锁了 kindle, 基本上就能为所欲为了, 想干啥就干啥.
    win10m 看起来啥都有, 结果一用起来比全新安装的 Linux 还断手断脚, 属实很难蚌得住.
    leisure
        18
    leisure  
       2022-04-07 09:21:39 +08:00
    @Kawa 大佬真的是比我爱折腾好多,我是从来没想过在 windows 平台上搞东西。直觉就是太费劲,撑死也就是想想用 electron 或者 flutter 撸一下。。。。
    nothingistrue
        19
    nothingistrue  
       2022-04-07 09:34:00 +08:00
    @Kawa 你对跨平台(或者操作系统适配)、UWP (通用应用)、客户端的理解都有偏差,然而最直接的还是太迷信 go 。go 最开始以及现在一直是用来替代 C 的,也许还能替代 C++,这意味着它跟 C/C++一样主要是用来适配 Windows 、Linux 、Unix 等传统操作系统的,不适配 IOS 、Android 、WebOS 、Win10 mobile 这样的新型移动操作系统(并不是不能适配,而是生态不在这里很少有人去吃力不讨好的搞底层适配库)。

    win10 mobile 跟 win10 只是内核一样,整体上还是俩类型的操作系统。kindle 和早期 Android 系统,你解锁了之后就是个 Linux 。

    其实你有更好的方案:PWA 。然后你就会发现真正的难点是跟 QQ 服务器做沟通——理论上来说,任何接入 QQ 服务器的第三方,都要被南山法院锤。
    Kawa
        20
    Kawa  
    OP
       2022-04-07 12:01:10 +08:00 via Android
    @nothingistrue
    我对 go 的理解是他能在绝大部分架构的处理器和绝大部分的操作系统上直接运行, 而基本不依赖操作系统提供的 API.
    就像 go 对 Linux 的支持, 只要操作玩得不是很花, 比如仅仅连网或者写文件, 那么针对 Linux aarh64 的编译出来的东西照样可以在 Android 上跑.
    go-cqhttp 我认为就是这么个东西, 他仅仅就是连网已经写日志, 并没有什么特别平台特定的东西(典型的平台特定就有注册表), 那么我认为理论上这个东西也应该可以在绝大部分系统上运行.
    当然有例外, alpine linux 没有用 glibc, 这就导致所有用 gcc 编译的东西都没法运行. 但是我觉得 win10m 应该不会这么离谱, 连 msvc 都给扔掉.
    以上关于 win10 与 win10m 的共通性有很多我猜测的成分, 所以我想实践一下验证我的想法, 但是显然 uwp 的限制并没有给我机会去验证他.

    跨平台是个笑话大家都知道, 基本就是 once code, fuck up everywhere. 但是至少要能跑个 hello world 吧, 不然真的要把人笑死.

    现代的 Android 虽然已经在内核引入了很多安卓特有的东西, 但是实际上对很多原生 Linux 程序都有很好的支持. 我觉得你应该听说过 termux 或者 Linux deploy, 这些都是以容器形式在安卓上直接运行 Linux 发行版的工具(虽然半残), 通过 apt, yum 等包管理器安装的软件不需要特定的软件源, 可以直接与树莓派等原生运行 Linux 的系统共用软件源, 几乎很少有被安卓特性 break 掉的东西.

    pwa 显然就要上云了, 并非没有能力, 只是还是想尝试一下原生运行, 不然做的事情就没啥意义了.
    做这个的目的就仅仅出于自己娱乐的目的, 如果可以自行部署可能就会再考虑往外分发出去.

    目前这个项目最大的阻力就是没有合适的协议层实现, 自己重新实现一遍协议层难度还是比较大的, 而且这个东西本身就不是特别的平台特定, 但是就是没有任何一个合适的东西去实现.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2867 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:57 · PVG 11:57 · LAX 19:57 · JFK 22:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.