专栏首页Android虚拟机谈谈桌面应用开发

谈谈桌面应用开发

前几年最流行的应该是移动端应用开发,桌面应用开发是否已经是一份古老的职业。我们公司去年将移动端和PC端开发合并到一个技术通道,叫做客户端开发,我也逐渐承担起一些桌面客户端开发的任务。

我最早做桌面应用,是在本科的时候,参加一个学校的竞赛,在团队做了一个嵌入式应用的上位机(上位机这个名词,似乎也很古老了)。当时什么也不懂,就去图书馆找书籍,自学了C#/WPF,然后在Windows上依葫芦画瓢弄了一个简单的串口+3D的程序。后来又跟着学校的学长去接外包项目,也是在Windows平台上,同样用WPF做了两个CAD软件,其中WPF调用c++开发的dll。这次经历,也让我挣到了人生的第一桶金。后来读研究生,又在实验室用C#鼓捣实验室项目的上位机软件,还因此完成了自己的硕士毕业论文。此后,为了找工作,我就转行去做Android开发了。

直到最近两年,公司业务需要,我又开始被安排去研究PC端的工具。这期间,我也用C#写过Windows程序,后面又因为要做跨平台桌面工具,去调研了Java相关的技术。这次调研后,没有选择Swing/AWT,我选择了JavaFx,因为之前团队有人用过Swing/AWT,做出来的应用似乎不是很好,我们也就想着换一种其他的技术试试。JavaFx似乎是一个很新的技术,尽管官方极力推荐这种新技术,但是很少有商业化的产品使用,而且Oracle JDK在后续版本中去掉了JavaFx,单独作为一个开源项目维护。不过还好,JavaFx做起跨平台桌面程序,还是比较方便的。JavaFx使用fxml定义UI布局,使用css定义控件样式,可以使用Java丰富的第三方库,还能用Gradle编译,打包exe/dmg有专门的gradle插件,对于Android开发者来说,是很容易上手的。因为这次项目,很快就做完了。

但是JavaFx有个缺点,就是自身使用了Prism渲染框架,会和其他的渲染框架产生冲突,如果要接入OpenGL,似乎没有比较合适的方案,因此Java的OpenGL方案JOGL和lwjgl无法很顺利的集成到JavaFx控件中。不过后来发现,有个NativeFx的开源项目,使用了一个取巧的方案,将渲染放在一个独立的进程,然后通过共享内存方式与JavaFx进程进行通信,有点类似Chrome的实现。因为使用的是CPU内存中的RGB数据,只需要绘制到控件上即可,规避了这种问题。好在我们这次的项目,并没有接入OpenGL的需求。

在后续桌面工具的开发过程中,我们也尝试使用比较火的web技术,比如Electron,也确实实现了几个还不错的程序。另外包括VS Code在内的多个大型桌面应用,都是基于Electron开发的。这个技术也是还算靠谱的跨平台方案,还可以使用WebGL进行图形渲染,整体来说,如果是前端开发转PC端,对Javascript比较熟悉,可以尝试。

由于最近业务需要,底层使用c++实现,上层又开始选择新的GUI框架。自然QT被纳入视野。这也是还算传统的一种技术,但是比较强大。我们尝试用QT widgets实现了一个工具,但是效果一般。后面又开始使用QT Quick技术。QT Quick技术也比较新,网上评价也褒贬不一。不过qml写布局的方式还是比较方便的,现在的GUI框架都流行这种声明式的UI实现方法,比如WPF的xaml,JavaFx的fxml,Android的xml等等。qml还有一个比较好用的功能,就是能直接兼容JavaScript语法,因此可以直接在JS中实现业务逻辑,这又有点类似web技术了。

还有一些其他的技术,就是比较传统的方案了,比如MFC、duilib以及OC直接开发Windows/Mac程序,当然对于有跨平台需求的我们,这些方案都被放弃了,毕竟要多个平台单独开发,工作量比较大,人力是个问题。游戏方向还有imgui的技术,这个技术实现的UI就比较简单了,不能满足我们设计师的需求。另外这些年Flutter也开始崛起,似乎也要进入桌面应用领域,但是目前还没有看到什么商业化软件出现。总的来说,技术方案千千万,得找到适合自己的一条。

以上就是我这些年做桌面客户端的一点经验之谈。

本文分享自微信公众号 - Android虚拟机(androidvm),作者:congduan

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 我了解的大厂研发

    毕业到现在两年多了,算上实习,在手机大厂也BAT大厂都待过,不同的公司管理风格和文化差异较大,但是又殊途同归,尤其是研发领域。

    congduan
  • 工作两年半,该做选择了吗?

    最近和几个老同学聊天,谈话间都不约而同谈到了职业发展的问题,而职业发展总是离不开换工作这个话题。

    congduan
  • Android虚拟机一年工作感受

    前段时间一度产生了换工作的想法,原因是自己在手机厂商做了一年的Android底层,却没有获取什么成就感,平日里面工作缺乏激情,希望往上层方向继续发展。也投了几份...

    congduan
  • DD驱动登陆 tim QQ TGP 脚本必懂

    cxt084
  • Linux下的Notepad++编辑器——Notepadqq

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    后端技术漫谈
  • 我的ODP.NET开发之路1

    从Oracle下载了ODTwithODAC112021.zip的安装文件,是Oracle11g的,因为本来电脑上安装了Oracle 10g的客户端,所以在安装的...

    崔文远TroyCui
  • 从MapX到MapXtreme2004[11]-坐标概论

            坐标的问题是Mapxtreme中最郁闷的问题,前几天在这上面耗了很多时间,没有搞定,今天又是不得不钻研,还好,小有心得。         1、...

    用户1075292
  • Mycat(实践篇 - 基于Mysql的水平切分、主从复制、读写分离)

      Mycat作为独立的数据库中间件,我们只需要进行相关的配置,就可以非常方便的帮我们实现水平切分、垂直切分、读写分离等功能,但Mysql的主从复制需要我们通过...

    happyJared
  • ​OpenGL 学习系列---坐标系统

    在前面绘制基本图形中,遇到了很明显的问题,圆形不像圆形,正多边形不像正多边形?就像下面图形一样:

    glumes
  • 你真的会Linux部署吗?

    第一步 上传jdk1.6.0_45 app窗口修改权限,级联下级目录文件,拥有可执行权限

    程序源代码

扫码关注云+社区

领取腾讯云代金券