用 JS 开发 PC 原生 APP,走 C++的路,让 C++无路可走 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
setoutsoft
V2EX    程序员

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

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

    折腾了半年,开发的用 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     Solana     3719 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 10:19 PVG 18:19 LAX 03:19 JFK 06:19
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86