Kotlin 技术月报 | 2025 年 7 月

为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。

月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。

微信内限制外链点击,大家可以点击左下角阅读原文,支持外链查看。

最新动态

Kotlin 近期动态总结

Kodee's Kotlin Roundup: A Carefully Curated June Edition

又到了一期《Kodee 的 Kotlin 综述》时间!本文总结了 Kotlin 近期的动态,具体包括以下内容:

  • Kotlin 2.2.0 发布:带来新的稳定语言特性、工具更新、跨平台性能提升以及大量重要修复。可通过官方博客文章深入了解。
  • KotlinConf 2025 相关:会议演讲和照片已上线,错过现场的开发者可在线重温。会议期间探讨了利用 Kotlin 可空性模型泛化为受限联合类型,实现更智能的错误处理。此外,会议闭幕小组讨论未能涵盖所有问题,后续博客文章针对 Kotlin 多平台热门问题给出解答。
  • Kotlin 在不同领域的进展:在 AI 开发领域,推出新文档页面展示 Kotlin 在实际 AI 场景的应用,并可通过 Kotlin - AI - Examples 仓库了解基于 Kotlin 的 AI 框架 Koog;服务器端开发方面,Ktor 3.2.0 新增依赖注入和 HTMX 模块、支持 Gradle 版本目录、自动配置反序列化等功能;Kotlin 多平台结合 Compose Multiplatform 实现热重载,能加快 UI 代码迭代。
  • 学习资源与其他动态:LinkedIn Learning 推出新的 Kotlin 多平台课程,帮助开发者掌握相关技术。Gradle 9.0.0 RC1 发布,更新到 Kotlin 2.1。KotlinConf 2025 上开展了猜测 Kotlin 开发者薪资的游戏。同时,介绍了一系列 Kotlin 相关的 YouTube 精彩视频,涵盖 Kotlin Notebook 升级、Kotlin 在麦当劳的应用、自制 NES 模拟器等内容。

OkHttp 5.0 版本发布

OkHttp 5.0.0 于 2025 年 7 月 2 日发布,是自 2023 年以来的首个稳定版本,更新内容主要包括以下几个方面:

  • 分离 JVM 和 Android 工件,支持平台特定优化
  • MockWebServer 更新:新坐标 / 包名,移除 JUnit 4 依赖,新增 JUnit 5 支持(旧版本仍可使用)
  • 支持 Happy Eyeballs(RFC 8305),并发尝试 IPv4/IPv6 连接
  • 优化 Kotlin API(可省略构建器),支持 GraalVM
  • 依赖升级:Okio 3.15.0、Kotlin 2.2.0
  • 修复:与 Sentry SDK 兼容问题、mockwebserver 查询数据保留问题

Koog 0.3.0 发布

Building Better Agents: What's New in Koog 0.3.0

Koog 0.3.0 于 2025 年 7 月 16 日发布,聚焦提升 AI Agent 的耐用性、效率及兼容性,核心更新如下:

  • 状态持久化:支持从本地磁盘、S3 或数据库保存 / 恢复代理状态,含检查点功能可回滚,保障容错性。
  • 存储与检索优化:支持持久向量存储,可构建 RAG 管道,模块化适配多种格式与后端。
  • 可观测与合规:集成 OpenTelemetry 实现追踪与监控,内置输出审核功能,适配监管环境。
  • 并行执行:采用 MapReduce 风格 API,支持节点并行运行,加速多步骤流程。
  • 生态适配:增强 Spring 集成,提供自动配置的 LLM 客户端;支持 ReAct 推理、图像输入、WASM 部署及 Amazon Bedrock。

使用 Fuzzing 对 Kotlin 编译器进行模糊测试

Breaking to Build: Fuzzing the Kotlin Compiler

kotlinx.fuzz,这是一款用于发现 Kotlin 程序中错误的强大工具。由于 Kotlin 编译器本身就是一个 Kotlin 程序,我们也可以使用模糊测试来对其进行测试。本文主要介绍了 JetBrains 是如何利用 Fuzzing 对 Kotlin 编译器进行模糊测试的,具体包括以下内容:

  • 解释模糊测试是什么,以及它与传统编译器测试技术相比如何。
  • 展示 JetBrains是如何与代尔夫特理工大学合作,将其应用于Kotlin编译器的。
  • 分享 JetBrains 发现并修复的实际错误,包括在新的 K2 编译器中发现的错误。

