我们如何使用 Electron 构建 Linux 桌面应用

这是一个关于构建一个在 Linux 桌面系统上原生运行的开源电子邮件服务的故事,这要归功于 Electron 框架。
232 位读者喜欢这篇文章。
document sending

Opensource.com

Tutanota 是一款安全的开源电子邮件服务,已作为浏览器、iOS 和 Android 的应用程序提供。客户端代码以 GPLv3 许可证发布,Android 应用程序可在 F-Droid 上获取,以便每个人都可以使用完全无 Google 版本的应用。

因为 Tutanota 专注于开源并在 Linux 客户端上进行开发,我们希望发布一个适用于 Linux 和其他平台的桌面应用程序。作为一个小型团队,我们很快排除了为 Linux、Windows 和 MacOS 构建原生应用程序的想法,并决定使用 Electron 框架来适配我们的应用程序。

对于任何想要快速发布视觉一致的跨平台应用程序的人来说,Electron 都是首选——特别是当已经有一个需要从浏览器 API 的束缚中解放出来的 Web 应用程序时。Tutanota 正是这种情况。

Tutanota 基于 SystemJS 和 Mithril,旨在为所有人提供简单、安全的电子邮件通信。因此,它必须提供用户对任何电子邮件客户端所期望的许多标准功能。

其中一些功能,例如基本推送通知、文本和联系人搜索以及对双因素身份验证的支持,由于现代 API 和标准,在浏览器中很容易提供。其他功能(例如自动备份或不涉及我们服务器的 IMAP 支持)需要对系统资源进行较少限制的访问,这正是 Electron 框架所提供的。

虽然有些人批评 Electron 只是“一个基本的包装器”,但它具有明显的优势

  • Electron 使您能够快速地为 Linux、Windows 和 MacOS 桌面适配 Web 应用程序。事实上,大多数 Linux 桌面应用程序都是使用 Electron 构建的。
  • Electron 使您能够轻松地使桌面客户端的功能与 Web 应用程序的功能对等。
  • 一旦您发布了桌面应用程序,您就可以利用空闲的开发能力来添加特定于桌面的功能,从而增强可用性和安全性。
  • 最后但同样重要的是,这是使应用程序感觉原生且集成到用户系统中,同时保持其特性的好方法。

满足用户需求

在 Tutanota,我们不依赖大型投资者的资金,而是一个社区驱动的项目。我们的团队基于越来越多的用户升级到我们的免费增值服务的付费计划而有机地发展。倾听用户的需求对我们来说不仅重要,而且对我们的成功至关重要。

提供桌面客户端是用户在 Tutanota 中最想要的功能,我们很自豪现在可以为所有用户提供免费的 beta 版桌面客户端。(我们还实现了另一个高度要求的功能——加密数据搜索——但那是另一个话题了。)

我们喜欢为用户提供 Tutanota 签名版本并启用在浏览器中无法实现的功能的想法,例如通过后台进程推送通知。现在我们计划添加更多特定于桌面的功能,例如无需依赖我们的服务器充当代理的 IMAP 支持、自动备份和离线可用性。

我们选择 Electron 是因为它结合了 Chromium 和 Node.js,有望最适合我们的小型开发团队,因为它只需要对我们的 Web 应用程序进行最小的更改。在我们开始时,使用浏览器 API 处理所有事情特别有帮助,随着我们不断进步,我们逐渐用更原生的版本替换这些组件。这种方法在附件下载和通知方面尤其方便。

调整安全性

我们意识到有些人指出 Electron 存在安全问题,但我们发现 Electron 用于微调 Web 应用程序中访问权限的选项非常令人满意。您可以使用 Electron 的 安全文档 和 Luca Carettoni 的 Electron 安全检查清单 等资源,以帮助防止 Web 应用程序中不受信任的内容造成灾难性事故。

实现功能对等

Tutanota Web 客户端从一开始就构建了一个用于进程间通信的可靠协议。我们利用 Web Worker 来保持用户界面 (UI) 渲染的响应性,同时加密和请求数据。当我们开始实现我们的移动应用程序时,这非常方便,移动应用程序使用相同的协议在原生部分和 Web 视图之间进行通信。

这就是为什么当我们开始构建桌面客户端时,诸如原生推送通知、打开邮箱和处理文件系统之类的许多绑定已经存在,因此只需要实现原生 (node) 端。

另一个便利之处是我们使用 Babel transpiler 的构建过程,这使我们能够用现代 ES6 JavaScript 编写整个代码库,并在不同环境之间混合搭配实用程序模块。这使我们能够快速地为基于 Electron 的桌面应用程序适配代码。然而,我们遇到了一些挑战。

克服挑战

虽然 Electron 允许我们相当容易地与不同平台的桌面环境集成,但你不能低估让事情恰到好处所需的时间投入!最终,正是这些小事比我们预期的花费了更多时间,但对于完成桌面客户端项目也至关重要。

需要平台特定代码的地方造成了大部分摩擦

  • 例如,窗口管理和系统托盘在三个平台上仍然以细微不同的方式处理。
  • 将 Tutanota 注册为默认邮件程序并设置自动启动需要深入研究 Windows 注册表,同时确保以 UAC 兼容的方式提示用户获取管理员访问权限。
  • 我们需要使用 Electron 的 API 来实现快捷方式和菜单,以提供诸如复制、粘贴、撤消和重做之类的标准功能。

用户对不同平台上应用程序的某些(有时不直接兼容的)行为的期望使这个过程稍微复杂化。为了使这三个版本感觉原生,需要一些迭代,甚至需要对 Web 应用程序进行一些适度的添加,以提供类似于浏览器中的文本搜索。

总结

我们使用 Electron 的经验总体上是积极的,我们在不到四个月的时间内完成了该项目。尽管有一些相当耗时的功能,但我们对发布 Tutanota Linux 桌面客户端 的 beta 版本如此容易感到惊讶。如果您有兴趣,可以在 GitHub 上深入研究源代码。

标签
Nils Ganther, developer of the Tutanota desktop clients.
我是 Nils,Tutanota 的开发人员之一。在一个再次变得对言论自由和新闻业越来越不友好的世界中,我们需要确保能够分享和表达意见,而不必担心因此受到迫害。对我来说,Tutanota 体现了这种意识。

4 条评论

“事实上,大多数 Linux 桌面应用程序都是使用 Electron 构建的”

来源?

可能来自这里:https://en.wikipedia.org/wiki/Electron_(software_framework)
.........
“使用 Electron 的软件

许多桌面应用程序都是使用 Electron 构建的,包括:[11] ”

对吗?

回复 “事实上,大多数 Linux 桌面” 来自 Iggy (未验证)

回复 “事实上,大多数 Linux 桌面” 来自 Iggy (未验证)

Slack、Discord、Telegram、Signal、Spotify、Visual Studio Code、Atom 等都基于 Electron。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.