Windows On ARM 原生应用少?你可以试试这些改造方法

16:28

相比大家熟知的基于Intel或AMD处理器的传统x86架构Windows,不少人以为WindowsonARM是近几年的新产物。事实上,微软早在2012年就曾通过WindowsRT尝试探索ARM设备,但 ...


相比大家熟知的基于 Intel 或 AMD 处理器的传统 x86 架构 Windows,不少人以为 Windows on ARM 是近几年的新产物。事实上,微软早在 2012 年就曾通过 Windows RT 尝试探索 ARM 设备,但因无法兼容传统 Win32 软件而草草收场。到了 2016 年微软与高通展开合作,通过动态二进制转译技术让 ARM 设备能够兼容传统 x86 应用,Windows on ARM 才算有了能用的基础。

经过近十年的演进,Windows on ARM 如今是否变得更好用了?答案是肯定的。在硬件外设方面,依托系统通用驱动和厂商跟进,绝大多数主流设备已能即插即用;在软件兼容方面,得益于 Windows 11 以及最新的 Prism 仿真引擎,转译运行传统 x86/x64 应用的成熟度也大幅提升,日常使用已非常接近传统 x86 平台。

但「能转译运行」并不等同于是「最佳体验」。相比原生运行,仿真转译不可避免地会带来额外的指令集转换开销,导致 CPU 与内存占用偏高。尽管各大开发商已在逐步推进 ARM64 原生适配,但软件总数依然有限,许多常用国产应用更是长期只提供 x86/x64 版本。

既然官方迟迟未提供原生支持,而我又想提升性能、降低功耗,那么有没有办法改造这些常用应用,让它们在 Windows ARM64 架构下原生运行呢?

借助 AI Agent 等工具的辅助,即便是非开发人员也能轻松分析应用的底层架构并找到改造思路。在盘点了我日常高频使用的软件后,发现许多基于 Web 技术构建的应用,其实只需简单几步就能实现 Windows ARM64 原生运行。

将单页 Web 端直接打包成客户端

不少高频使用的在线服务(如部分社交媒体、轻量网页工具等)并未提供官方的 Windows 桌面客户端。虽然直接在浏览器中打开也能使用,但在动辄几十个标签页中来回翻找不仅繁琐,也容易误关。如果能将这些网页服务直接封装成独立的桌面应用,既能拥有专属的任务栏图标和独立窗口,又几乎不占额外资源。

好在,如今大多数网站都采用了响应式设计,当使用 Google Chrome 或 Microsoft Edge 等 Chromium 内核浏览器访问时,大概率会提示你可以直接将其安装为 PWA(渐进式 Web 应用)。以微博为例,在浏览器中打开移动端网页,地址栏右侧便会出现「安装 微博 Lite」提示,点击安装后,系统不仅会在桌面生成独立图标,后续打开时也会直接以无浏览器边框的独立窗口运行,体验非常清爽。

不过 PWA 依然受限于浏览器本身的进程管理,无法脱离浏览器独立分发,也缺少更深入的窗口定制能力。如果想将任意网页真正打包成一个独立的 Windows ARM64 原生安装包,开源工具 Pake 会是更好的选择。an

熟悉 Pake 的读者可能知道它支持通过 GitHub Actions 在云端免配置打包。不过目前官方的云端工作流主要针对 x86/x64 平台,并未提供 Windows ARM64 的构建选项。因此,要想获得真正的 ARM 原生安装包,我们需要在本地安装 Pake CLI 工具自行编译。

首先在电脑中安装 Node.js、Rust 工具链与 LLVM,这是本地使用 Pake CLI 编译的前置环境:

安装完成后打开 Windows 终端,在 PowerShell 下执行以下命令安装 Pake CLI:

pnpm install -g pake-cli

或者:

npm install -g pake-cli

全局安装完成后,即可调用 CLI 工具创建桌面应用。例如新建一个工作目录,并在该目录下打包 Instagram 客户端:

pake https://www.instagram.com/ --name "Instagram"

 执行命令后,Pake 会自动获取网站图标并开始编译。构建完成后,终端会输出打包好的 .msi 安装包路径(通常位于 npm 全局包目录下):

C:\Users\你的用户名\AppData\Roaming\npm\node_modules\pake-cli\src-tauri\target\aarch64-pc-windows-msvc\release\bundle\msi\

