Skip to content

適用於 Kotlin 2025 的 Google 程式碼之夏

本文包含適用於 Kotlin 2025 的 Google 程式碼之夏的專案構想列表以及貢獻者指南

Kotlin 資源:

如果您有任何問題,請透過 [email protected] 聯絡我們

適用於 Google 程式碼之夏 (GSoC) 的 Kotlin 貢獻者指南

開始使用

  1. 查看 GSoC 常見問題計畫公告

  2. 熟悉 Kotlin 語言:

  3. 了解 Kotlin 開源社群:

如何申請

  1. 查看專案構想並選擇您想要進行的專案。
  2. 如果您不熟悉 Kotlin,請閱讀 Kotlin 網站上的入門資訊
  3. 參考 GSoC 貢獻者指南
  4. 透過 GSoC 網站申請。
    • 我們建議您編寫一個與所提議專案相關的可用程式碼範例。您也可以向我們展示任何您特別引以為傲的程式碼範例。
    • 描述您對 Kotlin 感興趣的原因以及您的使用經驗。
    • 如果您參與開源專案,請提供您的貢獻歷史記錄。
    • 如果您有 GitHub、X 帳戶、部落格或技術或科學出版物作品集,也請提供這些參考。
    • 揭露任何由於其他承諾(例如考試和假期)而與 GSoC 時間表發生的衝突。

謝謝您!我們期待閱讀您的申請!

專案構想

建置伺服器協定:新增 Kotlin 支援 [困難,350 小時]

Kotlin 團隊希望將官方 Kotlin 支援擴展到不僅是 Gradle 和 Maven 建置系統, 還包括任何其他建置系統,並以最小的努力在 JetBrains IDE 中原生支援它們。 另一方面,我們還希望在非 JetBrains IDE 中提供基本的 Kotlin 支援 – 這種支援的一部分是能夠從任何支援 Kotlin 的建置系統中獲取 Kotlin 特定的資訊。

這些需求的解決方案可以是建置伺服器協定 (BSP), 它在建置系統和 IDE 之間提供了一個抽象層。

此專案的目標是實作一個原型,該原型使用 BSP 協定從使用者專案中獲取 IntelliJ IDEA 所需的所有資訊, 以便可以在專案中使用 Kotlin 程式碼。為了限制此原型的範圍,使用者專案將使用 Gradle 自動建置。

所需技能

  • Kotlin 知識
  • 了解如何編寫 Gradle 外掛程式
  • 加分項:了解如何編寫 IntelliJ IDEA 外掛程式

可能導師

Yahor Berdnikau, Bálint Hegyi, 和 Reinhold Degenfellner

申請者任務

  • 任務 #1。 您為什麼對此專案感興趣?

  • 任務 #2。 實作練習: 建立一個公開特定任務的 Gradle 外掛程式。在 Kotlin Gradle Plugin 存在的情況下,此任務應檢索所有 Kotlin 來源的結構並輸出它們。 包含測試將是加分項。

在 Kotlin Multiplatform 中支援 Android 和 iOS 目標,用於透過 Firebase 中的 Vertex AI 使用 Gemini [中等,175 小時]

此專案旨在建立一個開源的 Kotlin Multiplatform (KMP) 函式庫,該函式庫至少在 Android 和 iOS 上支援透過 Firebase 中的 Vertex AI 使用 Gemini。 它將展示為現有服務建立 KMP 函式庫的最佳實踐,重點在於適當的生產實作(例如,正確的 API 金鑰管理、使用者管理的 API 金鑰支援和客戶節流)。

預期成果

  • 一個支援現有 Google 服務的新 Kotlin Multiplatform 函式庫
  • 程式碼範例和文件

所需技能

  • Kotlin
  • Kotlin Multiplatform
  • 行動開發 (Android 和 iOS)

可能導師

Matt Dyor 和 Google 團隊

在 Bazel 中新增 Kotlin Multiplatform 支援 [困難,350 小時]

Bazel 對 Kotlin 的支援正在演進,但適當的 Kotlin Multiplatform (KMP) 整合仍然是一個挑戰。 此專案旨在透過解決依賴關係解析問題、增強 rules_kotlinrules_jvm_external 相容性, 並啟用跨平台建置來改進 Bazel 的 KMP 支援

主要改進將側重於處理平台特定依賴關係 (expect/actual 機制)、改進 Gradle 中繼資料支援, 並確保在 Bazel 中為 KMP 提供更順暢的開發者體驗。

預期成果

  • 增強 Bazel 中 Kotlin Multiplatform 的依賴關係解析
  • 改進與 rules_kotlinrules_jvm_external 的整合
  • 在 Bazel 中建立可運作的 KMP 建置設定,以實現無縫的多平台開發