精选博客

构建你的第一个 Kotlin 多平台应用(2025 指南)

Building Your First Kotlin Multiplatform App: From Setup to iOS App Store with Compose Multiplatform (2025 Guide)

本文是关于用 Kotlin Multiplatform(KMP)构建跨平台应用 Kyklos 的指南

  • 背景与优势:基于Kotlin 2.2.0版本,借助稳定的Compose Multiplatform for iOS,可实现95%的代码共享,覆盖数据库、业务逻辑和UI,高效构建原生Android和iOS应用。
  • 开发基础:需搭建包含Android Studio、Xcode、JDK、Kotlin等的开发环境,通过官方向导或Android Studio创建KMP项目,并配置Kotlin、Compose Multiplatform、SQLDelight等核心依赖。
  • 架构与实现:采用Clean Architecture分层架构,划分表示层、领域层和数据层;通过 SQLDelight 完成跨平台数据库设置,按架构实现各层业务逻辑;使用Compose Multiplatform构建UI,包括主题、可复用组件和屏幕级组件。
  • 注意事项与操作:需关注 iOS 开发中的兼容性问题,如字符串格式化和 UUID 生成方式;介绍了项目构建、运行及 iOS 模拟器相关操作。

Koin 到底是什么?服务定位器还是依赖注入?

在 Kotlin 与 Android 开发社区中,关于 Koin 究竟属于服务定位器(Service Locator,简称 SL),还是依赖注入(Dependency Injection,简称 DI) 的问题,始终存在争议。简短明确的回答是:Koin 是为 Kotlin 设计的现代、轻量级的依赖注入框架,但同时也支持服务定位器模式。

  • 服务定位器(SL)是一种设计模式,通过提供一个中心化的注册表或"定位器",让类可以根据需要从中获取服务或对象,而非直接注入依赖。 虽然这种模式可以简化依赖的获取,但容易导致代码紧密耦合并且缺乏编译时检查,导致测试变得困难,并可能带来运行时错误。
  • 依赖注入(DI)则是在对象创建时将依赖项注入对象,并将管理对象依赖的责任交给外部容器。 从而提升代码的解耦性、可维护性和可测试性,更易于编写单元测试和进行后期维护。
kotlin 复制代码
// 纯依赖注入:依赖通过构造函数明确声明
class UserRepository(
    privateval apiService: ApiService,
    privateval database: UserDao
) {
    fun getUsers() = database.getAllUsers()
}

// Koin 模块定义
val appModule = module {
    single<ApiService> { ApiServiceImpl() }
    single<UserDao> { get<AppDatabase>().userDao() }
    single<UserRepository> { UserRepository(get(), get()) }  // DI:显式注入依赖
    // 或者使用更简洁的 singleOf
    singleOf(::UserRepository)
}

class MainActivity : AppCompatActivity() {
    // 服务定位器:主动从容器中获取依赖
    private val viewModel: MainViewModel by inject()
    private lateinit var repository: UserRepository
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 依赖在首次访问时才被解析
        repository = get() // 通过 get() 立即获取实例
    }
}

Kotlin 协程:Channel 与 Flow 该如何选?

在 Kotlin 协程的异步编程世界里,Channel 和 Flow 是处理数据流的重要工具,它们有着不同的设计理念与适用场景,本文对比二者功能与应用场景,详细讲解 Channel 的使用步骤及注意事项。

  • 核心定位:Channel和Flow是Kotlin协程处理数据流的关键工具,设计理念与适用场景不同。
  • 特性与选型
    • Channel:用于协程间点对点通信,适用于生产者-消费者模式,强调即时性,"一对一"数据传递、串行异步任务及事件驱动场景优先用。
    • Flow:将异步数据抽象为流,支持冷热流和多订阅者广播,操作符丰富,数据流处理、多订阅者共享数据和懒加载场景优先用。
  • Channel使用:需创建、发送与接收数据,有Rendezvous、Buffered、Conflated、Unlimited四种类型,各有特性与适用场景。
  • 实战与高级用法:在安卓Snackbar事件传递、多协程任务拆分等场景有应用;支持扇入/扇出、双向通信等高级用法。
  • 异常处理:需通过try-catch、SupervisorJob、出错及时关闭Channel等方式处理异常,确保通信稳定。