找到并双击该  .msi 文件,即可像安装普通软件一样将其实装到系统中

与动辄占用数百兆内存的客户端相比,基于 Tauri 架构的 Pake 可以直接借助 Windows 系统内置的 WebView2 轻量渲染。生成的应用不仅安装包极小、内存占用低,还能在 ARM 架构下实现真正的免转译原生运行。

Pake CLI 还支持自定义窗口尺寸、指定本地图标、注入自定义样式与脚本等高级功能,具体可查阅 Pake 官方文档,并借助 AI 调整,所以在此不再赘述。

将 Electron 套壳应用改造成 ARM64 原生版本

将网页直接打包的前提是有可用的 Web 地址。但在更多时候,我们手里只有一个官方提供的 x64 安装包,无法直接套用网页封装方案。不过,如果分析这些软件的实现方式就会发现,其中相当一部分并非传统的 Windows C/C++ 原生程序,而是基于 Electron 框架构建的容器化应用。

所以对于这类软件,我们只需替换其底层的运行环境,就能直接将现有的 x64 程序重构成纯正的 ARM64 原生版本。

Notion 就是一个非常典型的 Electron 套壳应用

要改造这类应用,首先需要确认它是否基于 Electron。打开软件的解压目录或安装路径,如果发现以下特征,基本可以判定它就是基于 Electron 的:

  • 根目录包含 locales 文件夹以及大量 .pak 资源文件;
  • 包含记录 Electron 版本号的 version 文件(或 LICENSE.electron.txt);
  • resources 目录下存在打包了核心前端代码的 app.asar 文件。

为什么 Electron 应用可以低成本改造成 ARM64 原生?原因在于其独特的架构设计:

Electron 本质上是由 「运行时外壳(Chromium 渲染内核 + Node.js)」 与 「业务包(app.asar)」 组成的。官方发布的 x64 安装包,仅仅是其外壳编译成了 x64 机器指令;而 app.asar 内部封装的界面与交互逻辑,本质上是跨平台的 JavaScript/HTML/CSS 代码。

只要软件没有依赖特定架构的 C++ 原生扩展(Native Addons),我们只需保留原软件的 app. asar,为其换上一个 ARM64 原生版本的 Electron 外壳,就能让它摆脱转译、直接以原生状态流畅运行。

方法一:客户端免编译换核

整个改造过程本质上就是一次「移花接木」:

  • 获取原应用使用的 Electron 内核版本;
  • 下载对应的 ARM64 原生运行时并移植 app.asar;
  • 将主程序名称、图标及版本信息恢复为原版。

下面以我最常用的原型设计工具「墨刀」为例,演示具体的操作流程。

首先下载最新版墨刀客户端的免安装 ZIP 压缩包,解压到临时目录。使用文本编辑器打开根目录下的 version 文件,确认其所用的 Electron 版本(例如 32.1.0)。

接着从镜像源下载对应版本的 Electron ARM64 预编译包(如 electron-v32.1.0-win32-arm64.zip),解压至新文件夹(例如 modao-win32-arm64)。

将墨刀原包 resources/ 目录下的 app.asar 复制到 modao-win32-arm64/resources/ 目录下(若新目录中存在默认的 default_app.asar,可直接删除或覆盖)。

electron.exe 重命名为原程序名 Mockitt.exe。此时可以尝试直接双击运行,检查墨刀桌面客户端各项功能是否能够正常工作。

虽然应用已能正常运行,但程序图标与版本详情依然显示为 Electron 的默认信息。为了获得与官方客户端一致的体验,我们需要将官方的应用图标与版本信息写回到新的 Mockitt.exe 中。

这里推荐使用可视化资源编辑工具 Resource Hacker 修改:首先将重命名后的 Mockitt.exe 拖入软件窗口,在左侧树状列表中定位到 Icon / Icon Group,右击选择「Replace Icon...」,点击选择原 x64 包下的原版 Mockitt.exe,确认替换后点击左上角「Save」完成图标保存。

会员专属文章,欢迎加入少数派会员。
优质内容
权益周边
会员社群
power+
评论区
全部评论0
成为少数派会员方可评论,立即加入。若已是少数派会员,点击登录
还没有评论,来发表第一个评论吧
全部评论
还没有评论,来发表第一个评论吧
成为少数派会员方可评论,立即加入。若已是少数派会员,点击登录