所需技能

  • Kotlin Multiplatform 和 Gradle
  • Bazel 建置系統
  • 依賴關係解析策略

可能導師

Shauvik Roy Choudhary 和 Uber 團隊

Kotlin 語言伺服器 (LSP) [困難,350 小時]

語言伺服器協定 (LSP) 是一個廣泛採用的標準,可跨不同編輯器和 IDE 啟用程式碼智慧功能,例如自動完成、 跳轉到定義和重構。雖然目前沒有官方的 Kotlin LSP 伺服器, 但在社群中對其有顯著需求。一個公開維護、社群驅動的實作可以支援廣泛的使用案例, 包括程式碼遷移、AI 驅動的程式碼協助以及與各種開發環境的無縫整合。

此專案旨在開發一個 Kotlin LSP 實作,確保與主要 LSP 功能的相容性, 並擴展 Kotlin 在開發環境中的可訪問性。

預期成果

開發一個 Kotlin LSP 實作

所需技能

  • Kotlin
  • 語言伺服器協定 (LSP)
  • IDE 的外掛程式或擴充功能開發

可能導師

Shauvik Roy Choudhary 和 Uber 團隊

適用於 Gradle 且具有新 API 的 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 PluginNew Maven Central Publishing,後者已經嘗試採用新的 API。 在申請或社群建立階段,潛在貢獻者需要審查這些實作, 並建議更新現有外掛程式或決定建置新外掛程式或進行分支。 交付成果將包括現有 Maven Central 發布外掛程式的新版本或適用於 Gradle 的新外掛程式。 我們預計實作將採用 Kotlin 或 Java,並具有適當的測試覆蓋率和文件。 額外的交付成果可能包括簡化外掛程式使用的 Kotlin DSL 擴充功能和 Declarative Gradle 擴充功能。

預期成果

  • 已更新的 Maven Central 發布外掛程式或新外掛程式

所需技能

  • Kotlin
  • Gradle
  • Maven 儲存庫

可能導師

Oleg Nenashev 和 Gradle 團隊

改善 Gradle 核心外掛程式中的組態快取和鎖定競爭 [簡單至困難,90 小時至 350 小時]

Gradle 正在開發 Isolated Projects – 一項新功能, 它極大地擴展了組態快取以進一步提高效能,特別是 Android Studio 和 IntelliJ IDEA 同步的效能。 從開發者體驗的角度來看,它是 Gradle 中最受期待的功能之一。

Isolated Projects 的一個問題是 Gradle 核心中的鎖定競爭,外掛程式有時會妨礙平行執行。 我們希望減少鎖定競爭,特別是在 Java、Kotlin、Android 和 Kotlin Multiplatform 生態系統的關鍵 Gradle 建置工具外掛程式中。 歡迎貢獻者根據他們的興趣和所需的專案規模選擇交付成果。

潛在的交付成果包括但不限於:

  • Configuration Cache Report 工具嵌入到 Gradle Profiler 中(或「為其實作一個 GitHub Action」)
  • 在各種專案中對 Gradle 和幾個流行的 Gradle 外掛程式進行性能分析,並在 GHA 上自動化測試套件
  • 確定可以減少鎖定競爭的潛在區域和外掛程式,無論是否使用組態快取
  • 在此期間,為目標外掛程式中 Configuration Cache 相容性的其他領域做出貢獻
  • 實作一些已發現的改進

預期成果

在 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 POMPlugin Compatibility TesterJenkins Bill of Materials 等)的功能對等, 並改善使用 Gradle 開發 Jenkins 外掛程式的開發者體驗。

歡迎貢獻者根據其興趣和所需的專案規模選擇交付成果。

潛在的交付成果包括但不限於:

  • 更新 Gradle JPI 外掛程式並使其符合託管最佳實踐
  • 將 Gradle JPI 外掛程式程式碼從 Groovy 遷移到 Kotlin
  • 為 Jenkins Plugins 實作一個新的約定外掛程式,該外掛程式將涵蓋 Jenkins 外掛程式 Parent POM 的主要功能,並使用 Kotlin 和 Kotlin DSL。 這不僅包括建置外掛程式,還包括根據 Jenkins 最佳實踐進行測試和靜態分析
  • 在最受歡迎的 Gradle 外掛程式(包括 Gradle 外掛程式本身)中採用更新後的外掛程式和/或約定外掛程式
  • 將 Gradle 外掛程式整合到 Plugin Compatibility Tester 和 Bill of Materials 中
  • 為 Jenkins 外掛程式更新的 Gradle 開發流程撰寫文件

預期成果

已更新的 Gradle JPI 外掛程式和/或 Jenkins 的新約定外掛程式,發布於 Jenkins 更新中心和 Gradle 外掛程式入口

所需技能

  • Kotlin DSL
  • Kotlin
  • Gradle
  • Jenkins
  • Java

