【文章內容使用 Gemini 2.0 自動翻譯產生】
Google 暑期程式碼計劃 2024 成果
Google 暑期程式碼計劃 (GSoC) 的重點是讓全球新的開發人員參與開源軟體開發。Google 贊助貢獻者在夏季與輔導開源組織合作進行為期 12 週的程式設計專案。在過去的 19 年裡,已有超過 20,000 名貢獻者參與了 Google 暑期程式碼計劃。
2024 年,Dart 連續第五年作為輔導組織參與 Google 暑期程式碼計劃。今年,我們收到了來自世界各地潛在參與者的 50 份專案提案。今天,我們重點介紹了今年夏天我們輔導的一些專案。貢獻者在此文章中描述了他們的專案。
使用 OkHttp 的 JNI 綁定的 HTTP 客戶端
作者:Anikate De
現有的 Dart HTTP 客戶端無法與原生 Android API 互動,限制了對 KeyStore 私鑰、系統代理和使用者安裝憑證的支援(所有這些都是 Dart 使用者強烈要求的功能)。
開源專案 OkHttp 是 Android 上網路密集型應用程式的熱門選擇,它擁有的 API 可以無縫地實作上述功能。因此,OkHttp 被選為此專案的起點。使用 GSoC 2022 專案,package:jnigen,為多個 OkHttp API 生成了 Dart 的 JNI 綁定。OkHttpClient 與現有的 HTTP 客戶端完全相容,允許從任何替代方案無縫過渡到使用 OkHttpClient。
除了非同步 HTTP 請求之外,package:ok_http 還支援 WebSockets,這需要通過 package:web_socket_conformance_test 中的所有測試。這允許從任何 WebSocket 替代方案平穩過渡。使用 package:ok_http 基準測試的 Flutter 應用程式報告了所有其他 Dart 提供的 HTTP 客戶端中最小的 APK 大小。
在您的 Flutter 專案中利用 OkHttpClient 的優點就像匯入它一樣簡單,並編輯您目前的 Client 物件!
在 GSoC 貢獻者報告 中閱讀更多關於專案的詳細資訊。
Swift2ObjC:ObjC 包裝器產生器
作者:Mohammad Eid
Dart 可以(間接)與 Swift 程式碼通訊。這是透過 ObjC 完成的,因為 Dart 可以使用 ffi 套件與基於 C 語言(如 ObjC)通訊。Swift API 可以使用 @objc
註釋,以請求編譯器為它們產生 ObjC 標頭。使用 ffigen 自動為 Dart 產生 ffi 綁定。對於 Swift,您需要手動註釋您想要與之通訊的 API。
註釋 Swift API 可能比加入 @objc
註釋更複雜。如果您不擁有該模組怎麼辦?如果您無法編輯它,您必須建立一個自訂包裝器來鏡像 API,以便您可以註釋方法。此外,由於 Swift 是一種現代語言,而 ObjC 不是,您可能會遇到一些 API,這些 API 無法直接在 ObjC 中表示,因此您也必須解決這些情況。
Swift2ObjC 為您處理這些事情:它為 Swift 模組產生包裝器,並使用 @objc
註釋它們,同時確保所有 API 都可以在 ObjC 中表示 - 否則 Swift 模組將無法編譯。我在 Medium 上的這篇文章 (文章連結) 中解釋了實作細節(如果您正在考慮為該工具做出貢獻,可以參考這篇文章,因為它仍在積極開發中)。您還可以在 GitHub 上的 swift2objc 儲存庫 中深入研究原始碼。
使用 dartdoc_test 測試文件註釋
作者:Takuma Ichikawa
Dart 允許在文件註釋中嵌入程式碼範例。這是一個有益的做法,因為它也會作為 API 文件發佈,並以套件使用者和開發人員都容易理解的方式展示如何使用套件。但是,文件註釋中的程式碼範例不會被分析或測試,因此很難發現錯誤,並且難以維護。隨著專案和文件的增長,這個問題變得更加嚴重。
因此,對於 GSOC,我開發了 dartdoc_test 套件來解決此類問題。dartdoc_test 工具可以提取和分析文件註釋中的程式碼範例,以發現潛在的錯誤。透過將套件加入到您的專案中,並從命令列運行它,您可以發現所有程式碼範例中的錯誤。您還可以在運行 dart test
命令時,透過加入 dartdoc_test
測試檔案來執行程式碼範例的靜態分析。
透過運行以下兩個命令,您可以輕鬆地在 Dart 專案中試用 dartdoc_test。
1 | dart pub add dev:dartdoc_test |
要了解更多資訊,請在 pub.dev 上查看 dartdoc_test。
使用 FFIgenPad 在 Web 上使用 WASM 產生 dart:ffi 綁定
作者:TheComputerM
Dart 作為一種可以編譯成各種目標的語言,包含了促進與原生二進位制檔案通訊的功能。您可以使用 dart:ffi 等套件與 C API 互動,並使用 package:jni 與 Java 程式碼互動。您只需編寫一些黏合程式碼來指定您正在呼叫的原生函數的類型簽章。
當您使用一個具有許多匯出的函式庫時,問題就出現了,手動編寫太多匯出。這個問題可以使用 ffigen(一個先前的 GSoC 專案)來解決,這是一個僅使用函式庫的標頭檔來產生綁定的工具。要做到這一點,您必須安裝 ffigen,設定所有正確的依賴項和需求,然後(可能)一次又一次地迭代。這並不是無縫且簡單的定義。因此,FFIgenPad 誕生了。
該專案的另一個目標是測試 dart2wasm 編譯器(您可以在 此部落格文章 中找到我的實驗)。當然,我們可以在伺服器上運行 ffigen,並在其上放置一個 UI。相反,我透過將 libclang 和 ffigen 都編譯成 WebAssembly 來確保 FFIgenPad 完全在瀏覽器上運行(當您可以使用客戶端的系統時,為什麼還要使用伺服器進行計算)。
在 https://ffigenpad.surge.sh/ 查看演示,並在 GitHub 上的 我的分支 中查看原始程式碼。我要感謝我的導師 Prerak Mann、Daco Harkes 和 Jackson Gardner,感謝他們在我請求幫助時隨時提供協助。
Google 暑期程式碼計劃 2024 成果 最初發佈在 Dart 上的 Medium,人們在那裡透過突出顯示和回應這個故事來繼續討論。