Skip to content

Kotlin 2025 年 Google 编程之夏

本文包含 Kotlin 2025 年 Google 编程之夏的项目创意列表贡献者指南

NOTE

Kotlin 资源:

如有任何疑问,请通过 [email protected] 联系我们

适用于 Google 编程之夏(GSoC)的 Kotlin 贡献者指南

开始

  1. 查阅 GSoC 常见问题项目公告

  2. 熟悉 Kotlin 语言:

  3. 了解 Kotlin 开源社区:

如何申请

  1. 查阅项目创意 并选择您希望从事的项目。
  2. 如果您不熟悉 Kotlin,请阅读 Kotlin 网站上的入门信息
  3. 参考 GSoC 贡献者指南
  4. 通过 GSoC 网站 申请。
    • 我们建议您编写与拟议项目相关的工作代码示例。您也可以向我们展示您特别引以为豪的任何代码示例。
    • 描述您对 Kotlin 感兴趣的原因以及您的经验。
    • 如果您参与了开源项目,请提供您的贡献历史。
    • 如果您有 GitHub、Twitter 账户、博客或技术或科学出版物作品集,也请提供参考。
    • 披露因其他承诺(例如考试和假期)与 GSoC 时间线存在的任何冲突。

谢谢!我们期待阅读您的申请!

项目创意

构建服务器协议(BSP):添加 Kotlin 支持 [高难度, 350 小时]

Kotlin 团队希望将官方 Kotlin 支持范围扩展到不仅限于 Gradle 和 Maven 构建系统,还包括任何其他构建系统,并以最小的投入在 JetBrains IDEs 中原生支持它们。另一方面,我们也希望在非 JetBrains IDEs 中提供基本的 Kotlin 支持——这种支持的一部分是能够从任何支持 Kotlin 的构建系统中获取 Kotlin 特有的信息。

满足这些需求的解决方案可能是构建服务器协议(BSP),它在构建系统和 IDE 之间提供了一个抽象层。

该项目的目标是实现一个原型,该原型使用 BSP 协议从用户项目中获取 IntelliJ IDEA 所需的所有信息,以便可以在项目中处理 Kotlin 代码。为了限制此原型的范围,用户项目将使用 Gradle 自动构建。

优先技能

  • 了解 Kotlin
  • 理解如何编写 Gradle 插件
  • 加分项:理解如何为 IntelliJ IDEA 编写插件

可能的导师

Yahor Berdnikau, Bálint Hegyi, and Reinhold Degenfellner

申请人任务

  • 任务 #1。 您为什么对此项目感兴趣?

  • 任务 #2。 实践作业: 创建一个暴露特定任务的 Gradle 插件。在存在 Kotlin Gradle 插件的情况下,此任务应检索所有 Kotlin 源的结构并将其输出。 如果包含测试,将是一个加分项。

在 Kotlin Multiplatform 中使用 Firebase Vertex AI 为 Gemini 支持 Android 和 iOS 目标平台 [中等难度, 175 小时]

本项目旨在创建一个开源的 Kotlin Multiplatform (KMP) 库,该库至少在 Android 和 iOS 上支持使用 Firebase Vertex AI 的 Gemini。它将展示为现有服务创建 KMP 库的最佳实践,重点在于适当的生产实现(例如,正确的 API 密钥管理、用户管理 API 密钥支持和客户端限流)。

预期成果

  • 一个支持现有 Google 服务的新 Kotlin Multiplatform 库
  • 示例代码和文档

优先技能

  • Kotlin
  • Kotlin Multiplatform
  • 移动开发 (Android 和 iOS)

可能的导师

Matt Dyor, and the Google team

在 Bazel 中添加 Kotlin Multiplatform 支持 [高难度, 350 小时]

Bazel 对 Kotlin 的支持正在发展,但正确的 Kotlin Multiplatform (KMP) 集成仍然是一个挑战。本项目旨在通过解决依赖解析问题、增强 rules_kotlinrules_jvm_external 的兼容性以及实现跨平台构建来改进 Bazel 的 KMP 支持

关键改进将侧重于处理特定于平台的依赖项(expect/actual 机制),改进 Gradle 元数据支持,并确保 KMP 在 Bazel 中的开发体验更流畅。

预期成果

  • 增强 Bazel 中 Kotlin Multiplatform 的依赖解析
  • 改进与 rules_kotlinrules_jvm_external 的集成
  • 在 Bazel 中搭建可运行的 KMP 构建环境,以实现无缝的多平台开发

优先技能

  • Kotlin Multiplatform 和 Gradle
  • Bazel 构建系统
  • 依赖解析策略

可能的导师

Shauvik Roy Choudhary, and the Uber team

Kotlin 语言服务器 (LSP) [高难度, 350 小时]

语言服务器协议 (LSP) 是一种广泛采用的标准,它能够在不同的编辑器和 IDE 中实现代码智能功能,例如自动补全、跳转到定义和重构。虽然目前还没有官方的 Kotlin LSP 服务器,但社区对此有很大的需求。一个由社区驱动并公开维护的实现可以支持广泛的用例,包括代码迁移、AI 驱动的代码辅助以及与各种开发环境的无缝集成。

