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

用 JS 开发 PC 原生 APP,走 C++的路,让 C++无路可走

  •  
  •   setoutsoft · 2023-06-25 10:43:32 +08:00 · 2361 次点击
    这是一个创建于 542 天前的主题,其中的信息可能已经有所发展或是发生改变。

    折腾了半年,开发的用 js 开发原生 APP 的框架已经基本成熟了。 目前用这个框架开发了 5 个项目:一个高仿扫雷,一个聚合直播播放器,还有 3 个小项目。 全部逻辑使用 js 实现,使用 vscode ,还支持 js 代码调试及 api 提示。 所有代码全部开源(注意开源协议) 代码仓库: https://github.com/soui4js/soui4js 官网: https://soui4js.com

    12 条回复    2023-10-09 18:21:07 +08:00
    pursuer
        1
    pursuer  
       2023-06-25 11:35:22 +08:00
    很多场合语言已经不重要了,生态很重要,node 凭借先发优势,deno 都望尘莫及,quickjs 也就更加不明朗,也许 txiki.js 对此能有所帮助.
    xjqxz2
        2
    xjqxz2  
       2023-06-25 14:14:07 +08:00
    这是啥原理用的是 native 还是 Electron
    setoutsoft
        3
    setoutsoft  
    OP
       2023-06-25 14:37:33 +08:00
    @xjqxz2 native
    setoutsoft
        4
    setoutsoft  
    OP
       2023-06-25 14:44:19 +08:00
    原理很简单。首先要有一个客户端框架,这里用的是我自己开发的 soui4, 然后使用一个 js 引擎,这里用的 quickjs 。然后使用 js 提供的机制将 oui4 的接口导出给 js 用就好了。
    当然具体实现起来,你首先要知道导出哪些接口对于一个 UI 框架是够的,由于通常一个 UI 框架可能需要很多对象参与才能满足客户端开发的需求,随便导出几个函数到 JS 肯定是不行的;然后通常的 UI 框架可能是由各种 C++类实现的,C++又有各种继承,多态特性,JS 导出函数只能接受 C 函数,怎么样将这些 C++对象方便的导出到 JS 也是一个挑战。
    这个项目里实现了一套 qjsbind ,提供了比较方便的导出 C++对象的能力。
    archxm
        5
    archxm  
       2023-06-25 15:32:25 +08:00
    soui ?以前搞 duilib 时,听说过。挺强的
    ysc3839
        6
    ysc3839  
       2023-06-25 20:00:21 +08:00 via Android
    注意:该“开源”代码仅仅是“公开源代码”而不是“开放源代码”,此代码的授权协议包含诸多限制,不是 Open Source Initiative (OSI)认可的“开放源代码协议”。
    setoutsoft
        7
    setoutsoft  
    OP
       2023-06-25 20:08:01 +08:00
    @ysc3839 我可没说是免费的。
    setoutsoft
        8
    setoutsoft  
    OP
       2023-06-25 20:08:31 +08:00
    开源只是让大家可以放心用。不代码免费商用。
    zado
        9
    zado  
       2023-06-26 09:59:05 +08:00
    要是 UI 相关的 xml 能用 json 代替,lua 也可以使用 js 代替就更完美了。
    setoutsoft
        10
    setoutsoft  
    OP
       2023-06-26 10:30:42 +08:00
    @zado UI 布局为什么要用 json 呢? XML 布局最重要的一个好处在于好阅读,json 阅读比 xml 差太多了了。如果说为了解析的性能,soui4js 里使用的 xml 模块支持 xml 的预编译,也就是将 xml 编译成二进制,加载速度比 json 快不知道多少了。
    zado
        11
    zado  
       2023-06-26 12:09:21 +08:00
    @setoutsoft #10 我没有仔细了解,还以为是需要用 js 代码操作这些界面元素的。如果是直接编辑的话的确是 XML 更合适。
    soui
        12
    soui  
       2023-10-09 18:21:07 +08:00
    非常好用。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   997 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:16 · PVG 05:16 · LAX 13:16 · JFK 16:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.