Google 编程之夏 Kotlin 2025
本文包含 Google 编程之夏 Kotlin 2025 的项目构想列表和贡献者指南。
Kotlin 资源:
- Kotlin GitHub 版本库
- Kotlin Slack 以及 #gsoc Slack 频道
如有任何疑问,请通过 [email protected] 联系我们
Google 编程之夏 (GSoC) Kotlin 贡献者指南
开始
查阅 GSoC 常见问题解答和项目公告。
熟悉 Kotlin 语言:
- 官方 Kotlin 网站是很好的起点。
- 阅读官方文档以更好地理解该语言。
- 查看 JetBrains Academy 上的 Kotlin 课程或 Android 团队的培训选项。
- 关注 Kotlin X 或 Kotlin Bluesky 账号,了解最新新闻和开发进展。
- 查阅 Kotlin YouTube 频道,获取教程、技巧和最新更新。
了解 Kotlin 开源社区:
- 探索一般的 Kotlin 贡献指南。
- 加入 Kotlin Slack 频道,与其他开发者联系并获取任何问题的帮助。
- 加入 #gsoc 频道,向 GSoC 团队提问并获得支持。
如何申请
- 查阅项目构想,选择您想从事的项目。
- 如果您不熟悉 Kotlin,请阅读 Kotlin 网站上的介绍信息。
- 参考 GSoC 贡献者指南。
- 通过 GSoC 网站申请。
- 我们建议您编写与拟议项目相关的可运行代码示例。您还可以向我们展示任何您特别引以为豪的代码示例。
- 描述您对 Kotlin 的兴趣以及您使用 Kotlin 的经验。
- 如果您参与开源项目,请提供您的贡献历史。
- 如果您有 GitHub、Twitter 账号、博客或技术/科学出版物作品集,也请提供。
- 请披露因其他安排(例如考试和假期)与 GSoC 时间线冲突的情况。
谢谢!我们期待阅读您的申请!
项目构想
Build Server Protocol:添加 Kotlin 支持 [高难度,350 小时]
Kotlin 团队希望将官方 Kotlin 支持扩展到 Gradle 和 Maven 构建系统之外,并支持其他任何构建系统,以最小的精力在 JetBrains IDE 中原生支持它们。另一方面,我们还希望在非 JetBrains IDE 中提供基本的 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 Plugin 存在的情况下,应检索所有 Kotlin 源代码的结构并输出。 包含测试将是额外加分项。
在 Firebase 中使用 Vertex AI 为 Gemini 在 Kotlin Multiplatform 中添加对 Android 和 iOS 目标平台的支持 [中等难度,175 小时]
本项目旨在创建一个开源的 Kotlin Multiplatform (KMP) 库,该库至少在 Android 和 iOS 上支持 Firebase 中使用 Vertex AI 的 Gemini。它将展示为现有服务创建 KMP 库的最佳实践,重点是适当的生产实现(例如,正确的 API 密钥管理、用户管理的 API 密钥支持和客户端节流)。
预期成果
- 一个新的 Kotlin Multiplatform 库,支持现有的 Google 服务
- 示例代码和文档
首选技能
- Kotlin
- Kotlin Multiplatform
- 移动开发(Android 和 iOS)
潜在导师
Matt Dyor 和 Google 团队
在 Bazel 中添加 Kotlin Multiplatform 支持 [高难度,350 小时]
Bazel 对 Kotlin 的支持正在发展,但适当的 Kotlin Multiplatform (KMP) 集成仍然是一个挑战。本项目旨在通过解决依赖项解析问题、增强 rules_kotlin
和 rules_jvm_external
兼容性以及启用跨平台构建来改进 Bazel 的 KMP 支持。
主要改进将侧重于处理平台特有的[依赖项](expect/actual 机制)、改进 Gradle 元数据支持,并确保 Bazel 中 KMP 的开发者体验更流畅。
预期成果
- 增强 Bazel 中 Kotlin Multiplatform 的依赖项解析
- 改进与
rules_kotlin
和rules_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 的 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 Plugin 或 New Maven Central Publishing,后者已经尝试采用新的 API。在申请或社区融合阶段,潜在贡献者需要审阅这些实现,并建议更新现有插件或决定构建新插件或进行 Fork。交付物将包括 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 项目的一个问题是 Gradle 核心中的锁竞争,插件有时会妨碍并行执行。我们希望减少锁竞争,尤其是在 Java、Kotlin、Android 和 Kotlin Multiplatform 生态系统的关键 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 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 的 IDE 构建、测试、验证和发布插件的环境配置。该插件管理构建、测试和验证步骤,同时跟上 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 framework
- Java 到 Kotlin 迁移策略
潜在导师
Shauvik Roy Choudhary 和 Uber 团队
为 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 和 Uber 团队
针对 Kotlin 的 Gradle 代码质量插件提供清晰可操作的报告 [易到中等难度,90 小时至 175 小时]
Gradle 最近引入了一个新的 Problems API,它允许 Gradle 和第三方插件以统一的方式传播问题和警告。该 API 提供清晰可操作的错误报告,并提供对控制台输出、专用 HTML 报告和连接的可观测性工具的更多见解。IntelliJ IDEA 或 Android Studio 等 IDE 也可以通过 Gradle 的 API 集成工具访问详细信息,并可以直接在代码编辑器中显示警告。一些核心特性和插件已经采用了 Problems API:Java 编译项、依赖项解析错误、弃用警告等。我们也希望 Kotlin 的代码质量插件采用此 API;这将显著改善使用 Gradle 的 100,000+ Kotlin 开发者的体验。
在这个项目中,我们邀请贡献者选择一些 Kotlin 代码质量插件,例如 Ktlint、Detekt、Diktat、ArchUnit 或 Checkstyle for Kotlin,并将它们与 Problems API 集成。您还可以致力于将类似分析集成到使用 Kotlin DSL 定义的 Gradle 构建中。
预期成果
在上述插件中实现 Problems API 集成
首选技能
- Kotlin
- Gradle
潜在导师
Oleg Nenashev, Balint Hegyi, Reinhold Degenfellner