【文章翻譯】Google Summer of Code 2026 results
【文章內容使用 Gemini 2.5 Flash 自動翻譯產生】
原文:https://dart.dev/blog/google-summer-of-code-2026-results
Google Summer of Code 2026 成果
今天,我們將重點介紹由 Dart 和 Flutter 在 Google Summer of Code 2026 中指導的貢獻者所完成的專案和成果。
Google Summer of Code (GSoC) 計畫旨在吸引全球新開發者參與開源軟體開發。Google 贊助貢獻者在夏季與一個指導開源組織合作進行為期 12 週的程式設計專案。在過去的 20 年中,超過 20,000 名貢獻者參與了 Google Summer of Code。
今年,Dart 和 Flutter 連續第七年作為指導組織參與 Google Summer of Code。我們收到了來自世界各地近 100 份潛在參與者的專案提案。今天,我們將重點介紹今年夏天我們指導的一些專案。貢獻者在這篇文章中描述了他們的專案。
將 WebSocket 和 gRPC 支援加入 Flutter DevTools 網路面板
作者:Yash Hosalli
在開發即時系統時,我注意到開發者體驗中存在一個空白。Flutter DevTools 對 HTTP 請求提供了很好的可見性,但是一旦 WebSocket 連接建立起來,就很難看到實際發生了什麼。框架流、連接生命週期和長時間的活動可能會很快變成一個黑盒子,使即時調試變得令人沮喪。
許多現代應用程式都依賴 WebSocket,但幾乎沒有調試可見性。這個專案將這種缺失的可見性帶入現有的 Dart 和 Flutter 工具棧。我擴展了 dart:io、dart:developer 和 VM Service,以捕獲輕量級連接級別和框架級別的 WebSocket 資料,遵循為 HTTP 分析已建立的架構。目標是讓 WebSocket 調試感覺熟悉,而不是引入全新的分析工作流程。
收集到的資料隨後直接顯示在 DevTools 網路面板中,開發者可以在其中檢查連接、大小、時間戳和生命週期事件。這將 WebSocket 通信轉變為開發者可以實際觀察和理解的內容。
若要了解更多資訊,請查看我的 GSoC 進度追蹤頁面。
FFIgen 的 C++/C 相容性工具
作者:Hassnaa Mohamed Ahmed
本專案的主要目標是擴展 package:ffigen 以自動生成 C++ API 的 Dart FFI 綁定。Dart 可以透過 FFI 套件與 C 和 C 相容的 API 通信,而 FFIgen 可以自動生成這些 API 的 Dart 綁定。然而,C++ 引入了 Dart FFI 無法直接表示的概念,例如類別、建構子和解構子、繼承和原生物件所有權。因此,從 Dart 使用 C++ 函式庫需要額外的膠水程式碼並仔細處理 Dart 物件及其底層 C++ 物件之間的關係。
FFIgen 中的實驗性 C++ 支援透過為 C++ 類別生成 Dart 綁定以及所需的 C++ 膠水程式碼來解決這些挑戰。生成的綁定支援 C++ 類別指標和原生物件生命週期管理,允許 Dart 物件與其底層 C++ 物件互動,同時保留原生所有權語義。這使得從 Dart 使用 C++ 類別成為可能,而無需使用者手動編寫綁定和記憶體管理層。
範例 C++ 標頭:
1 | class Animal { |
生成的 C++ 膠水程式碼:
1 | FFIGEN_EXPORT Animal* Animal_new(int age) { |
生成的 Dart 綁定用法:
1 | // Instantiate the C++ class through the generated constructor wrapper. |
這種方法在 C++ 物件導向 API 和 Dart 的 FFI 模型之間提供了橋樑,同時使生成的綁定盡可能接近原始 C++ API 的語義。
有關更多詳細資訊,請查看 GitHub 上的 GSoC 2026 專案報告。
將 IntelliJ Plugin 從 Weberknecht WebSocket 函式庫遷移出來
作者:Javad Asadi
IntelliJ 的 Dart 和 Flutter Plugin 使用 Weberknecht 函式庫與 Dart Tooling Daemon 和 VM 服務進行通信。Weberknecht 是一個老舊、未維護的函式庫,繼續依賴它不再是一個可行的選擇。
在 GSoC 2026 中,我們決定用 JDK 內建的 WebSocket 客戶端替換這個函式庫。它從 Java 11 開始提供,使我們能夠避免另一個外部依賴。
遷移一次一個服務地進行,首先在 Dart Plugin 中,然後在 Flutter Plugin 中。在每個階段,我嘗試編寫針對 WebSocket 的測試,包括正常路徑和邊緣案例。目標是讓測試在遷移之前和之後都通過。
遷移成功完成。Dart 和 Flutter Plugin 現在都使用 JDK 內建的 WebSocket 客戶端,同時保留了所有工作流程中的現有行為。在最終遷移階段之後,所有對 Weberknecht 的引用——包括其依賴項和捆綁的 JAR 檔案——都從兩個儲存庫中刪除。因此,這些 Plugin 不再依賴於過時的外部 WebSocket 函式庫。
有關此專案的更多資訊可以在我的 專案摘要 gist 中找到。
package:webcrypto 的 Android JCA 後端
作者:M. Fazri Nizar
package:webcrypto 目前隨 Android 應用程式一起提供額外的 BoringSSL 原生函式庫。在 GSoC 2026 期間,我探索了透過 Java Cryptography Architecture (JCA) 和 package:jni 使用 Android 自己的密碼學 API。由於 Android 已經提供了內建的密碼學,利用它可以最終減少應用程式隨附的額外原生程式碼。第一個里程碑是讓 SHA-256 原語正常工作。
在第一個原始功能合併後,我加入了 HMAC 和 AES,接著是 RSA、橢圓曲線操作、HKDF 和安全亂數生成。在整個開發過程中運行套件現有的測試,使我能夠將 JCA 實作與 BoringSSL 和瀏覽器後端進行比較。這些測試還發現了不同提供者之間的差異,特別是在較舊的 Android 版本上關於 AES-GCM 參數和 RSA 私鑰的差異。PBKDF2 仍未解決,因為 Web Crypto 接受原始密碼位元組,而 JCA 的標準 API 接受字元。
JCA 後端實作了現有的介面,這意味著公共 API 保持完全不變。因此,開發人員將能夠受益於減少的應用程式大小而無需更改任何程式碼。
若要了解有關實作和持續進行的工作的更多資訊,請查看我在 GitHub 上的 GSoC 2026 專案報告。
在 Dart DevTools 中檢查原生記憶體
作者:Nourhan H.
在調試涉及 Pointer<X> 的 Dart 程式碼時,調試器通常會顯示無用且模糊的資訊。這迫使開發人員依賴印出語句而不是直接檢查變數。
例如,給定以下程式碼:
1 | import 'dart:ffi'; |
調試器以前顯示:
此外,嘗試檢查指向無效記憶體的指標以前會導致 segmentation fault,使得記憶體檢查不安全。這個問題影響了各種 Pointer<X> 類型,包括基本類型、結構體、聯合體等。
我們解決了這個問題,使記憶體檢查既安全又方便開發人員。
例如,考慮檢查一個包含多個指標類型的容器:
1 | import 'dart:developer'; |
調試器現在顯示:
無效記憶體讀取和 null 指標現在已完全安全地處理。我們整合了低階核心 API,以防止在五個主要作業系統中進行任意記憶體讀取時發生分割錯誤:
- Linux 和 Android:
pread64(/proc/self/mem) - Windows:
ReadProcessMemory - macOS 和 iOS:
mach_vm_read_overwrite
這個修正顯著增強了任何編寫 Dart 程式碼並需要清晰、可靠地了解指標內部發生情況的開發人員的體驗。
有關此專案的更多資訊,請查看 GitHub 上的 GSoC 2026 專案儲存庫。
更多來自 Dart
Dart in Google Summer of Code 2026
我們很高興地宣布,Dart 專案將在 Google Summer of Code 2026 中第七次指導貢獻者!
Google Summer of Code 2025 成果
Google Summer of Code (GSoC) 計畫旨在吸引全球新開發者參與開源軟體開發。Google...