本项目旨在开发一个 Kotlin LSP 实现,确保与关键 LSP 功能的兼容性,并拓宽 Kotlin 在不同开发环境中的可访问性。

预期成果

开发一个 Kotlin LSP 实现

优先技能

  • Kotlin
  • 语言服务器协议 (LSP)
  • IDE 的插件或扩展开发

可能的导师

Shauvik Roy Choudhary, and the Uber team

适用于 Gradle 的 Maven Central 发布插件及新 API [中等难度, 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, and the Gradle team

改进关键 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 插件实现一个新的约定插件,该插件将涵盖 Jenkins 插件 Parent POM 的主要功能,并使用 Kotlin 和 Kotlin DSL。 这不仅包括构建插件,还包括根据 Jenkins 最佳实践进行测试和静态分析
  • 在最流行的 Gradle 插件中(包括 Gradle 插件本身)采用刷新后的插件和/或约定插件
  • 将 Gradle 插件集成到 Plugin Compatibility Tester 和 Bill of Materials 中
  • 记录 Jenkins 插件的更新 Gradle 开发流程

预期成果

更新的 Gradle JPI 插件和/或用于 Jenkins 的新约定插件,并在 Jenkins Update Center 和 Gradle Plugin Portal 上发布

优先技能

  • Kotlin DSL
  • Kotlin
  • Gradle
  • Jenkins
  • Java

可能的导师

Oleg Nenashev, Stefan Wolf

Kotlin DSL 和 Declarative Gradle 文档示例测试框架 [易到中等, 90 到 175 小时]

许多项目(包括 Gradle)都有大量的 Kotlin DSL 示例和代码片段(参见 Gradle 文档中的示例)。针对多个版本测试它们会带来一些挑战,因为为了简洁起见,这些片段通常是不完整的代码。我们希望构建一个测试框架,简化在 GitHub Actions 或 TeamCity 上,通过单元测试框架(Kotest 或 JUnit 5)对这些示例进行验证。之后,我们还会考虑为 Declarative Gradle 示例做同样的事情。

预期成果

在适用于 Gradle 的 Kotlin DSL 中实现可扩展性功能,并改进对常见项目集成的支持

优先技能

  • Kotlin
  • Gradle
  • Java
  • 静态分析

可能的导师

Oleg Nenashev, Laura Kassovic

IntelliJ Platform Gradle 插件 – Gradle 报告和并行验证 [中等难度, 175 小时]

IntelliJ Platform Gradle 插件 是一个用于 Gradle 构建系统的插件,它简化了为 IntelliJ-based IDE 构建、测试、验证和发布插件的环境配置。该插件管理构建、测试和验证步骤,同时跟上 IntelliJ Platform 中引入的持续变化。

JetBrains、第三方开发者和外部公司都使用 IntelliJ Platform Gradle 插件来将其工作流程与 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 类迁移到惯用的 Kotlin 数据类,使 Kotlin 代码现代化以遵循最佳实践,并实现跨 Kotlin 版本的更无缝迁移。这些 recipe 将帮助 Kotlin 开发者以最少的手动工作量维护整洁、最新和惯用的代码库。

预期成果

  • 为 Kotlin 代码迁移开发新的 OpenRewrite recipe

优先技能

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

可能的导师

Shauvik Roy Choudhary, and the Uber team

为 Bazel rules_jvm_external 添加 BOM 支持 [高难度, 350 小时]

Bazel 的 rules_jvm_external 提供了一种结构化的方式来声明外部 Java 依赖项,但它目前缺乏对 Bill of Materials (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, and the Uber team

针对 Kotlin 的 Gradle 代码质量插件的清晰且可操作的报告 [易到中等, 90 到 175 小时]

Gradle 最近引入了一个新的 Problems API,允许 Gradle 和第三方插件以统一的方式传播问题和警告。此 API 提供清晰且可操作的错误报告,并能更深入地了解控制台输出、专用 HTML 报告以及连接的可观测性工具。IntelliJ IDEA 或 Android Studio 等 IDE 也可以通过 Gradle 的 API 集成工具访问详细信息,并直接在代码编辑器中显示警告。一些核心功能和插件已经采用了 Problems API:Java 编译、依赖解析错误、弃用警告等。我们希望 Kotlin 的代码质量插件也采用此 API;这将显著改善使用 Gradle 的 10 万多名 Kotlin 开发者的体验。

在此项目中,我们邀请贡献者选择一些 Kotlin 代码质量插件,例如 Ktlint、Detekt、Diktat、ArchUnit 或 Checkstyle for Kotlin,并将其与 Problems API 集成。您还可以为使用 KotlinDSL 定义的 Gradle 构建集成类似的分析。

预期成果

  • 在上述插件中实现 Problems API 集成

优先技能

  • Kotlin
  • Gradle

可能的导师

Oleg Nenashev, Balint Hegyi, Reinhold Degenfellner