· RustDesk Team · 發布  · 3 分鐘閱讀

如何讓 Flutter 3.24 在 Windows 7 上執行?

Flutter 自 3.22 起停止支援 Windows 7 / 8,因此需要修改 Flutter 引擎以恢復 Windows 7 支援。

如何讓 Flutter 3.24 在 Windows 7 上執行?

我們最近在 RustDesk 中導入 Flutter 3.24.5,結果程式無法在 Windows 7 上執行。為解決此問題,我們嘗試修改 Flutter Engine。

在 Windows 7 上執行 Flutter 3.24.5 的方案

Flutter 與 Dart 官方已宣布,Dart 3.3 和 Flutter 3.19 是最後支援 Windows 7、8 的版本。因此 Flutter 3.24.5 無法直接在 Windows 7 執行。要恢復支援,必須撤銷 Dart 中的部分變更。

相關連結:官方公告

1. 修正中文環境中的 Platform.localHostname

Dart 原先使用 gethostname API,這會使 Platform.localHostname 在中文環境中失敗。Dart 因而改用僅支援 Windows 8 以上版本的 GetHostNameW API。為讓 Flutter 在 Windows 7 執行,需要撤銷此變更;但這會影響中文環境中的 Platform.localHostname

相關 Issue:Platform.localHostname fails on Chinese Windows

2. 恢復 Windows 7 的展開記錄 API 處理

Dart 曾針對 Windows 7 缺少 RtlAddGrowableFunctionTable API 做相容處理,但之後移除了這項修改。為保持相容,需要撤銷移除該處理的提交。

相關 Commit:Remove Windows7 handling of unwinding records API

3. 修正 Windows 目錄相對符號連結問題

Dart 修正目錄相對符號連結時修改了 File::GetType,卻使用僅支援 Windows 8 以上版本的 PathCchCombineEx API。為恢復 Windows 7 支援,也需要撤銷此修改。

相關 Commit:Fix a bug where relative symlinks to directories did not work on Windows

結論

要讓 Flutter 3.24.5 在 Windows 7 執行,必須撤銷 Dart 的幾項關鍵修改。這會帶來副作用,包括影響中文環境的 Platform.localHostname 與目錄相對符號連結;但對仍依賴 Windows 7 的使用者而言,這些步驟不可或缺。

完整實作請參閱我們的 CI

這裡展示如何在專案中套用修改後的引擎。

分享:
返回部落格