Google 程式碼之夏與 Kotlin 2025
本文包含適用於 Google 程式碼之夏與 Kotlin 2025 的專案構想清單,以及貢獻者指南。
Google 程式碼之夏 (GSoC) 的 Kotlin 貢獻者指南
開始使用
熟悉 Kotlin 語言:
- 官方 Kotlin 網站 是個很好的起點。
- 閱讀官方文件以更深入地了解該語言。
- 參考 JetBrains Academy 上的 Kotlin 課程或 Android 團隊的培訓選項。
- 關注 Kotlin X 或 Kotlin Bluesky 帳號,以獲取最新消息和發展。
- 查看 Kotlin YouTube 頻道 以獲取教學、技巧和最新更新。
了解 Kotlin 開源社群:
- 探索一般的 Kotlin 貢獻指南。
- 加入 Kotlin Slack 頻道 以與其他開發人員聯繫,並獲得任何問題的幫助。
- 加入 #gsoc 頻道 以提問並獲得 GSoC 團隊的支援。
如何申請
- 查閱專案構想並選擇您想要進行的專案。
- 如果您不熟悉 Kotlin,請閱讀 Kotlin 網站上的介紹資訊。
- 參考 GSoC 貢獻者指南。
- 透過 GSoC 網站 申請。
- 我們建議您撰寫與提案專案相關的程式碼範例。您也可以向我們展示任何您特別引以為豪的程式碼範例。
- 描述您對 Kotlin 感興趣的原因以及您的使用經驗。
- 如果您參與開源專案,請提供您的貢獻歷史。
- 如果您有 GitHub、Twitter 帳號、部落格或技術/科學出版物作品集,也請一併參考。
- 披露任何因其他承諾(例如考試和假期)而與 GSoC 時間軸衝突的情況。
謝謝!我們期待閱讀您的申請!
專案構想
建置伺服器協定:新增 Kotlin 支援 [困難,350 小時]
Kotlin 團隊希望不僅擴展對 Gradle 和 Maven 建置系統的官方 Kotlin 支援,還希望支援任何其他建置系統,並在 JetBrains IDEs 中以最小的努力原生支援它們。另一方面,我們也希望在非 JetBrains IDEs 中提供基本的 Kotlin 支援——這種支援的一部分是能夠從任何支援 Kotlin 的建置系統中獲取 Kotlin 特定資訊。
這些要求的解決方案可能是 建置伺服器協定 (Build Server Protocol) (BSP),它在建置系統和 IDE 之間提供了一個抽象層。
該專案的目標是實作一個原型,該原型使用 BSP 協定從使用者專案中獲取 IntelliJ IDEA 所需的所有資訊,以便可以在專案中處理 Kotlin 程式碼。為了限制此原型的範圍,使用者專案將使用 Gradle 自動建置。
偏好技能
- 熟悉 Kotlin
- 了解如何撰寫 Gradle 外掛程式
- 加分:了解如何撰寫 IntelliJ IDEA 外掛程式
可能指導者
Yahor Berdnikau, Bálint Hegyi, 和 Reinhold Degenfellner
申請者任務
任務 #1。 您為什麼對此專案感興趣?
任務 #2。 練習作業: 建立一個 Gradle 外掛程式,它公開一個特定任務。該任務應在存在 Kotlin Gradle 外掛程式的情況下,檢索所有 Kotlin 原始碼結構並輸出它們。 包含測試會是加分項。
在 Kotlin 多平台中使用 Firebase 的 Vertex AI 支援 Gemini 的 Android 和 iOS 目標 [中等,175 小時]
該專案旨在建立一個開源的 Kotlin 多平台 (KMP) 函式庫,該函式庫至少在 Android 和 iOS 上支援透過 Firebase 的 Vertex AI 使用 Gemini。它將展示為現有服務建立 KMP 函式庫的最佳實踐,重點關注適當的生產環境實作(例如,正確的 API 密鑰管理、使用者管理 API 密鑰支援以及用戶端節流)。
預期成果
- 一個支援現有 Google 服務的新 Kotlin 多平台函式庫
- 範例程式碼和文件
偏好技能
- Kotlin
- Kotlin 多平台
- 行動開發 (Android 和 iOS)
可能指導者
Matt Dyor 和 Google 團隊
在 Bazel 中新增 Kotlin 多平台支援 [困難,350 小時]
Bazel 對 Kotlin 的支援正在發展,但適當的 Kotlin 多平台 (KMP) 整合仍然是一個挑戰。該專案旨在透過解決依賴解析問題、增強 rules_kotlin
和 rules_jvm_external
的相容性以及啟用跨平台建置來改進 Bazel 的 KMP 支援。
主要改進將側重於處理平台特定依賴(expect/actual 機制)、改進 Gradle 中繼資料支援,並確保 Bazel 中 KMP 的開發者體驗更流暢。
預期成果
- 增強 Bazel 中 Kotlin 多平台的依賴解析
- 改進與
rules_kotlin
和rules_jvm_external
的整合 - 在 Bazel 中建立可運作的 KMP 建置設定,以實現無縫多平台開發
偏好技能
- Kotlin 多平台和 Gradle
- Bazel 建置系統
- 依賴解析策略
可能指導者
Shauvik Roy Choudhary 和 Uber 團隊
Kotlin 語言伺服器 (LSP) [困難,350 小時]
語言伺服器協定 (LSP) 是一個廣泛採用的標準,它支援跨不同編輯器和 IDEs 的程式碼智慧功能,例如自動完成、跳轉定義和重構。儘管目前沒有官方的 Kotlin LSP 伺服器,但社群對它的需求很大。公開維護、社群驅動的實作可以支援廣泛的使用案例,包括程式碼遷移、AI 驅動的程式碼輔助以及與各種開發環境的無縫整合。
該專案旨在開發一個 Kotlin LSP 實作,確保與關鍵 LSP 功能的相容性,並擴大 Kotlin 在開發環境中的可訪問性。
預期成果
開發 Kotlin LSP 實作
偏好技能
- Kotlin
- 語言伺服器協定 (LSP)
- IDEs 的外掛程式或擴充功能開發
可能指導者
Shauvik Roy Choudhary 和 Uber 團隊
使用新 API 在 Gradle 中發佈 Maven Central 外掛程式 [中等,175 小時]
Maven Central 是最受歡迎的 Maven 儲存庫之一,用於發佈專注於 JVM 的函式庫和專案。它被 Apache Maven 或基於 Gradle 的開源專案積極使用,並且基於 Sonatype Nexus v2,等待遷移到新版本。目前正在將開源專案遷移到新的 Maven Central 實例,該實例具有非常不同的 API 實作,並且在建置工具外掛程式中需要特殊支援。開發一個與新的 Maven Central 發佈 API 相容的 Gradle 外掛程式將幫助使用 Gradle 建置的函式庫作者在新流程中獲得流暢的體驗。
目前,Gradle 中有 Maven Central 發佈外掛程式的多個實作,例如 Maven Publish Plugin 或 New Maven Central Publishing,後者已經嘗試採用新的 API。在申請或社群連結階段,潛在貢獻者需要審查這些實作,並建議更新現有外掛程式,或者決定建置一個新的外掛程式或分叉。交付項目將包括 Maven Central 發佈現有外掛程式的新版本或 Gradle 的新外掛程式。我們預計實作將採用 Kotlin 或 Java,並具有適當的測試覆蓋率和文件。額外的交付項目可能包括簡化外掛程式使用的 Kotlin DSL 擴充功能和宣告式 Gradle (Declarative Gradle) 擴充功能。
預期成果
- 更新後的 Maven Central 發佈外掛程式或一個新外掛程式
偏好技能
- Kotlin
- Gradle
- Maven 儲存庫
可能指導者
Oleg Nenashev 和 Gradle 團隊
改善關鍵 Gradle 外掛程式中的配置快取和鎖定爭用 [從易到難,90 小時到 350 小時]
Gradle 正在開發 隔離專案 (Isolated Projects) —— 一項新功能,它極大地擴展了配置快取,以進一步提高性能,特別是 Android Studio 和 IntelliJ IDEA 同步的性能。從開發者體驗的角度來看,這是 Gradle 中最受期待的功能之一。
隔離專案的一個問題是 Gradle 核心中的鎖定爭用,外掛程式有時會妨礙平行執行。我們希望減少鎖定爭用,特別是在 Java、Kotlin、Android 和 Kotlin 多平台生態系統的關鍵 Gradle 建置工具外掛程式中。歡迎貢獻者根據他們的興趣和預期的專案規模選擇交付項目。
潛在交付項目包括但不限於:
- 將 配置快取報告 (Configuration Cache Report) 工具嵌入到 Gradle 效能分析器 (Profiler) 中(或「為其實作一個 GitHub Action」)
- 在各種專案中對 Gradle 和幾個流行 Gradle 外掛程式進行效能分析,並在 GHA 上自動化測試套件
- 確定可以減少鎖定爭用的潛在領域和外掛程式,無論是否使用配置快取
- 順便為目標外掛程式中 配置快取相容性 的其他領域做出貢獻
- 實作一些發現的改進
預期成果
實作 Gradle 的 Kotlin DSL 中的擴充功能,並改善對常見專案整合的支援
偏好技能
- Kotlin
- Gradle
- Java
- 性能分析
- 效能分析
可能指導者
Oleg Nenashev, Laura Kassovic
用於開發 Jenkins 外掛程式的 Gradle 慣例外掛程式 [從易到難,90 小時到 350 小時]
有超過 50 個 Jenkins 外掛程式是使用 Gradle 實作的。有一個 Gradle JPI 外掛程式,但它不完全符合 Jenkins 託管要求,需要更新。在這個專案構想中,目標是恢復 Jenkins 的 Gradle 開發流程,與 Apache Maven 流程(Parent POM、外掛程式相容性測試器 (Plugin Compatibility Tester)、Jenkins 物料清單 (Jenkins Bill of Materials) 等)達到功能一致,並改善使用 Gradle 開發 Jenkins 外掛程式的開發者體驗。
歡迎貢獻者根據他們的興趣和預期的專案規模選擇交付項目。
潛在交付項目包括但不限於:
- 更新 Gradle JPI 外掛程式並使其符合託管最佳實踐
- 將 Gradle JPI 外掛程式程式碼庫從 Groovy 遷移到 Kotlin
- 為 Jenkins 外掛程式實作一個新的慣例外掛程式,該外掛程式將涵蓋 Jenkins 外掛程式 Parent POM 的主要功能,並使用 Kotlin 和 Kotlin DSL。這不僅包括建置外掛程式,還包括根據 Jenkins 最佳實踐進行測試和靜態分析。
- 在最流行 Gradle 外掛程式(包括 Gradle 外掛程式本身)中採用更新後的外掛程式和/或慣例外掛程式
- 將 Gradle 外掛程式整合到外掛程式相容性測試器和物料清單中
- 撰寫 Jenkins 外掛程式更新後的 Gradle 開發流程文件
預期成果
更新後的 Gradle JPI 外掛程式和/或 Jenkins 的新慣例外掛程式,發佈在 Jenkins 更新中心和 Gradle 外掛程式入口
偏好技能
- Kotlin DSL
- Kotlin
- Gradle
- Jenkins
- Java
可能指導者
Oleg Nenashev, Stefan Wolf
Kotlin DSL 和宣告式 Gradle 文件範例測試框架 [從易到中,90 小時到 175 小時]
許多專案,包括 Gradle,都有大量的 Kotlin DSL 範例和程式碼片段(請參見 Gradle 文件中的範例)。針對多個版本測試它們帶來了某些挑戰,因為為了簡潔起見,這些片段通常代表不完整的程式碼。我們希望建置一個測試框架,該框架可以簡化在 GitHub Actions 或 TeamCity 上的單元測試框架(Kotest 或 JUnit 5)中驗證這些範例。之後我們將有興趣對宣告式 Gradle (Declarative Gradle) 範例做同樣的事情。
預期成果
實作 Gradle 的 Kotlin DSL 中的擴充功能,並改善對常見專案整合的支援
偏好技能
- Kotlin
- Gradle
- Java
- 靜態分析
可能指導者
Oleg Nenashev, Laura Kassovic
IntelliJ Platform Gradle 外掛程式 – Gradle 報告和平行驗證 [中等,175 小時]
IntelliJ Platform Gradle 外掛程式 是一個用於 Gradle 建置系統的外掛程式,它簡化了環境配置,用於建置、測試、驗證和發佈基於 IntelliJ 的 IDEs 的外掛程式。該外掛程式管理建置、測試和驗證步驟,同時跟上 IntelliJ Platform 中不斷引入的變化。IntelliJ Platform Gradle 外掛程式被 JetBrains、第三方開發人員和外部公司用於將其工作流程與 JetBrains 工具整合。
預期成果
- 引入 Gradle 報告以提供詳細、可配置的驗證任務報告。
- 利用 Gradle Worker API 啟用
verifyPlugin
任務針對多個 IntelliJ Platform 版本的平行執行,從而減少任務執行時間。 - 探索額外的 Gradle 增強功能,以進一步改善外掛程式開發工作流程。
偏好技能
- Kotlin
- Gradle
- IntelliJ Platform
可能指導者
Jakub Chrzanowski, JetBrains
新增更多 Kotlin OpenRewrite 配方 [中等,175 小時]
OpenRewrite 是一個強大的框架,用於以結構化方式自動化程式碼遷移和重構。儘管 OpenRewrite 對 Java 有強大的支援,但 Kotlin 生態系統將受益於更全面的 OpenRewrite 配方集,以幫助開發人員無縫遷移其程式碼庫。
該專案旨在透過新增更多自動化轉換來擴展 Kotlin OpenRewrite 配方集合,例如將基於 Java 的 AutoValue 類別遷移到慣用的 Kotlin 資料類別、使 Kotlin 程式碼現代化以遵循最佳實踐,以及實現 Kotlin 版本之間更無縫的遷移。這些配方將幫助 Kotlin 開發人員以最少的手動工作維護乾淨、最新和慣用的程式碼庫。
預期成果
- 開發用於 Kotlin 程式碼遷移的新 OpenRewrite 配方
偏好技能
- Kotlin
- OpenRewrite 框架
- Java 到 Kotlin 遷移策略
可能指導者
Shauvik Roy Choudhary 和 Uber 團隊
新增 BOM 支援到 Bazel 的 rules_jvm_external
[困難,350 小時]
Bazel 的 rules_jvm_external
提供了一種結構化的方式來宣告外部 Java 依賴,但它目前缺乏對物料清單 (BOM) 檔案的適當支援。BOM 檔案在 Maven 和 Gradle 中被廣泛用於以一致的方式管理依賴,而無需開發人員指定單獨的版本。該專案旨在透過新增 BOM 支援來增強 rules_jvm_external
,允許開發人員在 Bazel 中使用基於 BOM 的依賴解析。該專案可能涉及為現有的開源工作做出貢獻,或直接在 rules_jvm_external
中實作 BOM 支援,確保與廣泛使用的依賴管理方法相容。
預期成果
- 在 Bazel 的
rules_jvm_external
中實作 BOM 支援 - 改善 Bazel 使用者的依賴解析和可用性
- 關於在 Bazel 中使用 BOM 支援的文件和範例
偏好技能
- Starlark (Bazel 的腳本語言)
- Bazel 建置系統
- 依賴解析策略
可能指導者
Shauvik Roy Choudhary 和 Uber 團隊
乾淨且可操作的 Gradle 程式碼品質外掛程式報告 (針對 Kotlin) [從易到中,90 小時到 175 小時]
Gradle 最近引入了一個新的 Problems API,它允許 Gradle 和第三方外掛程式以統一的方式傳播問題和警告。該 API 提供乾淨且可操作的錯誤報告,並提供對控制台輸出、專用 HTML 報告和連接的可觀察性工具的更多洞察。諸如 IntelliJ IDEA 或 Android Studio 等 IDEs 也可以透過 Gradle 的 API 整合工具存取詳細資訊,並可以直接在程式碼編輯器中顯示警告。幾個核心功能和外掛程式已經採用了 Problems API:Java 編譯、依賴解析錯誤、棄用警告等。我們希望 Kotlin 的程式碼品質外掛程式也能採用此 API;這將顯著改善使用 Gradle 的 10 萬多名 Kotlin 開發者的開發者體驗。
在此專案中,我們邀請貢獻者選擇多個 Kotlin 程式碼品質外掛程式,例如 Ktlint、Detekt、Diktat、ArchUnit 或 Kotlin 的 Checkstyle,並將它們與 Problems API 整合。您也可以為使用 Kotlin DSL 定義的 Gradle 建置整合類似的分析。
預期成果
- 在上述外掛程式中實作 Problems API 整合
偏好技能
- Kotlin
- Gradle
可能指導者
Oleg Nenashev, Balint Hegyi, Reinhold Degenfellner