Kotlin/Native 编译流程浅析

本文基于 Kotlin 2.2 版本,介绍了 Kotlin/Native 编译的主要流程

  • 入口阶段
    • 从 K2Native.main() 开始,经过 doExecute() 和 KonanDriver.run()
    • 在 splitOntoTwoStages() 中决定采用两阶段编译
  • 第一阶段:KLib 生成
    • FIR 生成:源代码 → 前端中间表示
    • IR 转换:FIR → 中间表示
    • IR 降级:预序列化处理
    • 序列化:生成包含 ir/, linkdata/, manifest 等的 KLib 文件
  • 第二阶段:二进制生成
    • 前端分析:反序列化 KLib 获取模块描述符
    • IR 反序列化:从 KLib 重建 IR 模块
    • IR 降级:更抽象、高级的语言特性分解成更基础的元素
    • 代码生成:IR → LLVM IR 转换
    • BC 生成:LLVM IR 序列化为 Bitcode
    • 编译链接:BC → .o → 最终可执行文件

精选视频

Kotlin 2.2.0 新特性系列视频

Kotlin 2.2.0 版本已于近期正式发布,本系列视频将带您全面了解这一版本的各项新特性。

社区活动

近期深圳、北京 Kotlin 用户组 Meetup 内容回放 |社区分享

  • 深圳 Kotlin 用户组线下 Meetup 在 7 月 4 日下午圆满举行。本次活动由 4 场来自社区的技术实践分享组成,四位讲师分别从不同角度分享了各自 Kotlin 技术的落地经验,有官方文档本地化项目 Open AIDoc 的开发流程解析、Flutter + KMP 跨平台开发实践、Koin 依赖注入的优化方案,还有将 Kotlin 代码编译为 C# 语言的实验性探索。四场分享带给大家不同的视野,为我们共同呈现了一场覆盖技术纵深与创新边界的知识盛宴。
  • 在更早之前的上个月,北京 Kotlin 用户组在美团北京总部也举办了一场线下 Meetup。二十余位社区开发者来到现场,也有数十名小伙伴线上实时同步参与。借着一年一度 KotlinConf 刚刚落幕的契机,大家共同盘点了 Kotlin 语言和生态范围内众多令人兴奋的更新与变化。更有来自 JetBrains 欧洲团队的技术专家贡献了协程技巧的专题分享,通过面对面的交流问答,加深大家对 Kotlin 的理解,更高效地使用 Kotlin。
相关推荐
小墙程序员几秒前
一文了解 AGP8 的使用
android·gradle
bytebeats4 小时前
移动开发中特性开关的最佳实践
android·firebase
bytebeats4 小时前
Android 开发者的 Jetpack Compose 学习路线图
android·android jetpack
bytebeats4 小时前
Android 的未来: 为什么 `Navigation 3` 是行业变革者!
android·android jetpack
bytebeats5 小时前
如何在 Jetpack Compose 中创建逐字动画
android·android jetpack
Billy_Zuo5 小时前
Android调用python库和方法的实现
android·开发语言·python
烈焰晴天6 小时前
一款基于 ReactNative 最新发布的`Android/iOS` 新架构文档预览开源库
android·react native·ios
2501_915909066 小时前
iOS电池寿命与App能耗监测实战 构建完整性能监控系统
android·ios·小程序·https·uni-app·iphone·webview
_祝你今天愉快6 小时前
NDK-参数加密和签名校验
android
一起搞IT吧8 小时前
Camera相机人脸识别系列专题分析之十九:MTK ISP6S平台FDNode传递三方FFD到APP流程解析
android·图像处理·人工智能·数码相机·计算机视觉