可能導師

Oleg Nenashev, Stefan Wolf

Kotlin DSL 和 Declarative Gradle 文件範例測試框架 [簡單至中等,90 小時至 175 小時]

許多專案,包括 Gradle,都有大量的 Kotlin DSL 範例和程式碼片段(請參閱 Gradle 文件中的範例)。 針對多個版本測試它們會帶來某些挑戰,因為這些片段通常代表不完整的程式碼, 以求簡潔。我們希望建立一個測試框架,簡化在單元測試框架 (Kotest 或 JUnit 5) 中, 於 GitHub Actions 或 TeamCity 上驗證這些範例。之後,我們也將有興趣對 Declarative Gradle 範例執行相同的操作。

預期成果

在 Gradle 的 Kotlin DSL 中實作可擴展性功能並改進對常見專案整合的支援

所需技能

  • Kotlin
  • Gradle
  • Java
  • 靜態分析

可能導師

Oleg Nenashev, Laura Kassovic

IntelliJ Platform Gradle Plugin – Gradle 報告與平行驗證 [中等,175 小時]

IntelliJ Platform Gradle Plugin 是一個適用於 Gradle 建置系統的外掛程式, 它簡化了建置、測試、驗證和發布基於 IntelliJ 的 IDE 外掛程式的環境配置。 此外掛程式管理建置、測試和驗證步驟,同時跟上 IntelliJ Platform 不斷引入的變化。 IntelliJ Platform Gradle Plugin 被 JetBrains、第三方開發人員和外部公司用於將其工作流程與 JetBrains 工具整合。

預期成果

  • 引入 Gradle 報告,以提供詳細且可配置的驗證任務報告。
  • 利用 Gradle Worker API 啟用 verifyPlugin 任務在多個 IntelliJ Platform 版本上的平行執行,從而縮短任務執行時間。
  • 探索額外的 Gradle 增強功能,以進一步改善外掛程式開發工作流程。

所需技能

  • Kotlin
  • Gradle
  • IntelliJ Platform

可能導師

Jakub Chrzanowski, JetBrains

新增更多 Kotlin OpenRewrite Recipe [中等,175 小時]

OpenRewrite 是一個強大的框架,用於以結構化方式自動執行程式碼遷移和重構。 雖然 OpenRewrite 對 Java 有強大的支援,但 Kotlin 生態系統將受益於更全面的 OpenRewrite recipe 集,以幫助開發人員無縫遷移其程式碼庫。

此專案旨在透過新增更多自動化轉換來擴展 Kotlin OpenRewrite recipe 集合, 例如將基於 Java 的 AutoValue classes 遷移到地道的 Kotlin data classes、 使 Kotlin 程式碼現代化以遵循最佳實踐,以及實現跨 Kotlin 版本的更無縫遷移。 這些 recipe 將幫助 Kotlin 開發人員以最小的人工努力維護乾淨、最新和地道的程式碼庫。

預期成果

  • 開發用於 Kotlin 程式碼遷移的新 OpenRewrite recipe

所需技能

  • Kotlin
  • OpenRewrite 框架
  • Java 到 Kotlin 遷移策略

可能導師

Shauvik Roy Choudhary 和 Uber 團隊

為 Bazel rules_jvm_external 新增 BOM 支援 [困難,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 團隊

針對 Kotlin 的 Gradle 程式碼品質外掛程式提供清晰且可操作的報告 [簡單至中等,90 小時至 175 小時]

Gradle 最近引入了一個新的 Problems API, 允許 Gradle 和第三方外掛程式以統一的方式傳播問題和警告。 此 API 提供清晰且可操作的錯誤報告,並為控制台輸出、專用 HTML 報告和連接的可觀察性工具提供更多見解。 IntelliJ IDEA 或 Android Studio 等 IDE 也可以透過 Gradle 的 API 整合工具訪問詳細資訊, 並可以直接在程式碼編輯器中顯示警告。一些核心功能和外掛程式已經採用了 Problems API:Java 編譯、 依賴項解析錯誤、棄用警告等。我們希望 Kotlin 的程式碼品質外掛程式也能採用此 API;這將顯著 改善十萬多名使用 Gradle 的 Kotlin 開發人員的開發體驗。

在此專案中,我們邀請貢獻者選擇一些 Kotlin 程式碼品質外掛程式,例如 Ktlint、Detekt、Diktat、ArchUnit 或 Checkstyle for Kotlin,並將它們與 Problems API 整合。您也可以著手整合針對使用 Kotlin DSL 定義的 Gradle 建置的類似分析。

預期成果

  • 在上述外掛程式中實作 Problems API 整合

所需技能

  • Kotlin
  • Gradle

可能導師

Oleg Nenashev, Balint Hegyi, Reinhold Degenfellner