-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.json
1 lines (1 loc) · 197 KB
/
index.json
1
[{"content":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 2.1.20-Beta1 已发布 What\u0026rsquo;s new in Kotlin 2.1.20-Beta1\nIDE 支持:支持 2.1.20-Beta1 的 Kotlin 插件捆绑在最新的 IntelliJ IDEA 和 Android Studio 中,无需在 IDE 中更新插件,只需在构建脚本中更改 Kotlin 版本为 2.1.20-Beta1。 Kotlin K2 编译器新特性:从 Kotlin 2.1.20-Beta1 开始,K2 实现的 kapt 编译器插件对所有项目默认启用。自 Kotlin 1.9.20 推出新的 kapt 插件实现以来,团队不断改进其内部实现,使其行为与 K1 kapt 相似并显著提高性能,遇到问题可暂时恢复到以前的插件实现并向问题跟踪器报告。 Gradle 支持情况:Kotlin 2.1.20-Beta1 与最新稳定版 Gradle 8.11 兼容并支持其功能,Gradle 8.7 至 8.11 版本均受支持,但使用 Kotlin 多平台 Gradle 插件时在 JVM 目标中调用 withJava () 函数可能会出现弃用警告,团队计划尽快修复。 此外 Kotlin 2.1.10-RC2 也已于近期发布,详情信息可见:https://github.com/JetBrains/kotlin/releases\n新版本 IDE 的启动速度变快了?原来是在背后做了这些!| 技术解析 打开项目时也许是开发者需要等待的最常见场景。IntelliJ IDEA 需要加载和同步项目、执行索引编制以及完成许多其他小任务才能启用所有实用功能。\n本文介绍了在新版本 IntelliJ IDEA 中为提高性能而采取的措施,包括通过技术改进优化 IDE 性能,分阶段同步索引编制等方式优化用户性能。通过以上优化,大约 30% 的用户认为 IntelliJ IDEA 2024.2 让他们能够更快开始编码。\n精选博客 Kotlin Multiplatform 2024 年总结,Kotlin 崛起的一年 2024 年是 KMP 崛起的一年,这篇文章回顾了 2024 年 Kotlin Multiplatform(KMP)的发展。\n社区支持:2024 年 Google I/O 官宣支持 KMP 项目,由 JetBrains 主导开发,Google Workspace 投资支持。 库支持拓展:2024 年众多 Jetpack 库新增 Kotlin 多平台支持,涵盖网络、数据处理等领域。 版本更新:年初 Kotlin/Wasm 发布 Alpha 版,Compose Multiplatform 同步支持;Compose Multiplatform 1.6.10 及后续版本有 iOS、Web、编译器等更新;Kotlin 2.0 引入 K2 编译器,IntelliJ IDEA 2024.3 的 K2 模式进入稳定阶段。 工具革新:KMP 未来将用基于 JetBrains Fleet 定制的独立 IDE,klibs.io 平台发布,用于搜索 KMP 库。 鸿蒙适配:2024 年 Kotlin 中文开发者大会讨论 KMP 适配鸿蒙,官方研究相关方案,有 Kotlin/JS 和 Kotlin/Native 两种适配思路待确定。 未来展望:2025 年 JetBrains 将强化 KMP 生态,涉及升级 iOS 版本、支持 Kotlin 转 Swift 及发布独立 IDE 等。 初探 Kotlin Multiplatform Mobile 跨平台原理 文章围绕 Kotlin Multiplatform Mobile(KMM)跨平台原理展开,涵盖开发流程、编译产物、文件解析、平台关系等内容,具体如下:\n开发流程:在 CommonMain 用expect定义不同平台有差异的接口,在各具体平台以actual实现,之后编译、打包、发布,宿主依类型依赖对应仓库。 Common 层产物:包含kotlin-tooling-metadata.json、source.jar、.jar和.module等文件,.module关联 Common 层与具体平台产物信息。 具体平台产物:以 iOS 平台为例,.module文件描述产物属性、依赖和文件信息 ,其编译产物有metadata.jar和.klib。 关键文件解析:.klib存放ir等,.knm由.kt经特定流程生成,记录元数据,可用 IDEA 查看 。 iOS 与 KMM 库关系:iOS 依赖.h和二进制文件,KMM 通过cinterop等工具实现与 OC 的互操作,将.klib处理成 iOS 可用的.framework。 绝大多数人想不到的 MMKV 封装思路 文章主要介绍了 MMKV 在 Kotlin 中的封装思路与实现,形成 MMKV-KTX 库,具体如下:\n支持 StateFlow 类型:借鉴 LiveData 的封装方式,通过自定义委托类,重写 MutableStateFlow 读写及相关函数,结合 MMKV 缓存逻辑,实现对 StateFlow 的支持,使数据变化可通知 UI,还可使用 Flow 操作符。 支持 getAllKV ():针对 MMKV 不支持 getAll () 获取键值对的问题,利用属性委托时的属性名和类型信息,通过反射实现 getAllKV ()。同时处理了懒加载属性误判问题,确保获取的数据准确。 支持 Map 用法:提出用操作 Map 方式读写 MMKV 数据,对比存 JSON 字符串和给 key 加后缀两种方案,选择后者。通过特定方式获取历史数据,处理增删查改及迭代器操作,重写 equals () 函数,实现 Map 用法。 MMKV-KTX 库介绍:MMKV-KTX 库具备自动初始化、类型安全等特性,支持多种数据类型,可转换为 LiveData、StateFlow、Map,还支持 getAllKV ()。给出了添加依赖和使用示例。 fun IMMKVOwner.getAllKV(): Map\u0026lt;String, Any?\u0026gt; = buildMap { this@getAllKV::class.memberProperties .filterIsInstance\u0026lt;KProperty1\u0026lt;IMMKVOwner, *\u0026gt;\u0026gt;() .forEach { property -\u0026gt; property.isAccessible = true this[property.name] = property.get(this@getAllKV) property.isAccessible = false } } Compose 编译器插件原理介绍 Reverse-Engineering the Compose Compiler Plugin: Intercepting the Frontend\n本文主要介绍了 Jetpack Compose 编译器插件如何改变 Kotlin 编译器的规则,包括在不同编译阶段的作用以及如何拦截编译行为等内容。\nJetpack Compose 编译器插件与 Kotlin 编译器的关系:Jetpack Compose 编译器插件会向 IDE 发送诊断信息以提供用户反馈,通过拦截 Kotlin 编译器的代码编译和运行时行为来实现其功能。 Kotlin 编译器:着重探讨较新的 FIR 前端(k2 编译器),其通过重复编译优化数据格式。 插件架构:参考 2018 年 Kevin Most 演讲,介绍了编译器插件架构的构成部分。 Compose 插件结构:已转移到 Kotlin 仓库,分析其文件结构及前后端职责。 插件拦截功能:可在 Kotlin 编译器前后端拦截编译,以特定代码为例说明不同阶段作用。 IDE 错误提示:解析阶段后,FIR 将信息发送至 IDE 插件,提供如 “Composable main functions are not currently supported” 等实时错误提示。 社区活动 Kotlin 中文开发者大会视频回放 Kotlin 中文开发者大会视频回放已发布,欢迎点击以下链接观看:\n腾讯视频使用 KMP Compose 适配鸿蒙的实践 BiliBili 的鸿蒙之路:从 Kotlin/JS 到 Kotlin/Native 的进化之路 快手团队的 KMP 鸿蒙落地实践 NTCompose:一个基于 KMP 及 Compose 范式和原生渲染的多平台开发框架 ","permalink":"https://beijing-kug.github.io/news/kotlin-news-2025-01/","summary":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 2.1.20-Beta1 已发布 What\u0026rsquo;s new in Kotlin 2.1.20-Beta1\nIDE 支持:支持 2.1.20-Beta1 的 Kotlin 插件捆绑在最新的 IntelliJ IDEA 和 Android Studio 中,无需在 IDE 中更新插件,只需在构建脚本中更改 Kotlin 版本为 2.1.20-Beta1。 Kotlin K2 编译器新特性:从 Kotlin 2.1.20-Beta1 开始,K2 实现的 kapt 编译器插件对所有项目默认启用。自 Kotlin 1.9.20 推出新的 kapt 插件实现以来,团队不断改进其内部实现,使其行为与 K1 kapt 相似并显著提高性能,遇到问题可暂时恢复到以前的插件实现并向问题跟踪器报告。 Gradle 支持情况:Kotlin 2.1.20-Beta1 与最新稳定版 Gradle 8.11 兼容并支持其功能,Gradle 8.7 至 8.11 版本均受支持,但使用 Kotlin 多平台 Gradle 插件时在 JVM 目标中调用 withJava () 函数可能会出现弃用警告,团队计划尽快修复。 此外 Kotlin 2.","title":"Kotlin 技术月报 | 2025 年 1 月"},{"content":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 推出 klibs.io:探索 Kotlin Multiplatform 库的新方式 Kotlin Multiplatform¹ 正在迅速发展,生态系统不断扩大,仅在 2024 年,库的数量就增加了 35%。虽然可用库数远超往日,但找到适合您的用例和目标平台的库仍是一项挑战。\n为此,JetBrains 推出了 klibs.io,这项新服务旨在提高查找 Kotlin Multiplatform 库的速度和简便性。\nKlibs.io 是一项简单的 Web 服务,利用这项服务,您可以找到支持所选平台(JVM、Android JVM、Wasm、JS、Kotlin/Native)并且适用于特定目的的 Kotlin Multiplatform 库。网站会对 GitHub 和 Maven Central 中的数据编制索引,并使用 AI 生成的元数据增强搜索结果。它旨在通过提供与 KMP 相关的信息来降低评估库的难度。\nJetbrains 《2024 开发者生态系统现状报告》发布 https://www.jetbrains.com/zh-cn/lp/devecosystem-2024/\n每年,Jetbrains 都会发布《开发者生态系统现状报告》,展现开发者的世界。这一次进行了精简,在一个网页上列出重点,汇集研究中最引人注目的洞察。如果您想深入了解,可以下载完整的原始数据。\n基于全球 23,262 名开发者的回复,本报告将清晰透彻地展现庞大而多样的开发者群体。Jetbrains 的目标是分享开发者最关心的问题,从开发者所依赖的编程语言、工具和技术,到影响行业发展的关键问题。\n今年,Jetbrains 将继续探索开发者在各个领域对 AI 的看法。剧透:对 AI 的恐惧似乎正在减少!Jetbrains 还将深入研究职业和就业趋势、领域多样性,甚至对业界最近大规模裁员的一些洞察。\nArrow 2.0 发布 Arrow 2.0 release\nArrow 是一个用于 Kotlin 类型化函数式编程的库,其目的是为 Kotlin 开发者提供一套丰富的工具和功能,以增强在 Kotlin 编程语言中进行函数式编程的能力和体验。\nArrow 2.0 版本目前已发布。这个版本是使用新的 K2 编译器构建的,这使其能够支持更广泛的平台,包括 WebAssembly。从现在开始,Arrow 将为 Kotlin 支持的每个平台提供构件。除了稳定化和一般错误修复之外,这个版本的主题是改进 Arrow 库提供的领域特定语言(DSL),其目标是使开发人员能够编写更简洁易读的代码。\nKoin 计划发布 IDE 插件 Koin 是一个轻量级的依赖注入(Dependency Injection,DI)框架。对于一个依赖注入框架来说,编译时的检查是非常重要的。为了提高开发者的开发效率,Koin 团队更进一步,计划于 2025 年 Q1 发布一个 IDE 插件,用于检查 Koin 模块的正确性。\n与传统的在编译过程中发生的编译安全不同,IDE 插件会在你编写代码时实时分析 Koin 配置。\nKoin IDE 插件将执行静态代码分析,在诸如循环引用或缺少声明等问题变成运行时错误之前尽早识别它们。这种积极主动的方法将通过从源头上防止配置问题,而不是等到在编译或构建时出现问题,从而简化你的工作流程。\n通过立即集成到你的开发工作流程中,IDE 插件不仅仅是在检查代码而是从源头上防止配置错误。与其他依赖注入框架相比,这种方法可以减少等待编译的时间,提高开发效率。\n精选博客 Kotlin Multiplatform 的春天, klibs.io 发布,还有官方支持鸿蒙的想法 Kotlin Multiplatform 这些年发展迅速,其中最明显的就是 KMP 生态在不断扩大,仅在 2024 年一年里,库的数量就增加了 35%。为了帮助开发者更好地找到适合自己的库,JetBrains 推出了 klibs.io,这项新服务旨在提高查找 Kotlin Multiplatform 库的速度和简便性。\n同时近期 Kotlin 编译组的 lead 表示,他们也在研究如何在 KMP 中支持 Harmony0S。而官方的计划是,可以通过重新使用 Kotlin/JS 编译器,直接生成 ArkTS (而不是JS),从他的角度看,现在都通过 Kotlin/Native 的实现并不合适,因为在 Kotlin/Native 实现中,会有两个运行时和两个独立的垃圾回收器。\n而在 Kotlin 官方的角度,这样做可以重新使用 Kotlin/JS 生态系统中已经拥有的 TypeScript 互操作性,另一个好处是将重新使用 HarmonyOS 工具链的所有其他部分,包括运行时,因此调用 HarmonyOS 的 APl 不会有任何性能损失。\n一文看懂 Jetapck Compose 布局流程 Compose 绘制生命周期为三个阶段:\nComposition/组合:Composable 源码经过运行后生成 LayoutNode 的节点树,这棵树被称为 Composition。 Layout/布局:对节点树深度遍历测量子节点的尺寸,并将其在父容器内摆放到合适的位置。 Drawing/绘制:基于布局后拿到的尺寸和位置信息,绘制上屏。 我们与 Android 经典视图系统的生命周期(Measure,Layout,Drawing)做一个对比:组合是 Compose 的特有阶段,是其能够通过函数调用实现声明式 UI 的核心,具体可见作者的其他文章,而绘制阶段与传统视图大同小异,都是通过 Android Cavas API ,底层调用 skia 实现,本文也不做讨论。\n本文讨论的重点是布局阶段。Compose 的布局把 Measure 也了囊括进来,相对于 Android View 有相似性,但也有其独有的特点和优势。\n从零实现一个 KMP 插桩框架: EzHook Kotlin Multiplatform近年来逐渐崭露头角,已成为备受关注的跨平台开发方案。它支持代码在 Android、iOS、Web、Destop 等多个平台之间复用,能够大幅提升开发效率与需求的多端一致性。并且随着鸿蒙 Next 的发布,越来越多公司开始着手适配 KMP 以满足未来移动端跨平台开发的需求,由此可见 KMP的发展潜力不可小觑。\n然而,在将 KMP 应用到实际项目中时发现缺少一个关键能力——「代码插桩」。这一能力对于修改第三方库、面向切片编程(AOP)以及构建业务框架等场景至关重要。在 Android 平台上,我们可以基于 Transform 实现自定义的字节码转换,并且社区也提供了丰富的 AOP 框架(如 Lancet)。\n但目前还没有一款基于 KMP 的类 Transform 能力与对应的 AOP 框架,本文探索了 KMP 平台上类 Transform 能力,并基于该能力开发一款适用于 KMP 的 AOP 框架——EzHook。\nKotlin/JVM 编译流程浅析 编译器一般分为前端和后端两部分,前端负责词法分析、语法分析、语义分析、中间代码生成等工作,后端负责中间代码优化、目标代码生成等工作。Kotlin 的编译器其实也是由这些部分组成的,本文基于 Kotlin 2.1 版本源码,按这几个部分介绍了 Kotlin 的编译流程。同时讲解了 Kotlin 编译器的调试方法,对比了 K1 和 K2 版本在各阶段的差异,分析了 K2 比 K1 快的原因。\n社区活动 活动 |12 月 14 - 15 日,2024 Kotlin 中文开发者大会 —— 随处可见的 KMP Kotlin 中文开发者大会是由 JetBrains 团队与中文 Kotlin User Group 合作举办的免费线上直播活动,自 2021 年举办以来,大会成为 Kotlin 中文开发者发表、学习、交流的最佳平台。延续这个传统,今年于 12 月 14 日(六)及 12 月 15 日(日)两天进行线上直播。\n本次大会以「随处可见的 KMP」为主题,汇聚多位技术专家,分享他们在不同场景使用 Kotlin 的宝贵经验。内容涵盖多平台开发策略、鸿蒙新平台的适配、面向 AI 时代的解决方案、SDK 及 ORM 的开发、以及后端应用等。此外,KUG 技术社区的小伙伴们还将带来 KotlinConf’24 丹麦哥本哈根现场的精彩见闻,让未能亲临现场的听众也能感受到大会的热烈氛围。如此丰富多元的主题,机会难得,不容错过!\n","permalink":"https://beijing-kug.github.io/news/kotlin-news-2024-12/","summary":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 推出 klibs.io:探索 Kotlin Multiplatform 库的新方式 Kotlin Multiplatform¹ 正在迅速发展,生态系统不断扩大,仅在 2024 年,库的数量就增加了 35%。虽然可用库数远超往日,但找到适合您的用例和目标平台的库仍是一项挑战。\n为此,JetBrains 推出了 klibs.io,这项新服务旨在提高查找 Kotlin Multiplatform 库的速度和简便性。\nKlibs.io 是一项简单的 Web 服务,利用这项服务,您可以找到支持所选平台(JVM、Android JVM、Wasm、JS、Kotlin/Native)并且适用于特定目的的 Kotlin Multiplatform 库。网站会对 GitHub 和 Maven Central 中的数据编制索引,并使用 AI 生成的元数据增强搜索结果。它旨在通过提供与 KMP 相关的信息来降低评估库的难度。\nJetbrains 《2024 开发者生态系统现状报告》发布 https://www.jetbrains.com/zh-cn/lp/devecosystem-2024/\n每年,Jetbrains 都会发布《开发者生态系统现状报告》,展现开发者的世界。这一次进行了精简,在一个网页上列出重点,汇集研究中最引人注目的洞察。如果您想深入了解,可以下载完整的原始数据。\n基于全球 23,262 名开发者的回复,本报告将清晰透彻地展现庞大而多样的开发者群体。Jetbrains 的目标是分享开发者最关心的问题,从开发者所依赖的编程语言、工具和技术,到影响行业发展的关键问题。\n今年,Jetbrains 将继续探索开发者在各个领域对 AI 的看法。剧透:对 AI 的恐惧似乎正在减少!Jetbrains 还将深入研究职业和就业趋势、领域多样性,甚至对业界最近大规模裁员的一些洞察。\nArrow 2.0 发布 Arrow 2.0 release\nArrow 是一个用于 Kotlin 类型化函数式编程的库,其目的是为 Kotlin 开发者提供一套丰富的工具和功能,以增强在 Kotlin 编程语言中进行函数式编程的能力和体验。","title":"Kotlin 技术月报 | 2024 年 12 月"},{"content":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 2.1.0 发布 https://blog.jetbrains.com/kotlin/2024/11/kotlin-2-1-0-released/\nKotlin 2.1.0 版本已发布!此版本引入了新的语言特性、工具更新、性能改进和重要修复。具体内容包括:\n预览中的新语言特性:在 when 表达式中支持使用卫语句,以及非局部的 break 和 continue 支持,还有多美元符号字符串插值支持等。 K2 编译器更新:对编译器检查提供了更多灵活性,并改进了 kapt 实现。 Kotlin 多平台:编译器选项的稳定 Gradle DSL 及许多其他改进。 Kotlin/Native:改进了对 iosArm64 的支持以及其他更新。 Kotlin/Wasm:多个更新,包括对增量编译的支持。 Gradle 支持:改进了与更新版本的 Gradle 和 Android Gradle 插件的兼容性,并更新了 Kotlin Gradle 插件 API。 Kotlin 近期动态 Kotlin Roundup: Kodee’s Top Picks\n本文介绍了 Kotlin 的一些亮点和最新动态,包括:\nKotlin 成为 GitHub 上增长最快的第五大语言。 Ktor 3.0 发布,具有新功能和性能提升。 Kotlin 2.1.0 发布,可预览新语言特性等。 Kotlin 2.1 的直播活动。 KotlinConf 2025 的相关信息,包括演讲者征集和购票。 Kotlin Multiplatform 竞赛的相关情况。 一些大公司使用 Kotlin Multiplatform 的情况。 Kotlin Multiplatform 2025 的发展路线图。 Amper 2024 年 11 月的更新。 Declarative Gradle EAP 2 发布。 鼓励参与 Advent of Code 2024 in Kotlin 活动。 Kotlin K2 模式现已达到稳定状态 Kotlin K2 Mode Becomes Stable\n在 IntelliJ IDEA 2024.3 中,K2 模式已脱离测试阶段,现在处于稳定状态,可供普遍使用。\nK2 模式显著提升 Kotlin 代码分析稳定性、降低内存消耗并提高 IDE 整体性能,支持 Kotlin 2.1 语言特性。K2 模式是对 IntelliJ IDEA 中 Kotlin 插件的重大改进,旨在解决前版本的性能和稳定性问题,减少 UI 冻结情况。\nKotlin Multiplatform 未来将采用基于 JetBrains Fleet 定制的独立 IDE 2025 Kotlin Multiplatform 发展路线图中指出,Kotlin 团队致力于为 Kotlin Multiplatform 提供出色的开发体验,减少开发者在不同 IDE 之间切换的需求,实现无缝集成的工作流程,计划发布独立的 KMP IDE。\nKMP 独立 IDE 将基于 JetBrains Fleet 定制,提供更好的 Kotlin Multiplatform 开发体验,包括:\n开发人员不再需要在不同的 IDE 之间切换调试 增强的语言支持,例如在 Kotlin 和 Swift 等语言的高亮和代码提示,错误提醒等 创建统一的工作流程,在统一 IDE 里提高工作效率 未来不排除增加云计算机构建 iOS,帮助没有本地 Apple 设备的开发人员 尝试更深入的 AI 工具集成 Kotlin Scripting 2024 现状 State of Kotlin Scripting 2024\nKotlin Scripting 技术,具备在无需预先历经编译或打包成可执行文件的流程下,便能直接将 Kotlin 代码当作脚本予以执行的能力。\nJetBrains 针对 Kotlin Scripting 的实际运用状况开展了深入的调研与剖析,所获结论显示,除了诸如 Gradle 构建脚本这类占据主导地位的应用场景之外,Kotlin Scripting 的普及程度远未达预期水平,其实际应用场景颇为有限。\n尤其值得注意的是,Kotlin 并非传统意义上的解释型语言,这一特性致使它难以达成专用脚本语言所特有的典型用户体验。为了能够模拟出当下类似脚本的行为表现,Kotlin 不得不在后台悄然进行代码的编译操作。然而,由于 Kotlin 编译器在初始设计之时并未充分考量此类应用场景,致使该编译过程极为繁重且复杂。\n基于上述种种情形,JetBrains 最终做出决策:尽管在未来仍会持续为 Kotlin 脚本的编写工作给予支持,涵盖对基本 “.kts” 文件的编译与执行,以及针对自定义脚本的相关操作等方面,但就当下而言,并不打算将 Kotlin 脚本推举为一种能够广泛适用于各类场景的通用脚本解决方案,例如,将其作为 Bash 或 Python 的等效替代品来进行推荐。\n精选博客 Kotlin 协程源码的地图:如何读源码才不会迷失? Kotlin 协程是 Kotlin 的重要特性,为了彻底掌握 Kotlin 协程,我们不仅要知其然,更要知其所以然。这篇文章主要介绍了 Kotlin 协程源码的研究方法:\n第一点:理解Kotlin协程的源码结构。Kotlin协程的源代码,其实分布在多个模块之中,各个模块之中,会包含特定的协程概念。相应的,它的各个概念,其实是有特定的层级结构的,我们只有弄清楚各个概念之间的关系,并且建立一个类似“地图”的知识结构,我们在研究源码的时候,才不会那么容易迷失。 第二点:明确研究源码的目标。正如我们前面提到的,我们不可能一次性看完协程所有的源代码,因此,我们在读源码的过程中,一定要有明确的目的。 Kotlin 编译器速成课程 https://github.com/ahinchman1/Kotlin-Compiler-Crash-Course\n本文主要介绍了 Kotlin 编译器的相关内容,包括其各个阶段的功能、前端的两种实现(Fe10 和 FIR)、分析 API 以及编译器的中端和后端阶段。同时还提供了一些相关的资源链接。\n社区活动 KotlinConf 征搞现已启动 KotlinConf CfP is now open\nKotlinConf 是由 JetBrains 举办的官方会议。它致力于 Kotlin 编程语言,是社区聚集并讨论所有与 Kotlin 相关事物的地方。\n2025 年的 KotlinConf 将于 5 月 21 日至 23 日在丹麦哥本哈根举行,21 日有一天的研讨会,会议本身在 22 日和 23 日举行。\n提交一个演讲并分享你的经验,无论是关于找到使用 Kotlin 的创新方法、你面临的挑战、你创建的框架,还是任何你觉得可以在他人的 Kotlin 之旅中提供帮助的事情。\n【DevFest 日程一览】从 Android 到 Kotlin,你关心的都在这里 DevFest 是由 Google 支持由全球各地 GDG 社区主办的年度开发者盛会。北京 GDG 自 2012 年起连续 13 年举办 DevFest 。今年活动包括 Android/Kotlin 和 AI 开发主题以及 Workshop 动手活动。分享嘉宾来自国内众多 GDE (谷歌开发者专家) 、一线开发者和 Google 技术推广工程师。欢迎广大开发者报名参加!\nAndroid 分会场有多个精彩演讲,涵盖 Kotlin Native、Android 15 特性、Gemini 在 Android 上的应用、Compose UI 工作原理、Compose 的魔法代码揭秘、Kotlin 全栈、Firebase Cloud Messaging 在移动端应用、androidx/media 实现视频内容和广告无缝播放等内容。\n","permalink":"https://beijing-kug.github.io/news/kotlin-news-2024-11/","summary":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 2.1.0 发布 https://blog.jetbrains.com/kotlin/2024/11/kotlin-2-1-0-released/\nKotlin 2.1.0 版本已发布!此版本引入了新的语言特性、工具更新、性能改进和重要修复。具体内容包括:\n预览中的新语言特性:在 when 表达式中支持使用卫语句,以及非局部的 break 和 continue 支持,还有多美元符号字符串插值支持等。 K2 编译器更新:对编译器检查提供了更多灵活性,并改进了 kapt 实现。 Kotlin 多平台:编译器选项的稳定 Gradle DSL 及许多其他改进。 Kotlin/Native:改进了对 iosArm64 的支持以及其他更新。 Kotlin/Wasm:多个更新,包括对增量编译的支持。 Gradle 支持:改进了与更新版本的 Gradle 和 Android Gradle 插件的兼容性,并更新了 Kotlin Gradle 插件 API。 Kotlin 近期动态 Kotlin Roundup: Kodee’s Top Picks\n本文介绍了 Kotlin 的一些亮点和最新动态,包括:\nKotlin 成为 GitHub 上增长最快的第五大语言。 Ktor 3.0 发布,具有新功能和性能提升。 Kotlin 2.1.0 发布,可预览新语言特性等。 Kotlin 2.1 的直播活动。 KotlinConf 2025 的相关信息,包括演讲者征集和购票。 Kotlin Multiplatform 竞赛的相关情况。 一些大公司使用 Kotlin Multiplatform 的情况。 Kotlin Multiplatform 2025 的发展路线图。 Amper 2024 年 11 月的更新。 Declarative Gradle EAP 2 发布。 鼓励参与 Advent of Code 2024 in Kotlin 活动。 Kotlin K2 模式现已达到稳定状态 Kotlin K2 Mode Becomes Stable","title":"Kotlin 技术月报 | 2024 年 11 月"},{"content":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 2.1.0-Beta2 版本已发布 https://kotlinlang.org/docs/whatsnew-eap.html\nKotlin 2.1.0-Beta2 版本已发布,该版本带来了一些重要的改进和新功能,具体包括以下内容:\n新语言特性的预览 改进了泛型类型函数的重载解析 SubclassOptInRequired 注解的引入 改进的 K2 kapt 实现 Kotlin/Native LLVM 版本升级至 16.0.0 Gradle 相关改进 Compose 编译器插件相关的更新 Compose Multiplatform 1.7.0 版本已发布 Compose Multiplatform 1.7.0 Released\nCompose Multiplatform 1.7.0 版本已发布,该版本带来了一些重要的改进和新功能,具体包括以下内容:\nMaterial3 adaptive和 WindowSizeClass现在可用于通用代码中。 Compose Multiplatform 现在支持为navigation graph提供编译时安全性。 Compose Multiplatform 1.7.0 与 Kotlin 2.0.20 搭配使用,在 iOS 上的性能表现显著优于之前版本的组合,运行更快、更流畅。 2025 Kotlin Multiplatform 发展路线图 Kotlin Multiplatform Development Roadmap for 2025\n文章介绍了 Kotlin Multiplatform 在 2025 年的发展路线图,具体包括以下方面:\nCompose Multiplatform:致力于使 Compose Multiplatform 成为能创建美观且高性能应用的框架,确保在所有支持平台上保持一致外观。重点是将 iOS 目标推进到稳定版本,iOS 渲染性能、核心组件功能完整性、与原生视图的互操作性、框架整体稳定性、文档等。 Tooling:致力于为 Kotlin Multiplatform 提供出色的开发体验,减少开发者在不同 IDE 之间切换的需求,实现无缝集成的工作流程,计划发布独立的 KMP IDE。 Kotlin-to-Swift export:快速推进 Kotlin 到 Swift 的直接导出,2025 年目标是发布第一个公开版本,提供与现有 Objective-C 导出相当的用户体验并克服其限制,以实现更广泛的 Swift 语言支持和更无缝的 API 导出。 Library ecosystem:计划改进 klib 格式、实现与 JVM 相同的代码内联行为、提供确保多平台库公共 API 兼容的工具,还将改进发布过程,包括提供创建和发布 KMP 库的模板和指南等。 Amper:将专注于使 Amper 完全适用于 Android 和 iOS 多平台移动应用开发,包括运行和测试应用、签署和发布应用,以及探索服务器端开发场景。 Gradle 和其他构建工具:在 Gradle 增强方面,将支持在项目级别声明 Kotlin Multiplatform 依赖项、改进 Kotlin/Native 工具链与 Gradle 的集成、实现多平台库的下一代分发格式等。 Ktor 3.0 已发布 Ktor 3.0 Is Now Available With New Features and Improved Performance\nKtor 3.0 已发布,带来诸多新特性与性能提升,具体包括以下内容:\n迁移到 kotlinx - io:基于 Okio,旨在标准化 IO 功能并提升性能,影响低级别 IO API,旧 API 将被弃用但在 4.0 版本前仍受支持。 性能改进:减少字节复制,提升字节转换和解析效率,IO 基准测试显示多项性能大幅提升。 支持服务器发送事件(SSE):服务器和客户端均支持,服务器可推送事件到客户端,提供单向通信通道,使用时需添加依赖并安装插件,注意暂不支持数据压缩。 从 ZIP 存档提供静态资源:通过staticZip函数实现,可指定访问路径、ZIP 文件内基础路径、ZIP 文件路径、默认文件及自定义响应。 支持 CSRF 保护:通过新插件实现,适用于使用会话 cookie 和表单的项目,启用后需配置验证请求来源等方法,请求需带特定头部才能通过。 Ktor 客户端支持 Wasm:Ktor 客户端支持 WebAssembly 作为构建目标,虽 Kotlin/Wasm 仍处于早期阶段,但意义重大,使用需添加相应依赖。 精选博客 Kotlin 多平台开发者路线图 https://github.com/skydoves/kmp-developer-roadmap\nKotlin 多平台开发者路线图为开发者提供了全面的学习路径,帮助开发者了解 KMP 生态,路线图涵盖了各种主题的相关库和技术栈。在浏览这个路线图时,您可以沿着中心轴线进行,这条轴线清晰地展示了不同概念之间的结构化学习进程。\n每个节点都代表了 Kotlin 多平台的要点,包括平台理念、软件开发工具包(SDK)、常用库以及实用解决方案。如果您想深入了解特定术语和基本概念,不妨查阅 Kotlin 多平台入门资料,或者浏览 GitHub 上的相关仓库,以获取更多实例和资源。\n需要注意的是,你不必从这个路线图中掌握每一项内容。只需关注那些与你和你的需求最相关的部分即可。这份资料并不是为了成为 Kotlin 多平台开发者的全面指南或教材;它是一个可以根据你的个人情况灵活学习的资源。把它看作是一系列的建议,而不是每个主题都必须遵循的学习路线。\n一个 Kotlin 开发,对于纯函数的思考 本文从 Kotlin 开发者的角度,对纯函数进行了一系列的思考,具体包括以下内容:\n纯函数的定义:相同输入永远得到相同输出,无副作用。数学上要求每个值域内输入都有唯一输出。 副作用:影响外部状态或依赖外部状态的行为,如更改外部文件、数据库读写等。 纯函数的好处:可缓存性、高度并行、高度可测性、依赖清晰。 纯函数中实现循环:通过消除可变变量实现完全的“纯”。 函数一等公民:函数发挥重要作用,纯函数中可以不用对象,用函数式替代面向对象的代码。 柯里化:将多参数函数通过多次传入,实现“预设一部分参数”的能力 精选视频 Compose 编译器插件是如何工作的? How Compose Compiler Plugin Works\nJetpack Compose 是 Android 平台上的一种现代化的声明式 UI 工具包。它允许开发者使用 Kotlin 编程语言以一种更简洁、更高效的方式构建用户界面。\nJetpack Compose 的简洁和高效性很大程度上得益于其内部的编译器插件。这个视频系列将带领你深入了解 Compose 编译器插件的工作原理。\n社区活动 开发者如何参与 Kotlin 的演进? The Evolution of the Kotlin Language and How You Can Contribute\nKotlin 的发展深受其活跃社区的显著影响。从最初的想法到最终的特性,它是由反馈、讨论和实际用例所塑造的。这个过程被称为 KEEP:the Kotlin Evolution and Enhancement Process。\n文章详细描述了 KEEP 流程的各个阶段,包括探索与设计、公开审查、规划与实施、预览版和稳定发布。读者可以通过不同的方式参与到这些阶段中,如分享用例、提供反馈、测试特性等,从而共同塑造Kotlin的未来。\n","permalink":"https://beijing-kug.github.io/news/kotlin-news-2024-10/","summary":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 2.1.0-Beta2 版本已发布 https://kotlinlang.org/docs/whatsnew-eap.html\nKotlin 2.1.0-Beta2 版本已发布,该版本带来了一些重要的改进和新功能,具体包括以下内容:\n新语言特性的预览 改进了泛型类型函数的重载解析 SubclassOptInRequired 注解的引入 改进的 K2 kapt 实现 Kotlin/Native LLVM 版本升级至 16.0.0 Gradle 相关改进 Compose 编译器插件相关的更新 Compose Multiplatform 1.7.0 版本已发布 Compose Multiplatform 1.7.0 Released\nCompose Multiplatform 1.7.0 版本已发布,该版本带来了一些重要的改进和新功能,具体包括以下内容:\nMaterial3 adaptive和 WindowSizeClass现在可用于通用代码中。 Compose Multiplatform 现在支持为navigation graph提供编译时安全性。 Compose Multiplatform 1.7.0 与 Kotlin 2.0.20 搭配使用,在 iOS 上的性能表现显著优于之前版本的组合,运行更快、更流畅。 2025 Kotlin Multiplatform 发展路线图 Kotlin Multiplatform Development Roadmap for 2025\n文章介绍了 Kotlin Multiplatform 在 2025 年的发展路线图,具体包括以下方面:","title":"Kotlin 技术月报 | 2024 年 10 月"},{"content":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 2.1.0-Beta1 版本已发布 https://kotlinlang.org/docs/whatsnew-eap.html\nKotlin 2.1.0-Beta1 版本已发布,此版本包含了一些新功能和改进,具体包括以下内容:\n新语言特性的预览 SubclassOptInRequired 注解的引入 改进的 K2 kapt 实现 Kotlin/Native LLVM 版本升级至 16.0.0 Gradle 相关改进 Compose 编译器插件相关的更新 开发者的提效神器 —— JetBrains AI Assistant 即刻启动! 开发者的提效神器 —— JetBrains AI Assistant 即刻启动!\nCompose 1.7.0 版本正式发布 https://developer.android.google.cn/jetpack/androidx/releases/compose-ui\nCompose 1.7.0 版本已发布,此版本包含了一些新功能和改进,具体包括以下内容:\n新增共享元素过渡、懒加载列表项动画、文本新特性、上下文流布局等特性。 性能的持续提升,首帧性能相比 1 月版本提升 17%,强跳过模式从实验状态转为生产就绪状态,Compose 编译器将从 Kotlin 2.0 起托管在 Kotlin 仓库中,便于升级 Kotlin 版本。 同时介绍了 Compose 对 Android 设备生态系统的支持,如 Navigation Compose 的类型安全导航和 CameraX Compose 的新功能 精选博客 在跨平台领域中,Kotlin 多平台对于你的下一个应用来说是正确的选择吗? In the Cross-Platform world, is Kotlin Multiplatform the right choice for your next application?\n本文介绍了 Kotlin Multiplatform 在跨平台开发中的优势,包括轻松转换现有 Android 项目、无需学习新语言、灵活共享代码等。同时与 Flutter 和 React Native 进行比较,在性能、社区生态和学习曲线方面各有特点。结论认为 Kotlin Multiplatform 是跨平台开发的有力选择,虽面临竞争但前景广阔。\n性能方面:与 Flutter 和 React Native 相比,Kotlin Multiplatform 可直接访问原生 API,性能更好,而 Flutter 和 React Native 因使用额外层或引擎可能存在性能和效率问题。 社区生态:Flutter 和 React Native 社区更大、更活跃,有众多插件和库;Kotlin Multiplatform 相对较新,但有 Google 和 JetBrains 支持,也有一些框架和库。 学习曲线:熟悉 Kotlin 的团队学 Kotlin Multiplatform 相对容易;熟悉 JavaScript 和 React 的团队适合 React Native;Flutter 的 Dart 语言对部分开发者有学习曲线。 使用 Kotlin Multiplatform 编写 iOS/Android 应用这一年,做一个小总结 本文是作者关于使用 Kotlin Multiplatform 编写 iOS/Android 应用一年的经验总结。在作者看来,Kotlin Multiplatform 解决了以下痛点:\n双端逻辑一致,一套业务逻辑不需要重复写两次,也就不存在以往需要花费人力和时间来解决双端不一致的问题 可以使用原生 UI,虽然文章只提到了 SwiftUI 和 Jetpack Compose,但是还是可以使用 UIKit 和 Android View 来编写 UI 层,相比于其他跨平台方案还是会有一定的优势的。 与 Swift 的交互比较方便。相较于其他跨平台方案,能够简单直接的使用 Swift 与 Kotlin 进行交互这一点还是非常舒服的,类似的解决方案也有,比如 Rust+UniFFI,而无论 JavaScript 还是 Dart 都无法像这样直接交互。 精选视频 Kotlin 纪录片:探寻 Kotlin 成功之外的故事 Beyond The Success Of Kotlin / The Documentary by EngX\n大约 15 年前,JetBrains 的一个小工程团队开始了一项看似疯狂的努力 —— 创造他们自己的编程语言并取得成功。在 21 世纪 10 年代初,Java 是最流行的语言之一,被数百万工程师使用。然而,它已经好几年没有进行重大更新了,并且缺乏新特性。开发人员正在寻找一种新的解决方案。\n许多工程师试图通过创建新的 JVM 语言来提供 Java 的替代方案。这是一个创造能够影响整个行业的工具的短暂机会之窗。Kotlin 的故事就是这样开始的。是什么促成了 Kotlin 的成功?它在行业中赢得一席之地又付出了什么代价呢?在这部纪录片中,你将从源头听到这个故事。\nKotlin 路线图更新 Kotlin 24H2的工作重心在哪里?\n本视频主要介绍了 Kotlin 的发展路线图(roadmap),包括关键优先级(语言进化、插件、多平台、第三方体验),按子系统划分的路线图(语言、编译器、多平台、工具、库生态系统),自 2023 年 12 月以来的变化(完成、新增、删除的项目)等内容。更多详细信息请查看视频。\n社区活动 Kotlin 多平台竞赛 Kotlin Multiplatform Contest\n你尝试过使用 Kotlin 多平台构建项目吗?Kotlin 多平台可以让你为 Android、iOS、桌面、网络和服务器创建应用程序 —— 所有这些都可以使用共享的 Kotlin 代码!\nKotlin 基金会为学生和应届毕业生推出了 Kotlin 多平台竞赛。通过使用 Kotlin 多平台构建一个跨平台项目,展示你的创造力和编码技能,并赢得一次前往 KotlinConf 2025 的机会,这是年度最大的 Kotlin 盛会。\n","permalink":"https://beijing-kug.github.io/news/kotlin-news-2024-09/","summary":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 2.1.0-Beta1 版本已发布 https://kotlinlang.org/docs/whatsnew-eap.html\nKotlin 2.1.0-Beta1 版本已发布,此版本包含了一些新功能和改进,具体包括以下内容:\n新语言特性的预览 SubclassOptInRequired 注解的引入 改进的 K2 kapt 实现 Kotlin/Native LLVM 版本升级至 16.0.0 Gradle 相关改进 Compose 编译器插件相关的更新 开发者的提效神器 —— JetBrains AI Assistant 即刻启动! 开发者的提效神器 —— JetBrains AI Assistant 即刻启动!\nCompose 1.7.0 版本正式发布 https://developer.android.google.cn/jetpack/androidx/releases/compose-ui\nCompose 1.7.0 版本已发布,此版本包含了一些新功能和改进,具体包括以下内容:\n新增共享元素过渡、懒加载列表项动画、文本新特性、上下文流布局等特性。 性能的持续提升,首帧性能相比 1 月版本提升 17%,强跳过模式从实验状态转为生产就绪状态,Compose 编译器将从 Kotlin 2.0 起托管在 Kotlin 仓库中,便于升级 Kotlin 版本。 同时介绍了 Compose 对 Android 设备生态系统的支持,如 Navigation Compose 的类型安全导航和 CameraX Compose 的新功能 精选博客 在跨平台领域中,Kotlin 多平台对于你的下一个应用来说是正确的选择吗? In the Cross-Platform world, is Kotlin Multiplatform the right choice for your next application?","title":"Kotlin 技术月报 | 2024 年 9 月"},{"content":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 2.0.10 已正式发布 Kotlin 2.0.10 现已正式发布。2.0.10 版本是 2.0 系列的第一个错误修复版本,此版本的主要目标是修复 2.0.0 版本中发现的错误。有关更多详细信息,请点击下面的链接查看 GitHub 上的发行说明。\nhttps://github.com/JetBrains/kotlin/releases/tag/v2.0.10\nKotlin 2.0.20 已发布 https://blog.jetbrains.com/kotlin/2024/08/kotlin-2-0-20-released/\nKotlin 2.0.20 版本也已经发布了,此版本的亮点主要包括:\nKotlin 语言方面:数据类的copy函数将具有与构造函数相同的可见性 Kotlin 语言方面:Context receiver被废弃,引入context parameters作为替代方案 Kotlin/Native:垃圾收集器支持并发标记,提升 Kotlin/Native 运行时性能 Gradle 改进:添加对 Gradle 8.6 到 8.8 版本的支持 Ktor 相关的更新 https://blog.jetbrains.com/kotlin/2024/08/kotlin-roundup-ktor-in-focus/\n本月 Kotlin 团队也带来了关于 Ktor 的更新,Ktor 是一个用于构建异步服务器和客户端的框架。本文介绍了 Ktor 的一些新特性,包括:\nKtor 3.0.0 Beta-2的发布:支持Kotlin 2.0,新的 kotlinx.io 库,改进的 HTTP 错误处理和 Ktor客户端支持 Kotlin/Wasm Ktor 生成器的更新:更新后的生成器提供了简便的项目配置和一键预览功能 Ktor 教程的更新:提供了更精确的指导和示例,以提供更加简洁和用户友好的体验 Fleet 1.39 版本发布 Fleet 1.39 版本已发布,带来了一些新特性和改进,具体包括以下内容:\n无需打开文件夹的智能模式: 现在可以在不打开文件夹的情况下打开文件并使用智能模式。 文件比较功能(版本1.39): 新版提供了文件比较功能。 结构工具窗口: 新的结构工具窗口提供了查看和导航大文件结构的专用界面,比使用结构弹出窗口更方便。 自动语言检测: Fleet 1.39提供了对未命名文件的自动语言检测功能。只需将代码添加到临时文件中,Fleet就会检测出您正在编写的代码语言。 精选博客 基于Kotlin Multiplatform的鸿蒙跨平台开发实践 本文介绍了哔哩哔哩使用 Kotlin Multiplatform(KMP)进行鸿蒙跨平台应用开发的实践,具体内容包括:\n技术选型背景介绍:文章首先概述了鸿蒙系统 Harmony Next 版本的特点 技术选型过程:详细介绍了 KMP 的原理、与鸿蒙系统的兼容性以及选择 KMP 的原因 KMP 在鸿蒙 App 中的应用:介绍了 Kotlin 与 JS 交互,Kotlin 协程,如何在 Kotlin 代码中使用鸿蒙 API,以及如何在鸿蒙 App 使用 Kotlin 代码 Skip : 一个将 Swift 代码转译为 Kotlin 的框架 用 Swift 写 Android App ?来了解下 Skip 原生级跨平台框架 熟悉 Kotlin 的小伙伴都知道,通过 Kotlin/Native 将 Kotlin 代码运行到 iOS 平台已经是一个非常成熟的方案。但是,如果你有大量的 Swift 代码,想要跨平台运行到 Android 平台,又该如何处理呢?\n本文就介绍了一个名为 Skip 的框架,它可以将 Swift/SwiftUI 转译为 Kotlin/Compose 代码,从而实现 Swift 代码在 Android 平台的运行。Skip 框架底层采用原生平台框架,核心是 Swift to Kotlin 转译器,转译后的代码可读可调试,甚至支持跨平台组件嵌入和从 Xcode 构建错误消息跳转到 Kotlin 文件。\n如何扩展Result,让你的代码更简洁 本文主要介绍了在 Kotlin 开发中如何扩展 Result 来处理不同的结果关系,以使代码更简洁,这种处理异常分支的方式叫做轨道编程(Railway Programming)。\n本文首先指出了 Kotlin 原生 Result 在处理多个 Result 关系时的不足,分别讲解了一对一依赖、一对多依赖、多对一依赖、选择关系以及 Result 集合等多种关系场景下的处理方法和相应扩展方法的实现。\n// before uploadFile().onSuccess { updateProfile(it).onSuccess { updateProfileUI() }.onFailure { showErrorPage() } }.onFailure { showErrorPage() } // after uploadFile() .andThen { updateProfile(it) } .onSuccess { updateProfileUI() } .onFailure { showErrorPage() } 为超越JVM而生?深入理解Kotlin Native的梦想与可能 Kotlin Native 是 Kotlin 多平台生态的关键一环,也是 Kotlin 开发者突破自身发展瓶颈的重要方向。\n本文依据 Kotlin Native 的源码,结合作者在运用 Kotlin Native 开发多平台应用的实战经验,详细为大家解读 Kotlin Native 在编译时和运行时的实现细节和实践技巧。本文由腾讯 PCG 代码委员会出品,可能是你在全网能看到的关于 Kotlin Native 分析最全面的干货文章。\n精选视频 从语言设计的角度看 Context parameters Context parameters from the language design perspective | Anastasiia Nekrasova\nContext parameters 是 Kotlin 最受期待的特性之一。去年,Kotlin 团队发布了一个初步版本,并收到了大量反馈。从那时起,Kotlin 团队一直在努力完善其设计。本视频概述了Context parameters 当前设计状态,具体包括以下内容:\n添加 Context parameters 背后的动机; Context parameters 如何融入现有语法; Context parameters 在实际应用中的例子。 社区活动 KotlinConf 2025 门票现已开售! https://blog.jetbrains.com/kotlin/2024/07/kotlinconf-2025-tickets-on-sale/\nKotlinConf 2025 的倒计时已正式开始,我们很高兴宣布,这场盛会的门票现已开始发售,活动将于 2025 年 5 月 21 日到 23 日在丹麦哥本哈根举行!\n这是由 JetBrains 组织的全球最大的 Kotlin 活动。 从今天开始,您可以预订 KotlinConf 2025 的门票,名额有限,售完即止。\n","permalink":"https://beijing-kug.github.io/news/kotlin-news-2024-08/","summary":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 2.0.10 已正式发布 Kotlin 2.0.10 现已正式发布。2.0.10 版本是 2.0 系列的第一个错误修复版本,此版本的主要目标是修复 2.0.0 版本中发现的错误。有关更多详细信息,请点击下面的链接查看 GitHub 上的发行说明。\nhttps://github.com/JetBrains/kotlin/releases/tag/v2.0.10\nKotlin 2.0.20 已发布 https://blog.jetbrains.com/kotlin/2024/08/kotlin-2-0-20-released/\nKotlin 2.0.20 版本也已经发布了,此版本的亮点主要包括:\nKotlin 语言方面:数据类的copy函数将具有与构造函数相同的可见性 Kotlin 语言方面:Context receiver被废弃,引入context parameters作为替代方案 Kotlin/Native:垃圾收集器支持并发标记,提升 Kotlin/Native 运行时性能 Gradle 改进:添加对 Gradle 8.6 到 8.8 版本的支持 Ktor 相关的更新 https://blog.jetbrains.com/kotlin/2024/08/kotlin-roundup-ktor-in-focus/\n本月 Kotlin 团队也带来了关于 Ktor 的更新,Ktor 是一个用于构建异步服务器和客户端的框架。本文介绍了 Ktor 的一些新特性,包括:\nKtor 3.0.0 Beta-2的发布:支持Kotlin 2.0,新的 kotlinx.io 库,改进的 HTTP 错误处理和 Ktor客户端支持 Kotlin/Wasm Ktor 生成器的更新:更新后的生成器提供了简便的项目配置和一键预览功能 Ktor 教程的更新:提供了更精确的指导和示例,以提供更加简洁和用户友好的体验 Fleet 1.","title":"Kotlin 技术月报 | 2024 年 8 月"},{"content":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 2.0.10-RC 版本已发布 https://github.com/JetBrains/kotlin/releases/tag/v2.0.10-RC\nKotlin 2.0.10-RC 版本已发布,2.0.10 版本是 2.0 系列的第一个错误修复版本,此版本的主要目标是修复 2.0.0 版本中发现的错误,而 RC 版本的发布也预示着 2.0.10 版本即将正式发布,想要升级到 Kotlin 2.0 但有所顾虑的开发者可以尝试这个版本。\nXcode-Kotlin 2.0 发布 Xcode-Kotlin 2.0 Release\nXcode-Kotlin 是 touchlab 开发的一个插件,允许开发者直接在 Xcode 中调试在 iOS 应用程序中运行的 Kotlin 代码。这为使用 Kotlin 共享代码的 iOS 开发人员提供了更流畅的开发和集成体验,对于并非每个人都直接编辑共享代码的大型团队来说,体验也更加便捷。\nXcode-Kotlin 2.0 已发布,具体包括以下更新:\n显著提高了调试性能(快达 5 倍)。 扩展了每个帧变量的信息。 可以在 Swift、Kotlin 和 Objective-C 代码中使用。 内置支持 List 和 Map,并且更多的支持正在开发中(例如 StateFlow,Set)。 精选博客 腾讯视频 KMP 跨 Android、iOS、鸿蒙实践 腾讯视频已将超 45% 的基础组件使用 KMP 技术改造为跨端开发。在 KMP 逻辑跨端的能力上,致力于使用 Compose UI 实现多端 UI 的统一。目前,已经实现线上 ComposeUI 跨 iOS 和 Android,线下实验版本实现跨鸿蒙。本分享详细介绍了相关技术细节和腾讯视频使用 KMP 的未来规划。\nKMP 在腾讯视频的应用 KMP 深入介绍 Kotlin/Native 适配鸿蒙及性能优化 Compose UI 适配鸿蒙 iOS 计划和 Compose 鸿蒙开源规划 Kotlin 协程的本质——记一次内部分享整理 本文是关于 Kotlin 协程本质的一次内部分享整理,适合 Kotlin 协程新手阅读,具体包括以下内容:\n协程定义:没有标准化定义,是可挂起和恢复的程序或函数,不是 Kotlin 独有的。 异步逻辑难点:线程切换影响逻辑把控,并发编程存在可见性等问题。 异步实现方式对比:回调存在取消处理困难和回调地狱问题,RxJava 强大但也有问题。 Kotlin 协程优势:能实现异步逻辑同步化和并发逻辑简单化。 协程本质:通过挂起(suspend)函数、Continuation、CPS 等实现,了解其挂起和恢复的机制。 相关概念:如 CoroutineScope 用于启动协程,Coroutine 表达运行上下文信息。 团队接入:需要有“专家”理解底层原理,建立代码规范,改造已有 API,不能期望解决一切问题。 资源推荐:提供了入门和进阶的相关学习资源。 通过 KCP 实现 val 声明变量的常量优化 通过KCP实现无为转变\n常量优化是一种优化技术,可以在编译时将变量的值替换为常量,从而提高程序的运行效率。在 Kotlin 中,编译器会对 const 声明的常量进行优化,但是对于 val 声明的变量,虽然是不可变的,但编译器却不会进行常量优化。本文介绍了如何通过 Kotlin 编译器插件 KCP 实现 val 声明变量的常量优化。\n精选视频 Kotlin 炉边漫谈 Podcast #17 腾讯 QQ 自研采用原生渲染的 KMP 框架 本期 Kotlin 炉边漫谈节目邀请到了腾讯 QQ 团队,负责开发跨端框架和业务落地的负责人,跟大家分享他们团队是如何借鉴 RN 思路,并通过 KMP 技术,打造出基于原生控件、安装包极小的跨端框架。也会分享开发框架时曾面临的挑战、框架作者与业务开发的差别、如何在公司内部做技术推广等落地经验。\n相比与其它跨端方案,QQ KMP 跨端框架在安装包大小、性能、原生开发体验等方面有着较为明显的优势,值得开发者关注学习。\n社区活动 KotlinConf Global 2024 上海分享会回放 KotlinConf Global 2024 上海分享会回放已发布,本次分享会主要内容包括:\nKMP 搭建动态化工具链 使用 context receivers 和 suspend 开发现代软件 KMP + React Native 跨端业务逻辑共享实战 ","permalink":"https://beijing-kug.github.io/news/kotlin-news-2024-07/","summary":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 2.0.10-RC 版本已发布 https://github.com/JetBrains/kotlin/releases/tag/v2.0.10-RC\nKotlin 2.0.10-RC 版本已发布,2.0.10 版本是 2.0 系列的第一个错误修复版本,此版本的主要目标是修复 2.0.0 版本中发现的错误,而 RC 版本的发布也预示着 2.0.10 版本即将正式发布,想要升级到 Kotlin 2.0 但有所顾虑的开发者可以尝试这个版本。\nXcode-Kotlin 2.0 发布 Xcode-Kotlin 2.0 Release\nXcode-Kotlin 是 touchlab 开发的一个插件,允许开发者直接在 Xcode 中调试在 iOS 应用程序中运行的 Kotlin 代码。这为使用 Kotlin 共享代码的 iOS 开发人员提供了更流畅的开发和集成体验,对于并非每个人都直接编辑共享代码的大型团队来说,体验也更加便捷。\nXcode-Kotlin 2.0 已发布,具体包括以下更新:\n显著提高了调试性能(快达 5 倍)。 扩展了每个帧变量的信息。 可以在 Swift、Kotlin 和 Objective-C 代码中使用。 内置支持 List 和 Map,并且更多的支持正在开发中(例如 StateFlow,Set)。 精选博客 腾讯视频 KMP 跨 Android、iOS、鸿蒙实践 腾讯视频已将超 45% 的基础组件使用 KMP 技术改造为跨端开发。在 KMP 逻辑跨端的能力上,致力于使用 Compose UI 实现多端 UI 的统一。目前,已经实现线上 ComposeUI 跨 iOS 和 Android,线下实验版本实现跨鸿蒙。本分享详细介绍了相关技术细节和腾讯视频使用 KMP 的未来规划。","title":"Kotlin 技术月报 | 2024 年 7 月"},{"content":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 KotlinConf 分享回放已全部发布 All KotlinConf Recordings Are Now Available. Enjoy!\n现在,您可以在 KotlinConf 官方网站上找到 KotlinConf’24 的所有回放:https://kotlinconf.com/talks/\nKotlin 2.0.20-Beta1 版本已发布 Kotlin 2.0.20-Beta1 版本已发布,更新内容也主要是一些 bug 修复:https://github.com/JetBrains/kotlin/releases\n你可能会好奇,为什么 2.0.10 还没有发布就发布了 Kotlin 2.0.20-Beta1? 还会有 2.0.10 吗?\n自 Kotlin 2.0.0 起,Jetbrains 发布以下类型的版本:\n语言版本(2.x.0),带来语言的重大变化并包括工具更新。每6个月发布一次。 工具版本(2.x.20),在语言版本之间发布,包括工具更新、性能改进和错误修复。在相应的语言版本发布后3个月发布。 错误修复版本(2.x.yz),包括针对工具版本的错误修复。这些版本没有确切的发布时间表。 对于每个语言和工具版本,Jetbrains 还会发布几个预览(EAP)版本,供您在正式发布之前尝试新功能。因此不必担心,Kotlin 2.0.10 版本将随后发布。\n精选博客 采用 Kotlin Multiplatform 做跨平台 KMP 作为跨平台框架,到底有没有技术生命力,是否要选择它来作为自己未来的发展方向?本文借鉴左耳朵耗子在“如何选择技术”中提出的观点来考虑:\nKotlin Symbol Processing使用与原理剖析 Kotlin Symbol Processing (KSP) 是一个可用于开发轻量级编译器插件的API,与Kotlin Annotation Processing Tool(KAPT)相似,但是却可以更高效地处理注解,并提供更好的性能,使用 KSP 的注释处理器的运行速度最多可达两倍,而且可以支持多平台。\n本文详细介绍了 KSP 的使用与从 Kapt 迁移过来的步骤,具体包括如下内容:\n为什么选择KSP KSP能得到什么 KAPT迁移到KSP KSP 的使用 KSP 增量编译 KSP 对 Java 的支持 让 Kotlin Inline 可以构造 NewInstance Kotlin 的 Inline 是一个很重要的能力,它能够极大的简化我们的开发,我们能够使用 Inline 做很多事情,同时 reified 也是一个重要的能力,它能够让类型“实”化,提供更加安全的 as, ::class 等在常规的 Java 泛型中不安全的能力。但 reified 缺失了一个重要的能力:构造一个新对象。\n而在这种能力的缺失下,通常来说我们会使用 ::class.java 拿到对应 Java Class 之后反射 newInstance 来创建对象,我们都知道反射是低效的。\n本文介绍了如何使用 Kotlin 编译器插件实现让 Kotlin Inline 可以构造 NewInstance,更多详细信息可见:https://github.com/zsqw123/kotlin-newInstance\ninline fun \u0026lt;reified T : ViewModel\u0026gt; viewModel(): ReadOnlyProperty\u0026lt;Activity, T\u0026gt; { val factory = { newInstance\u0026lt;T\u0026gt;() } return ReadOnlyProperty { _, _ -\u0026gt; factory() } } class MyActivity : Activity() { val fooViewModel: FooViewModel by viewModel() } 联合类型可能为类型系统带来的问题 The problem of union types for type systems\nKotlin 将引入一种有限形式的联合类型: Union types for errors。很多人会好奇,为什么 Kotlin 不引入完整的联合类型支持呢?\n联合类型(如 Int | String)可以提高代码的表达能力,但也增加了类型系统的复杂性,尤其是在处理泛型时。事实上,在存在联合类型时,类型推导是 NP-hard 的。更多详细信息可见:Revamping and Extending Kotlin\u0026rsquo;s Type System | Ross Tate\n工程化视角的 Kotlin Multiplatform核心解读及优化 本文以工程化视角介绍了哔哩哔哩技术团队在使用 Kotlin Multiplatform 技术时的实践与优化方案。\n文章首先介绍了Kotlin作为编程语言的特点,包括默认可见性为public、编译器的功能,以及插件系统在扩展语言能力方面的作用。\n同时文章总结了 KMP 在工程化中的应用和挑战,并提出了B站针对KMP的优化实践,包括构建系统从Gradle替换为Bazel,以及针对Kotlin-Core的能力复原和生态融合。文章指出,虽然这一过程带来了额外的学习和维护成本,但整体上提高了工程的可靠性和效率。\n精选视频 Kotlin 2.0 都有哪些新特性? Kotlin 2.0 : K2 编译器的更新\n本视频细致的讲解了 Kotlin 2.0 都做了哪些更新,带来了哪些新特性。具体包括以下内容:\nKotlin K2 编译器有哪些更新? Kotlin 跨平台有哪些更新? Gradle 相关有哪些更新? Kotlin 标准库有哪些更新? 如何让 Compose 运行到智能台灯开关上? Compose UI for\u0026hellip; a light switch | Jake Wharton\nCompose UI 可以运行在安卓、iOS、桌面和网页上,但在这次分享中,Jake Wharton 讲述了如何在基于嵌入式 Linux 的智能灯开关上运行 Compose UI。\n本次分享详细介绍了发现设备后门的过程,如何在设备上运行自定义软件,如何在嵌入式 Linux 上运行 Kotlin 和 Compose UI,最后为开关开发我们自己的 App。\n社区活动 KotlinConf Global 相关活动 随着 KotlinConf 活动圆满落幕,全国各地,包括北京、上海、深圳等城市的 KotlinConf Global 分会场活动也接踵而至。以下是一些活动的链接。\n活动回顾 | 2024 KotlinConf Global 北京分享会 深圳线下活动|KotlinConf’24 Global 上海线下活动|KotlinConf Global Shanghai 2024 ","permalink":"https://beijing-kug.github.io/news/kotlin-news-2024-06/","summary":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 KotlinConf 分享回放已全部发布 All KotlinConf Recordings Are Now Available. Enjoy!\n现在,您可以在 KotlinConf 官方网站上找到 KotlinConf’24 的所有回放:https://kotlinconf.com/talks/\nKotlin 2.0.20-Beta1 版本已发布 Kotlin 2.0.20-Beta1 版本已发布,更新内容也主要是一些 bug 修复:https://github.com/JetBrains/kotlin/releases\n你可能会好奇,为什么 2.0.10 还没有发布就发布了 Kotlin 2.0.20-Beta1? 还会有 2.0.10 吗?\n自 Kotlin 2.0.0 起,Jetbrains 发布以下类型的版本:\n语言版本(2.x.0),带来语言的重大变化并包括工具更新。每6个月发布一次。 工具版本(2.x.20),在语言版本之间发布,包括工具更新、性能改进和错误修复。在相应的语言版本发布后3个月发布。 错误修复版本(2.x.yz),包括针对工具版本的错误修复。这些版本没有确切的发布时间表。 对于每个语言和工具版本,Jetbrains 还会发布几个预览(EAP)版本,供您在正式发布之前尝试新功能。因此不必担心,Kotlin 2.0.10 版本将随后发布。\n精选博客 采用 Kotlin Multiplatform 做跨平台 KMP 作为跨平台框架,到底有没有技术生命力,是否要选择它来作为自己未来的发展方向?本文借鉴左耳朵耗子在“如何选择技术”中提出的观点来考虑:\nKotlin Symbol Processing使用与原理剖析 Kotlin Symbol Processing (KSP) 是一个可用于开发轻量级编译器插件的API,与Kotlin Annotation Processing Tool(KAPT)相似,但是却可以更高效地处理注解,并提供更好的性能,使用 KSP 的注释处理器的运行速度最多可达两倍,而且可以支持多平台。\n本文详细介绍了 KSP 的使用与从 Kapt 迁移过来的步骤,具体包括如下内容:","title":"Kotlin 技术月报 | 2024 年 6 月"},{"content":"2024 KotlinConf Global 北京分享会结束了,感谢所有参与其中的讲师、参会者、工作人员。\n我们将讲师的演讲视频与讲义发布在 B 站与谷歌 drive ,方便大家回顾\n演讲回看 KotlinConf 2024 Copenhagen 场见闻 今年刘银龙老师前往 Copenhagen 现场参加了 KotlinConf,在本次 Global 活动与大家分享交流了这次美妙的旅程,包括前期准备、现场见闻、个人感受等,还有带回来的Kotlin周边纪念品等与大家分享。\n《KotlinConf 2024 Copenhagen 场见闻》 PPT 链接\n鸿蒙 KMP \u0026amp; Compose 探索 鸿蒙不再支持 AOSP 之后,客户端从双端演变为三端,可以预见未来对于跨端代码复用的需求将愈发强烈。作为 Android 开发者的我们,是否可以低成本的利用现有技术栈实现鸿蒙跨端开发呢?本次分享介绍了 KMP 在鸿蒙上的接入,并探索 Compose 在鸿蒙上应用的可能性,希望在鸿蒙跨平台能力上能够给大家带来一些新的思路与方向。\n《鸿蒙 KMP \u0026amp; Compose 探索》 PPT 链接\nKMP 到鸿蒙:基于 Cinterop 和 KSP 简化跨语言交互的实践 KMP 应用到鸿蒙平台涉及 ArkTS \u0026lt;-\u0026gt; C \u0026lt;-\u0026gt; Kotlin 的跨语言交互,跨语言交互有很多难点,接口、List、Map 等非基本类型支持难度大,内存管理成问题,桥接代码复杂难写。本次分享主要介绍快手团队基于 KMP 提供的 Cinterop 工具简化 ArkTS \u0026lt;-\u0026gt; C \u0026lt;-\u0026gt; Kotlin 的跨语言交互流程,并基于 KSP 自动生成跨语言桥接代码的实践。\n《KMP 到鸿蒙:基于 Cinterop 和 KSP 简化跨语言交互的实践》 PPT 链接\nCompose 是如何实现跨平台的? 本次分享主要介绍了 Kotlin 跨平台的基本原理,Compose 的基本组成结构以及 Compose 实现跨平台要解决的问题。\n《Compose 是如何实现跨平台的?》PPT 链接\n精彩瞬间 ","permalink":"https://beijing-kug.github.io/events/kotlinconf-2024-callback/","summary":"2024 KotlinConf Global 北京分享会结束了,感谢所有参与其中的讲师、参会者、工作人员。\n我们将讲师的演讲视频与讲义发布在 B 站与谷歌 drive ,方便大家回顾\n演讲回看 KotlinConf 2024 Copenhagen 场见闻 今年刘银龙老师前往 Copenhagen 现场参加了 KotlinConf,在本次 Global 活动与大家分享交流了这次美妙的旅程,包括前期准备、现场见闻、个人感受等,还有带回来的Kotlin周边纪念品等与大家分享。\n《KotlinConf 2024 Copenhagen 场见闻》 PPT 链接\n鸿蒙 KMP \u0026amp; Compose 探索 鸿蒙不再支持 AOSP 之后,客户端从双端演变为三端,可以预见未来对于跨端代码复用的需求将愈发强烈。作为 Android 开发者的我们,是否可以低成本的利用现有技术栈实现鸿蒙跨端开发呢?本次分享介绍了 KMP 在鸿蒙上的接入,并探索 Compose 在鸿蒙上应用的可能性,希望在鸿蒙跨平台能力上能够给大家带来一些新的思路与方向。\n《鸿蒙 KMP \u0026amp; Compose 探索》 PPT 链接\nKMP 到鸿蒙:基于 Cinterop 和 KSP 简化跨语言交互的实践 KMP 应用到鸿蒙平台涉及 ArkTS \u0026lt;-\u0026gt; C \u0026lt;-\u0026gt; Kotlin 的跨语言交互,跨语言交互有很多难点,接口、List、Map 等非基本类型支持难度大,内存管理成问题,桥接代码复杂难写。本次分享主要介绍快手团队基于 KMP 提供的 Cinterop 工具简化 ArkTS \u0026lt;-\u0026gt; C \u0026lt;-\u0026gt; Kotlin 的跨语言交互流程,并基于 KSP 自动生成跨语言桥接代码的实践。","title":"活动回顾 | 2024 KotlinConf Global 北京分享会"},{"content":"6月15日,北京 Kotlin 用户组将举办线下聚会,欢迎您的到来。\n这场活动是 KotlinConf Global 活动的一部分,我们邀请了三位嘉宾来分享现场参加 KotlinConf 的体验以及 Kotlin Multiplatform 跨鸿蒙等方面的实践经验。\n大家可以在现场与各位 Kotlin 技术爱好者一起交流讨论,线下面基,点击报名链接或者扫描文末二维码即可报名\n活动简介 今年 5 月下旬,备受期待的年度 KotlinConf 大会在丹麦哥本哈根隆重举行。本届大会汇聚了 102 位杰出嘉宾,他们带来了 77 场精彩分享与 6 场深入研讨会。这场科技界的盛宴吸引了来自全球各地的 2000 名开发者,得到了 19 位卓越合作伙伴的支持,并由 47 名热心志愿者共同助力。\n考虑到许多开发者无法亲临现场,JetBrains 官方发起了全球性的 KotlinConf Global 活动,通过 JetBrains 认证的 Kotlin User Group(KUG)在各地举办当地活动。这一活动旨在加强当地 Kotlin 开发者之间的联系,提升技术能力与交流。\n精彩内容 《KotlinConf 2024 Copenhagen现场见闻》 讲师简介:刘银龙,美团移动端开发工程师,KMP 技术专家。\n内容简介:今年有机会来现场参加 KotlinConf,本次 Global 活动将与大家分享交流这次美妙的旅程,包括前期准备、现场见闻、个人感受等,还有带回来的Kotlin周边纪念品等你来领取呦。\n《鸿蒙 KMP \u0026amp; Compose 探索》 讲师简介:吴霖鹏,Android 开发工程师。\n内容简介:鸿蒙不再支持 AOSP 之后,客户端从双端演变为三端,可以预见未来对于跨端代码复用的需求将愈发强烈。作为 Android 开发者的我们,是否可以低成本的利用现有技术栈实现鸿蒙跨端开发呢?本次分享将介绍 KMP 在鸿蒙上的接入,并探索 Compose 在鸿蒙上应用的可能性,希望在鸿蒙跨平台能力上能够给大家带来一些新的思路与方向。\n《KMP 到鸿蒙:基于 Cinterop 和 KSP 简化跨语言交互的实践》 讲师简介:车林阳,快手移动端基础架构团队工程师。\n内容简介:KMP 应用到鸿蒙平台涉及 ArkTS \u0026lt;-\u0026gt; C \u0026lt;-\u0026gt; Kotlin 的跨语言交互,跨语言交互有很多难点,接口、List、Map 等非基本类型支持难度大,内存管理成问题,桥接代码复杂难写。本次分享主要介绍快手团队基于 KMP 提供的 Cinterop 工具简化 ArkTS \u0026lt;-\u0026gt; C \u0026lt;-\u0026gt; Kotlin 的跨语言交互流程,并基于 KSP 自动生成跨语言桥接代码的实践。\n时间地点 时间:2024 年 6 月 15 日,14:00 - 17:00 地点:北京市朝阳区望京SOHO T2C座(在 1 楼抵达即可,组织者会带领大家上去) 报名方式 我们非常欢迎您报名成为观众,并与我们一同聆听他人的分享、参与热烈的技术探讨。观众报名对我们而言非常重要,因为我们需要根据观众人数申请合适的活动场地、准备活动奖品,并采购零食和饮料等。因此如果您有意参加的话,请您填写下方的观众报名表。\n报名链接:2024 KotlinConf Global 北京分享会线下观众报名表\n扫码报名 注意:报名表填写完成后请加组织者微信 RicardoJiang2024 并发送消息:北京 KUG 分享会报名确认。确认后才是真正报名成功,谢谢。\n组织者联系方式 如果您决定报名参加活动,请添加组织者的微信号,以便在活动当日前往正确的地点。如果您有任何疑问或需要帮助,请随时联系组织者:\n微信号:RicardoJiang2024 公众号:关注微信公众号“程序员江同学”,点击技术讨论 ","permalink":"https://beijing-kug.github.io/events/kotlinconf-2024/","summary":"6月15日,北京 Kotlin 用户组将举办线下聚会,欢迎您的到来。\n这场活动是 KotlinConf Global 活动的一部分,我们邀请了三位嘉宾来分享现场参加 KotlinConf 的体验以及 Kotlin Multiplatform 跨鸿蒙等方面的实践经验。\n大家可以在现场与各位 Kotlin 技术爱好者一起交流讨论,线下面基,点击报名链接或者扫描文末二维码即可报名\n活动简介 今年 5 月下旬,备受期待的年度 KotlinConf 大会在丹麦哥本哈根隆重举行。本届大会汇聚了 102 位杰出嘉宾,他们带来了 77 场精彩分享与 6 场深入研讨会。这场科技界的盛宴吸引了来自全球各地的 2000 名开发者,得到了 19 位卓越合作伙伴的支持,并由 47 名热心志愿者共同助力。\n考虑到许多开发者无法亲临现场,JetBrains 官方发起了全球性的 KotlinConf Global 活动,通过 JetBrains 认证的 Kotlin User Group(KUG)在各地举办当地活动。这一活动旨在加强当地 Kotlin 开发者之间的联系,提升技术能力与交流。\n精彩内容 《KotlinConf 2024 Copenhagen现场见闻》 讲师简介:刘银龙,美团移动端开发工程师,KMP 技术专家。\n内容简介:今年有机会来现场参加 KotlinConf,本次 Global 活动将与大家分享交流这次美妙的旅程,包括前期准备、现场见闻、个人感受等,还有带回来的Kotlin周边纪念品等你来领取呦。\n《鸿蒙 KMP \u0026amp; Compose 探索》 讲师简介:吴霖鹏,Android 开发工程师。\n内容简介:鸿蒙不再支持 AOSP 之后,客户端从双端演变为三端,可以预见未来对于跨端代码复用的需求将愈发强烈。作为 Android 开发者的我们,是否可以低成本的利用现有技术栈实现鸿蒙跨端开发呢?本次分享将介绍 KMP 在鸿蒙上的接入,并探索 Compose 在鸿蒙上应用的可能性,希望在鸿蒙跨平台能力上能够给大家带来一些新的思路与方向。","title":"线下活动 | 2024 KotlinConf Global 北京分享会"},{"content":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 2.0 已发布 What\u0026rsquo;s new in Kotlin 2.0.0\nKotlin 2.0 已正式发布,具体包括以下内容:\nK2 编译器正式发布稳定版,带来更快的编译速度与更好的类型推断 Compose 编译器插件代码已合并到 Kotlin 仓库中 默认使用 invokedynamic 来生成 lambda 表达式,相比匿名内部类方式减少了包体积 kotlinx-metadata-jvm 库现已稳定,该库可用于读取与修改 metadata 支持使用 Instruments 工具监控 Kotlin/Native GC 性能 Kotlin/Wasm 支持按名字导出符号 Kotlin/Wasm 支持通过 @JsExport 导出无符号基础类型 enumEntries 方法已稳定,推荐使用其代替 enumValues 方法 Compose Multiplatform 1.6.10 版本已发布 Compose Multiplatform 1.6.10 – iOS Beta, Web Alpha, Lifecycle, Navigation, and More\nCompose Multiplatform 版本已发布,具体包括以下内容:\nCompose Multiplatform for iOS 进入 beta 状态 Compose Multiplatform for Web 进入 alpha 状态 多平台资源 API 现已稳定,并且带来了一些期待已久的改进 Jetpack Compose Navigation 库支持 Compose Multiplatform Lifecycle 与 ViewModel 库支持 Compose Multiplatform 新的 Compose 编译器插件,代码合并到 Kotlin 仓库中 支持 Kotlin 2.0 Jetpack Compose 编译器插件代码迁移到 Kotlin 仓库中 随着 Kotlin 2.0 的即将发布,Jetpack Compose 编译器插件的代码也将迁移到 Kotlin 仓库中。\n这意味着每次 Kotlin 发布新版本时,都会有一个相应的 Compose 编译器插件同时发布。您在升级 Compose 应用中的 Kotlin 版本之前,将不再需要等待相应的 Compose 编译器插件发布。\nCompose 编译器插件的版本将 Kotlin 版本相匹配。因此,编译器插件版本将跳至 2.0.0。\nGoogle 宣布支持 KMP Android Support for Kotlin Multiplatform to Share Business Logic Across Mobile, Web, Server, and Desktop Platforms\n谷歌宣布 Android 支持 Kotlin Multiplatform (KMP),使开发者可以在移动端、网页、服务器和桌面平台之间共享业务逻辑。\nAndroid 团队计划继续与 JetBrains、Google 工程团队和社区在各种项目上合作,包括:\n扩展和稳定 Jetpack 库对 Kotlin Multiplatform 的支持 在 Jetpack 库中支持 Wasm 平台目标 Kotlin/Native 构建性能优化 Kotlin/Native 调试体验优化 在在Android Studio 中扩展对 Kotlin Multiplatform 的支持 Room 支持 Kotlin 跨平台 Room 库已支持 Kotlin 跨平台,更多详细信息可见:https://developer.android.com/kotlin/multiplatform/room\n精选博客 探讨跨平台技术与跨平台UI框架及Kotlin Multiplatform在bilibili的实践 本文深入探讨了当今移动开发领域中几种关键的跨平台编程语言(包括 Kotlin、JavaScript、Dart、C++ 和 Swift)在 iOS、Android 和 HarmonyOS 这三个平台上的表现。文章采用了实际业务中常用的 protobuf 文件作为测试基准,着重评估了这些语言在序列化和反序列化操作上的性能表现。研究结果显示,Kotlin 在 iOS 平台上的表现与原生 Swift 相媲美。\n此外,文章还探讨了跨平台语言与跨平台 UI 框架之间的联系,以及这些语言如何实现高效的双向互操作性。文章进一步阐述了 Bilibili 为何选择 Kotlin 作为其跨平台开发的基石。文中指出,跨平台开发能够显著提升研发效率、降低成本、确保多平台应用的一致性,并减少对特定平台的依赖。Bilibili 之所以青睐 Kotlin,是因为它不仅具备强大的双向互操作能力、现代化的语法特性,而且在性能上表现不俗,加之拥有活跃且不断发展的社区生态。\n2024 Google I/O 宣布正式支持 Kotlin Multiplatform ,那 KMP 是什么?它的未来在哪里? 本文总结了 2024 年 Google I/O 大会对 Kotlin Multiplatform(KMP)的支持。\nKMP 是 JetBrains 开发的跨平台开发工具,能让开发者用 Kotlin 编写可在多个平台运行的代码。文章讨论了 KMP 的应用场景,与 Compose Multiplatform 的区别,以及 Google 和JetBrains 对 Jetpack 库的 KMP 支持。\n同时文章中指出:最适合你业务的的才是最重要的。KMP 将 Kotlin 编译为特定于平台的二进制文件(如 Android、iOS、JVM、WASM),所以你可以用最小的开销调用特定于平台的 API,并利用 Compose MultiPlatform 实现 UI。与其他跨平台框架一样,KMP也有其特定的适用场景,开发者应根据各自业务需求来选择最合适的开发框架。\n精选视频 KotlinConf 开幕演讲 KotlinConf'24 - Keynote\nKotlinConf 开幕演讲,官宣了很多重量级信息,包括以下内容:\nKotlin 2.0 版本发布,并且 K2 编译器正式稳定 Compose Multiplatform for iOS 现已进入 beta 版本 Compose Multiplatform for Web 现已进入 alpha 版本 介绍了 4 个将在 Kotlin 新版本推出的语言特性 Kotlin 2.0 之后将推出哪些新的语言特性 Kotlin Language Features in 2.0 and Beyond - Michail Zarečenskij\n此前由于 K2 编译器一直在开发中,Kotlin 在很长的一段时间内没有再推出什么大的语言特性。随着 Kotlin 2.0 的发布,K2 编译器也正式稳定了,本视频介绍了在 Kotlin 2.0 以及之后将推出的一些新的语言特性:\nguards: pattern matching without binding Context-sensitive resolution Extensible data arguments Union types for erros Explict backing fields 社区活动 KotlinConf 2024 活动正式举办 KotlinConf 2024 在丹麦首都哥本哈根盛大落幕。这一年度盛事,作为 Kotlin 社区最重要的集会,吸引了全球数千名 Kotlin 开发者齐聚一堂。这个被誉为开发者们的“快乐家园”在三天的时间里充满了技术分享与热情交流,参与者们共同见证了 Kotlin 语言的繁荣与发展。\nJetBrains Kotlin 团队成员在主题演讲中,围绕 Kotlin Multiplatform(KMP)、Compose Multiplatform、语言特性、语言生态、Kotlin 和 AI 的结合等主题,分享了最新进展与洞见。来自 Meta、Google、Amazon 等行业巨头的嘉宾们,也带来了他们在实际生产环境中积累的宝贵经验。\n","permalink":"https://beijing-kug.github.io/news/kotlin-news-2024-05/","summary":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 2.0 已发布 What\u0026rsquo;s new in Kotlin 2.0.0\nKotlin 2.0 已正式发布,具体包括以下内容:\nK2 编译器正式发布稳定版,带来更快的编译速度与更好的类型推断 Compose 编译器插件代码已合并到 Kotlin 仓库中 默认使用 invokedynamic 来生成 lambda 表达式,相比匿名内部类方式减少了包体积 kotlinx-metadata-jvm 库现已稳定,该库可用于读取与修改 metadata 支持使用 Instruments 工具监控 Kotlin/Native GC 性能 Kotlin/Wasm 支持按名字导出符号 Kotlin/Wasm 支持通过 @JsExport 导出无符号基础类型 enumEntries 方法已稳定,推荐使用其代替 enumValues 方法 Compose Multiplatform 1.6.10 版本已发布 Compose Multiplatform 1.6.10 – iOS Beta, Web Alpha, Lifecycle, Navigation, and More\nCompose Multiplatform 版本已发布,具体包括以下内容:\nCompose Multiplatform for iOS 进入 beta 状态 Compose Multiplatform for Web 进入 alpha 状态 多平台资源 API 现已稳定,并且带来了一些期待已久的改进 Jetpack Compose Navigation 库支持 Compose Multiplatform Lifecycle 与 ViewModel 库支持 Compose Multiplatform 新的 Compose 编译器插件,代码合并到 Kotlin 仓库中 支持 Kotlin 2.","title":"Kotlin 技术月报 | 2024 年 5 月"},{"content":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 IntelliJ IDEA 已支持开启 K2 模式 K2 Kotlin Mode (Alpha) in IntelliJ IDEA\n从2024.1版本开始,IntelliJ IDEA 提供了一个可选的 K2 模式,开启 K2 模式后将获得以下收益:\nKotlin 新特性支持:新模式将支持仅在 K2 Kotlin 编译器中提供的未来语言特性。 代码分析的稳定性:得益于架构的重构,IDE 功能的质量和可靠性应该会得到提升,代码分析也将更加稳定。 更优的 IDE 性能:Kotlin 代码高亮和 Kotlin 代码补全的速度已显著提高。 全行代码补全:新版 JetBrains IDE 自带的 AI 神器 AI 编程仍然是一个众说纷纭的话题,但越来越多的开发者开始将 AI 融入他们的日常工作流中。\nJetBrains IDE v2024.1 版本中推出了一项新功能:全行代码补全。这个功能利用AI技术,在本地运行,不需要互联网连接,也不会发送任何数据到互联网上。它支持多种编程语言,包括Java、Kotlin、Python等,并且已经集成到多个JetBrains IDE中,如IntelliJ IDEA、PyCharm等。\n全行代码补全功能已包含在 JetBrains IDE 的有效订阅中,无需额外费用,只需确保您使用的是 v2024.1 或更高版本即可。\nKotlin 2.0.0-RC1 版本已发布 What\u0026rsquo;s new in Kotlin 2.0.0-RC1\nKotlin 2.0.0-RC1 版本已经发布!RC 表示该版本是预发布版本,意味着该版本已经接近稳定版,但可能还存在一些小问题需要修复。\n这个版本主要集中在稳定新的 Kotlin K2 编译器,自 1.9.20 版本后,其所有目标都已达到 Beta 状态,并将在 Kotlin 2.0 版本中最终稳定。此外,Kotlin/Wasm 和 Kotlin/JS 中也有新的特性,同时优化了 Gradle 构建工具。\n适合所有水平的学习者的 Kotlin 学习指南 A Comprehensive Kotlin Learning Guide for All Levels\n任何领域的新手通常都会遇到一个基本问题:他们不知道自己不知道什么。本文旨在帮助自学的 Kotlin 学习者更好地了解学习路线,让他们可以从第一个 main 函数到轻松处理协程。\n这个指南适用于任何对 Kotlin 语言感兴趣的人,无论你有多少经验,无论你是刚开始学习第一门语言的新手,还是希望找到编程工作的人,或者是在特定领域希望加深知识的经验丰富的开发者,本文都希望对你有所帮助。\nCompose Multiplatform 1.6.10-beta01 已支持 Lifecycle ! What\u0026rsquo;s new in Compose Multiplatform 1.6.10-beta01\nCompose Multiplatform 1.6.10-beta01 已发布,具体包括以下内容:\n多模块项目支持:现在可以在任何 Gradle 模块和 source set 中存储资源,并发布包含资源的项目和库。 实验性导航库:基于 Jetpack Compose 的跨平台 navigation 库现已可用。 Lifecycle 库:基于 Jetpack Lifecyle 的跨平台 Lifecycle 库现在可用,提供了一个实验性的跨平台 ViewModel 实现,并包括一个可以自定义实现的公共 LifecycleOwner 接口。 精选博客 使用KMP \u0026amp; Compose开发鸿蒙应用 HarmonyOS NEXT 不再支持 AOSP,仅支持鸿蒙内核和鸿蒙系统的应用,各大 App 也纷纷投入到了原生鸿蒙应用的开发中。开发者需要考虑的平台已经从原来的双端演变为三端。这无疑将增加研发的复杂性和成本,由此可以预见的是未来对于跨端代码复用的诉求将越发强烈。\n本文详细探讨了在鸿蒙系统上接入 KMP 以及使用 Compose 的可能性,并在此基础上产出了两个库:HarmonyDom 和 compose-ez-ui,以实现在鸿蒙系统上使用 Compose。\n《Android 构建与架构实战》实体书已上线 《Android 构建与架构实战: 使用 Kotlin 的实用 Gradle 和 AGP 技能》实体书已上线。\n本书以 Kotlin 为编程语言,深入剖析 Gradle 插件与 AGP 及相关构建工具的开发,涵盖了AAPT2(Android资源打包工具)、KSP(Kotlin符号处理)以及字节码操作工具等领域。\n通过阅读本书,您将在众多实践演示和案例研究的指导下,掌握如何创建 Gradle 插件和任务,如何有效地与AGP API进行交互,以及设计、测试和调试Android构建的最优实践。本书不仅阐明了“是什么”和“如何做”,更深入讲解了“为什么”:揭示了 Gradle 和 AGP 设计背后的原理。\n更多详细信息可见:《 Extending Android Builds: Pragmatic Gradle and AGP Skills with Kotlin 》\nPexels: 一个支持所有平台的图片查看器 https://github.com/linroid/Pexels\n使用用 Compose Multiplatform 开发的图片查看器,支持 Desktop(Linux, Windows, macOS),Web,iOS,Android 等所有平台,支持分页,下拉刷新,自适应界面,图片缩放,切换动画,数据缓存等特性。本项目很好的展示了 Compose Multiplatform 目前所具备的各种能力,感兴趣的同学可以看下。\nK2 编译器迁移指南 K2 compiler migration guide\nK2 编译器迁移指南,具体包括以下内容:\n介绍了新版 K2 编译器的优势:包括更快的编译速度、更好的类型推断、更好的 IDE 支持等。 重点介绍了您在迁移过程中可能遇到的问题,以及如何调整代码以适应新的编译器。 介绍了如何开启 K2 编译器,以及在遇到问题时如何回滚到上一个版本。 社区活动 QCon 分享:Kotlin/WebAssembly 的探索之路 Kotlin 作为多平台开发的热门语言,除了拥有良好的生态、成熟的开发工具外,也不断探索更多运行平台的可能。Kotlin/Wasm 项目将 Kotlin 语言与 WebAssembly 技术相结合,让开发者能够开发安全、高效、可移植的 WebAssembly 应用。随着 WebAssembly 的未来发展,Kotlin/Wasm 还能将程序运行在浏览器之外,在更多应用场景下落地。\n本演讲将介绍 Kotlin/Wasm 项目的最新进展,包括如何在现有项目内加入 Kotlin/Wasm 支持、开发工具链及并实际演示以 Kotlin/Wasm 运行 Compose UI 代码,展示 Kotlin 多平台开发的魅力。\n分享 PPT 在线链接可见:Kotlin+WebAssembly+的探索之路-范圣佑\n","permalink":"https://beijing-kug.github.io/news/kotlin-news-2024-04/","summary":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 IntelliJ IDEA 已支持开启 K2 模式 K2 Kotlin Mode (Alpha) in IntelliJ IDEA\n从2024.1版本开始,IntelliJ IDEA 提供了一个可选的 K2 模式,开启 K2 模式后将获得以下收益:\nKotlin 新特性支持:新模式将支持仅在 K2 Kotlin 编译器中提供的未来语言特性。 代码分析的稳定性:得益于架构的重构,IDE 功能的质量和可靠性应该会得到提升,代码分析也将更加稳定。 更优的 IDE 性能:Kotlin 代码高亮和 Kotlin 代码补全的速度已显著提高。 全行代码补全:新版 JetBrains IDE 自带的 AI 神器 AI 编程仍然是一个众说纷纭的话题,但越来越多的开发者开始将 AI 融入他们的日常工作流中。\nJetBrains IDE v2024.1 版本中推出了一项新功能:全行代码补全。这个功能利用AI技术,在本地运行,不需要互联网连接,也不会发送任何数据到互联网上。它支持多种编程语言,包括Java、Kotlin、Python等,并且已经集成到多个JetBrains IDE中,如IntelliJ IDEA、PyCharm等。\n全行代码补全功能已包含在 JetBrains IDE 的有效订阅中,无需额外费用,只需确保您使用的是 v2024.1 或更高版本即可。\nKotlin 2.0.0-RC1 版本已发布 What\u0026rsquo;s new in Kotlin 2.0.0-RC1\nKotlin 2.","title":"Kotlin 技术月报 | 2024 年 4 月"},{"content":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Compose Multiplatform 1.6 版本发布 Compose Multiplatform 1.6 版本已发布,具体包括如下内容:\n更新了通用资源管理 API: 可以使用生成的 Res 对象在 Compose Multiplatform 代码中访问资源 引入了通用 UI 测试 API: UI 测试可以帮助您确保应用程序的行为符合预期,Compose Multiplatform 1.6 为此引入了通用 UI 测试 API 添加了 iOS 辅助功能支持: Compose Multiplatform 现在为 iOS 提供支持,使残障人士可以与 Compose UI 以与原生 UI 相同的舒适度进行交互 带来了许多其他功能和改进: 包括对 Fleet 的 @Preview 注解的支持,iOS 与桌面端的一些优化等 Ktor 2024 路线图发布 Ktor 是一个轻松构建联网应用(web 应用、 HTTP 服务、 移动应用以及浏览器应用)的框架。Ktor 2024 路线图已发布, Ktor 团队将继续保持框架轻量级、灵活和透明,提高功能质量和性能,扩展Ktor插件生态系统,具体包括如下内容:\n新功能: 引入OpenTelemetry插件,用于生成和收集遥测数据。 集成gRPC,支持创建和消费基于gRPC的服务。 在Ktor 3.0.0中迁移到Kotlinx-io库,以支持多平台。 添加对管理事务的支持,简化数据库访问。 简化依赖注入,支持集成像Koin这样的框架。 改进Ktor开发: 改进文档,提供更全面、更易于理解的教程和指南。 引入插件注册表,支持第三方Ktor插件。 发布一个命令行工具,以便在终端或Shell中创建和修改Ktor项目。 Kotlin 1.9.23 版本发布 Kotlin 1.9.23 已在 GitHub 中标记并更新。查看其中包含的所有内容:https://github.com/JetBrains/kotlin/releases/tag/v1.9.23\n精选博客 Kotlin Multiplatform 初探 众所周知,Kotlin 是一门跨平台的语言,它可以在 JVM、Android、iOS、Web、Native 等多个平台上运行。Kotlin Multiplatform 是 Kotlin 的一个重要特性,它可以让我们在一个项目中编写一份代码,然后在多个平台上运行。本文将带你初探 Kotlin Multiplatform。具体包括如下内容:\nKotlin Multiplatform 是什么? KMP的优势是什么 一个简单的demo KMP 实现原理 KMP生态 业界案例 Compose 2023 使用情况调查 State of Compose 2023\nCompose 的推出已经有一段时间了,那么在 2023 年 Compose 的使用情况到底如何呢?本文一项针对 165 名参与者询问其 Compose API 知识和使用情况的调查结果,它涉及了Compose API的使用和认识,包括状态管理、副作用、动画效果的痛点,以及不同的库和框架。报告还探讨了Compose在导航、测试、图像加载和组件库方面的挑战。此外,调查还包括了开发者对Compose的满意度、缺失功能以及学习资源。\n如何测量与分析 Kotlin/JS 包体积 Measuring and analyzing the KotlinJS bundle size\nKotlin/JS 的原理是将 Kotlin 代码编译成 JavaScript,而要将 Kotlin/JS 用于生产环境,合适的包体积大小至关重要。较小的 JavaScript 包体积有助于提升网站的加载速度和性能。本文介绍了两种如何测量您的 Kotlin/JS 包体积大小并可视化库和类的影响。\nKotlin 的 -Xjdk-release 标签如何影响编译 Kotlin\u0026rsquo;s JDK release compatibility flag\nval widget = edit.widgets.removeFirst() 在将编译 SDK 版本设置为 Java 21,jvmTarget 版本设置为 1.8 的情况下,以上代码运行时发生了 NoSuchMethodError 异常的问题。\n本文分析主要原因在于 Java21 中 List 接口新增了 removeFirst 方法,而成员函数优化级默认高于扩展函数,导致引用到了高版本 Jdk 的方法。\n而 jvmTarget 没有生效的原因是因为 jvmTarget 只是控制编译器生成的字节码的版本,而不是用于指定系统核心类库的位置(需要通过 -bootclasspath 参数来指定)。\n在 Kotlin 1.7 之后,我们可以通过-Xjdk-release参数来统一-source,-target,-bootclasspath的版本,从而避免类似的问题。\nkotlin.targets.withType(KotlinJvmTarget::class.java) { target -\u0026gt; target.compilations.configureEach { it.kotlinOptions.freeCompilerArgs += listOf( \u0026#34;-Xjdk-release=$javaVersion\u0026#34;, ) } } 精选视频 【榨干 Kotlin】把函数当类用,Compose 风骚的作用域机制 Compose 是用 Kotlin 写的,它享受了 Kotlin 的便利,但也要承受 Kotlin 的限制。它用 Kotlin 的函数来实现了界面组件,就继承了「函数不具备作用域」的缺陷。\n我们该如何限制某些公开的属性或者函数只能在特定的函数内部才能被使用呢?本视频介绍了 Compose 是如何通过高阶函数、隐式 receiver 和 DslMarker 注解等方式,解决函数作用域管理的问题的。\n社区活动 上海 KUG 线下活动回放 上海 KUG 新年首场开发者线下活动交流会已于 3 月 1 日成功举办。本次活动邀请了多位 Kotlin 开发者,分享了他们在 Kotlin 开发中的心得体会。活动回放视频已上传至 B 站,欢迎大家观看:\nKotlin 复合构建工程结构 AGP 在包体积优化上的应用 ","permalink":"https://beijing-kug.github.io/news/kotlin-news-2024-03/","summary":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Compose Multiplatform 1.6 版本发布 Compose Multiplatform 1.6 版本已发布,具体包括如下内容:\n更新了通用资源管理 API: 可以使用生成的 Res 对象在 Compose Multiplatform 代码中访问资源 引入了通用 UI 测试 API: UI 测试可以帮助您确保应用程序的行为符合预期,Compose Multiplatform 1.6 为此引入了通用 UI 测试 API 添加了 iOS 辅助功能支持: Compose Multiplatform 现在为 iOS 提供支持,使残障人士可以与 Compose UI 以与原生 UI 相同的舒适度进行交互 带来了许多其他功能和改进: 包括对 Fleet 的 @Preview 注解的支持,iOS 与桌面端的一些优化等 Ktor 2024 路线图发布 Ktor 是一个轻松构建联网应用(web 应用、 HTTP 服务、 移动应用以及浏览器应用)的框架。Ktor 2024 路线图已发布, Ktor 团队将继续保持框架轻量级、灵活和透明,提高功能质量和性能,扩展Ktor插件生态系统,具体包括如下内容:\n新功能: 引入OpenTelemetry插件,用于生成和收集遥测数据。 集成gRPC,支持创建和消费基于gRPC的服务。 在Ktor 3.","title":"Kotlin 技术月报 | 2024 年 3 月"},{"content":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 2.0.0-Beta4 版本发布 What\u0026rsquo;s new in Kotlin 2.0.0-Beta4\nKotlin 2.0.0-Beta4 版本已发布,具体包括以下内容:\nK2 编译器的稳定性持续提升,自 1.9.20 起,K2 编译器的所有 target 都达到了 Beta 状态。 Gradle 构建工具方面的改进 Kotlin/JS 支持类型安全的纯 JavaScript 对象 Kotlin/JS 支持使用 npm 作为包管理器 Kotlln/JS 支持导出 List, Map, Set 等集合类型 Amper 2024 年 2 月更新 Amper 是 Jetbrains 开发的一个项目配置工具。它的目标是改善项目配置的用户体验和可工具性,即 IDE 内部的支持,同时提供流畅的开箱即用体验。\nAmper 0.2.0 版本已发布,并带来了一些新的特性:\n支持 Gradle version catalogs 支持依赖补全 支持在 IDEA 中创建 Amper 项目 支持 Fleet, IntelliJ IDEA, 与 Android Studio 等 IDE Jetpack Lifecycle 支持 Koltin 跨平台 Jetpack Lifecycle 支持 Koltin 跨平台\nLifecycle 库支持 Kotlin 跨平台,Lifecycle、LifecycleOwner、LifecycleObserver、Lifecycle.State、Lifecycle.Event 和 LifecycleRegistry 中的核心 Lifecycle API 现在包含在与 Kotlin Multiplatform 兼容的工件中\n精选博客 使用 @JsExport 将 Kotlin 导出给 JS 的指南 @JsExport guide for exposing Kotlin to JS\nKotlin/JS 支持通过 @JsExport 导出 Kotlin 供 JS 调用,但在实际使用中存在着诸多限制。本文介绍了如何使用 @JsExport 处理集合类型,Long 类型,接口,枚举,Sealed classes,挂起函数等内容的导出。\nKotlin 云端差分缓存技术 字节团队在项目切换到 Monorepo 方案后,由于二进制依赖被切换成了源码依赖,构建耗时出现了极大的劣化。\n本文介绍了由于 Kotlin 编译在全源码 Monorepo 环境中的低效,团队开发了一种云端差分缓存技术。这项技术通过改造 Kotlin Gradle Plugin,实现了当 Kotlin Task 无法命中 Build Cache 时,能够利用云端模糊匹配缓存将全量编译转化为增量编译,从而显著减少编译时间。\n比如只要修改了一个 .kt文件,就无法匹配到缓存。因此可以考虑实现一套模糊匹配的机制:\n先根据一些必要参数匹配一组可能符合要求的缓存 然后从这一组缓存中寻找与当前场景最接近的缓存包来进行使用 将这个缓存包对应的源码与当前源码做 diff,然后将全量转增量,实现增量编译 感受 Kotlin 函数式编程 函数式编程是最近兴起的一种编程方式,很多语言都支持函数式编程,例如:JavaScript、Kotlin、C#等等。和面向对象编程不同,函数式编程有一种独属于数学的美感。纯函数式编程就像一个数学公式,传入特定的入参,即可获得确定的结果。这会给编程者一种让人心安的掌控感,这种掌控感能大大减少编码过程中的错误。\n本系列文章以 Kotlin 为例,带大家一步一步探索函数式编程的魅力:\n感受函数式编程之美 渐入佳境!函数式编程进阶实战 函数式编程与MVI的美妙结合 精选视频 两个 this 一起用?Kotlin 的成员扩展函数和 implicit receiver 本视频深入浅出地讲解了 Kotlin 中的隐式接收者(implicit receiver)概念。这是一个在 Kotlin 编程中极为常见的特性,尽管您可能未曾耳闻这一术语,但实际上您在编码时可能已经多次应用过。\nKotlin 众多高级特性,如协程中就大量使用了隐式接收者。因此,理解隐式接收者的本质、掌握其用法以及如何充分利用其在编程中的潜力,对于我们提升编程技能和开发效率有着极大的促进作用。\n使用 Kotlin 协程的响应式Spring Boot:添加虚拟线程 Reactive Spring Boot With Kotlin Coroutines: Adding Virtual Threads\n自从 Java 19 中引入以来,虚拟线程一直备受关注,本视频主要讲解了如何在 Spring Boot 中使用协程与虚拟线程,并回答了以下问题:\n在 Spring Boot 中使用协程与虚拟线程的优势 什么是虚拟线程,它适用于什么场景? 虚拟线程与协程是竞争关系吗,它们各自有什么优缺点? 虚拟线程如何实现结构化并发? 虚拟线程如何与协程结合使用? 社区活动 新年第一场 Kotlin 线下活动,JetBrains 联合上海 KUG 请你来参加! 龙年伊始,邀你赴一场专属开发者的派对。Kotlin 社区伙伴贡献硬核技术分享,JetBrains 大咖漂洋过海和你面对面,为你新年加足“码”力!具体将为你带来以下分享\n《Kotlin + 复合构建组织工程结构》 《AGP 在包体积优化上的应用》 《内部视角看 Kotlin 是如何发展的》 《基于 IntelliJ 的 IDE 的性能优化演变》 《Fleet 最新进展》 ","permalink":"https://beijing-kug.github.io/news/kotlin-news-2024-02/","summary":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 2.0.0-Beta4 版本发布 What\u0026rsquo;s new in Kotlin 2.0.0-Beta4\nKotlin 2.0.0-Beta4 版本已发布,具体包括以下内容:\nK2 编译器的稳定性持续提升,自 1.9.20 起,K2 编译器的所有 target 都达到了 Beta 状态。 Gradle 构建工具方面的改进 Kotlin/JS 支持类型安全的纯 JavaScript 对象 Kotlin/JS 支持使用 npm 作为包管理器 Kotlln/JS 支持导出 List, Map, Set 等集合类型 Amper 2024 年 2 月更新 Amper 是 Jetbrains 开发的一个项目配置工具。它的目标是改善项目配置的用户体验和可工具性,即 IDE 内部的支持,同时提供流畅的开箱即用体验。\nAmper 0.2.0 版本已发布,并带来了一些新的特性:\n支持 Gradle version catalogs 支持依赖补全 支持在 IDEA 中创建 Amper 项目 支持 Fleet, IntelliJ IDEA, 与 Android Studio 等 IDE Jetpack Lifecycle 支持 Koltin 跨平台 Jetpack Lifecycle 支持 Koltin 跨平台","title":"Kotlin 技术月报 | 2024 年 2 月"},{"content":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 学习使用 IDE 重构 Kotlin 代码 Learn IDE Code Refactoring in Kotlin for Enhanced Code Quality\nJetBrains Academy 插件中推出了一门新课程:《学习使用 IDE 重构 Kotlin 代码》。该课程将帮助您学习如何使用 IDE 重构 Kotlin 代码,以提高代码质量。\n您将在课程中了解如下主题:\n命名约定和代码风格样式规则 完全重构 VS 逐步重构 用于移动、提取和内联代码的自动化重构技巧 使用设计模式重构代码 IntelliJ IDEA 的 K2 Kotlin 模式现已推出 Alpha 版! IntelliJ IDEA’s K2 Kotlin Mode Now in Alpha!\n随着 K2 编译器的逐渐稳定,IDEA 也推出了 K2 模式。开启 K2 模式后,IntelliJ IDEA 将使用嵌入的 K2 Kotlin 编译器来分析 Kotlin 代码。在开启 K2 模式后, Kotlin 代码的代码高亮和代码补全的性能得到了显著的提高。\n当然在目前阶段,K2 模式还处于 Alpha 阶段,还有很多功能需要完善,目前 K2 模式还不支持 Android、Kotlin多 平台项目和 build.gradle.kts 文件分析。同时依赖于编译器插件的 IDEA 插件也需要进行更新适配,才能支持 K2 模式。\nCoil 3.0.0 Alpha 版本发布 https://github.com/coil-kt/coil/blob/main/CHANGELOG.md\nCoil 是一个轻量级的 Kotlin 图片加载库,它旨在使图像加载变得简单快速。Coil 3.0.0 Alpha 版本已发布,具体包括如下更新:\nCompose 多平台支持,Coil 现在是一个 Kotlin 多平台库,支持 Android、JVM、iOS、macOS 和 Javascript。 Coil 的 Maven 坐标已更新为 io.coil-kt.coil3,其导入也已更新为 coil3。这使得 Coil 3 可以与 Coil 2 并行运行,而不会出现二进制兼容性问题。 Jetpack Compose 1.6 版本发布 What’s new in the Jetpack Compose January ’24 release\nJetpack Compose 1.6 版本已发布,具体包括如下更新:\n性能优化:在 Jetpack Compose 1.5 的基础上,Compose 1.6 继续带来了 20% 的滚动性能提升与 12% 的启动耗时 配置外部类稳定性:Compose compiler 1.5.5 支持通过配置文件配置外部类稳定性 优化生成代码性能:编译器插件生成的代码也得到了优化,因为每个 composable 函数都会利用编译器插件生成代码,因此这些优化将会带来整体的性能提升 支持实验性的强跳过模式:启用强跳过模式后,composable 函数可以强制跳过重组,而无需深入了解 Compose 内部原理。 文本方面的改进:Compose 1.6 为文本方面的功能带来了一些改进,包括includeFontPadding默认值的更改与非线性字体缩放的支持 拖拽的支持:Compose Foundation 添加了对平台级拖拽的支持,允许在多窗口模式下在应用程序之间拖动内容。 精选博客 【长文】记一次个人 Android 项目全量迁移至 KMP 跨平台的过程 本文介绍了作者将个人项目全量迁移至 KMP 跨平台的过程,非常详细的一个迁移攻略,Context,数据库,资源读取,JavaScript 执行,导航,ViewModel,数据持久化等方面都有涉及,如果你也想尝试将项目迁移至 KMP 跨平台,可以参考一下。\n开源 | 从 SQLlin 的更新看 Kotlin Multiplatform 技术更迭 SQLlin 是一款基于 Kotlin DSL 及 KSP 技术的,支持众多平台的 Kotllin Multipllatform SQLite 数据库框架。\n本文介绍了 SQLlin 在过去一年内的更新,并探求这些更新背后所涉及到的 Kotlin Multiplatform 技术栈的更迭与进化。,具体包括如下内容:\n重写 native 驱动层 JVM Target 支持 sqllin-dsl 并发安全 Android 低版本向下兼容 CI/CD 优化 社区推广 Compose 代码有多简洁?Compose/Flutter/SwiftUI/React 声明式语法对比 Compose 与 React、Flutter、SwiftUI 同属声明式 UI 框架,有着相同的设计理念和相似的实现原理,但是 Compose 的 API 设计要更加简洁。本文就以上几个框架在语法上做一个对比,感受一下 Compose 超高的代码效率。\nFlutter Compose SwiftUI 如何解决 Kotlin/JS 类型导出支持问题 https://github.com/deezer/KustomExport\n目前 Kotlin/JS 在使用 @JsExport 导出类型时还存在一定问题,比如 Long 类型,List 类型都会被导出为 any,影响开发体验。KustomExport是一个 KSP 插件,通过为类型添加自定义的KustomExport注解就可以实现更佳的导出效果。\n精选视频 2023 Kotlin 中文开发者大会完整内容回放 + PPT 下载 | 资源整理 Kotlin 中文开发者大会是由 JetBrains 团队与中文 Kotlin User Group 合作举办的免费线上直播活动,活动将会由 Kotlin 团队与大家分享最新 Kotlin 新闻,并邀请社区的技术大佬分享最新前沿技术、实用的开发经验。\n2023 Kotlin 中文开发者大会两天完整视频回放和 PPT 现已公开!\n您可以随时观看并与可能感兴趣的任何人分享,并在视频页面的评论区向我们提供反馈。\n在 Meta 写 Kotlin 编译器插件是怎样一种体验? Podcast |《Kotlin 炉边漫谈》第 15 期:和在 Meta 写 Kotlin 编译器插件的小姐姐,来一场坦白局!\n大家熟悉的 Kotlin 开发大多都是拿来写 Server-Side、双平台 Mobile,你有想过有开发者是拿 Kotlin 写构建工具吗?本期节目特别邀请到人在 Meta 伦敦办公室的惠勤,请她跟我们聊聊在 Meta 的工作经验,是什么机会让她从 iOS 开发者变成 Kotlin 开发者,还从零变成编译器专家的故事。\n社区活动 最新!国内 Kotlin User Group 信息整理(2024.1) 无论你是在学习 Kotlin 的起步阶段,还是已经基本掌握 Kotlin 语法技能,追求更进一步的交流探索。一个紧密围绕 Kotlin 的用户社区,能为你的 Kotlin 之旅插上翱翔的翅膀。欢迎加入属于 Kotlin 开发者的社区——Kotlin User Group (KUG)。\n简而言之,KUG 是让 Kotlin 开发者和爱好者们聚在一起的技术社区。通过基于群聊的日常交流或不定期在线上/线下举办的技术讲座和沙龙,促进大家的知识分享和技能提升。你将可以在这个专注 Kotlin 的社区里学习最新的 Kotlin 开发技术,了解基于 Kotlin 的最佳实践,还有机会认识业界大咖,或是收获新的职业发展机会。\n截至目前,国内已有 21 个 KUG 成立,欢迎各个城市的 Kotlin 开发者加入社区。如果你所在的城市还没有 KUG,也欢迎你成立 KUG,我们将为你提供一系列的支持。\nKotlinConf Global 2024:集结全球 Kotlin 爱好者! KotlinConf 是一年一度的 Kotlin 盛会,而 KotlinConf Global 则是 KotlinConf 在全球各个城市的拓展活动。\n今年的 KotlinConf Global 活动也将于 5 月回归。无论您身在世界何处,都可以与我们一起参与 Kotlin 线下活动。\n届时,全国各地的 Kotlin 用户组都将举办线下活动,与您一起观看 KotlinConf Global 的直播或者分享,您还可以在活动中与其他 Kotlin 爱好者交流,分享您的经验和见解。\n","permalink":"https://beijing-kug.github.io/news/kotlin-news-2024-01/","summary":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 学习使用 IDE 重构 Kotlin 代码 Learn IDE Code Refactoring in Kotlin for Enhanced Code Quality\nJetBrains Academy 插件中推出了一门新课程:《学习使用 IDE 重构 Kotlin 代码》。该课程将帮助您学习如何使用 IDE 重构 Kotlin 代码,以提高代码质量。\n您将在课程中了解如下主题:\n命名约定和代码风格样式规则 完全重构 VS 逐步重构 用于移动、提取和内联代码的自动化重构技巧 使用设计模式重构代码 IntelliJ IDEA 的 K2 Kotlin 模式现已推出 Alpha 版! IntelliJ IDEA’s K2 Kotlin Mode Now in Alpha!\n随着 K2 编译器的逐渐稳定,IDEA 也推出了 K2 模式。开启 K2 模式后,IntelliJ IDEA 将使用嵌入的 K2 Kotlin 编译器来分析 Kotlin 代码。在开启 K2 模式后, Kotlin 代码的代码高亮和代码补全的性能得到了显著的提高。","title":"Kotlin 技术月报 | 2024 年 1 月"},{"content":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin/Wasm 已进入 Alpha 阶段 Kotlin for WebAssembly Goes Alpha\nKotlin/Wasm 是新推出的 Kotlin Multiplatform 目标平台,现已达到 Alpha 状态!具体包括以下更新:\nJetBrains 已将 Kotlin/Wasm 提升到 Alpha 版本,让您可以亲自上手尝试。 您的反馈将影响使用 Kotlin 构建 Web 应用程序的未来! 作为 Alpha 版本,Kotlin/Wasm 已经可以在预生产场景中使用,但许多方面仍待完善。 我们需要社区的帮助来确定 Kotlin/Wasm 的相关决策并确定其优先级。 Compose for Web(目前处于实验阶段)由 Kotlin/Wasm 提供支持。 两种技术互相配合,让您完全使用 Kotlin 为 Web 应用程序创建声明式用户界面。 WebAssembly 从一开始就被设计为语言的编译目标,因此虽然 Kotlin/Wasm 仍处于 Alpha 阶段,但其在几乎所有宏基准测试中都已经优于 Kotlin/JS:\nJetbrains 2023 开发者生态报告发布 2023 开发者生态系统现状\nJetbrains 2023 开发者生态报告发布,从报告中可以看到很多值得关注和有趣的地方,比如在 2023 年,Scala、Go 和 Kotlin 开发者位列薪酬最高的三大类别。\n很长一段时间以来,Kotlin 大多被视为“Android 语言”,但其在服务器上的应用也显著增多,用于移动开发的 KMP 也一直在稳步增长。\nKSP2 发布预览版本 KSP2 Preview: Kotlin K2 and Standalone Source Generator\nKSP2 已发布预览版本,具体包括如下更新:\nKotlin 新版编译器 k2 的支持 独立的源代码生成器:比当前的 Kotlin 编译器插件提供了更多的灵活性和功能 Kandy: Kotlin 绘图库了解一下 Kandy: the new Kotlin plotting library by JetBrains\nKandy 是由 JetBrains 开发的一个新的 Kotlin 绘图库。它提供了一种新的、强大的DSL,用于创建各种类型的图表。使用 Kandy 结合 Kotlin Notebook,我们可以很方便的生成各种图表。\n精选博客 使用 KCP 打造更安全的 Gson 与更快的 Moshi 众所周知,使用 Gson、Jackson 等框架反序列化 JSON 到 Kotlin 类时存在空安全问题和构造器默认值失效的问题,同时常用的 Gson, Moshi 等框架往往在功能上比较强大,全面,而在性能上却没有很明显的优势。本文主要介绍如何使用 Kudos 编译器插件实现更安全的 Gson 与更快的 Moshi。\nKudos 是 Kotlin utilities for deserializing objects 的缩写。它可以解决使用 Gson、Jackson 等框架反序列化 JSON 到 Kotlin 类时所存在的空安全问题和构造器默认值失效的问题,同时可以简化高性能的反序列化框架 JsonReader 的使用方式。\nKudos 已经在 Github 上开源,开源地址可见:https://github.com/kanyun-inc/Kudos\n函数式编程的魔法武器:Kotlin高阶函数和Lambda表达式 本文主要探讨了 Kotlin 中高阶函数和 Lambda 表达式的语法和使用,以及它们在函数式编程中的重要性和应用场景。同时学习了一些常用的函数式编程操作,如 map、filter、reduce 等,了解了函数式编程的特性。\n关于 kotlinx.serialization 你应该知道的一切 kotlinx.serialization in Kotlin- All You Need To Know\nkotlinx.serialization 是一个跨平台的序列化框架,当我们在 Kotlin 项目尤其是 KMP 项目中序列化与反序列化时,kotlinx.serialization 是一个很好的选择。本文详细介绍了 kotlinx.serialization 的使用,具体包括以下内容:\nkotlinx.serialization 的初始化 kotlinx.serialization 的基本使用 kotlinx.serialization 常用注解使用 自定义序列化与反序列化的使用 精选视频 Kotlin 多平台如何支持鸿蒙? Kotlin 多平台,但是鸿蒙\n自从 HarmonyOS NEXT 宣布不再支持 Android 已来,很多 Kotlin 开发者都很关注 Kotlin 跨平台能否支持鸿蒙?本视频介绍了如何通过 Kotlin/JS 来适配鸿蒙以实现共享 Kotlin 代码的目的,示例代码可见:https://github.com/kotlin-for-ohos/kotlin-ohos-sample\n社区活动 2023 Kotlin 中文开发者大会 Kotlin 中文开发者大会是由 JetBrains 团队与中文 Kotlin User Group 合作举办的免费线上直播活动,活动将会由 Kotlin 团队与大家分享最新 Kotlin 新闻,并邀请社区的技术大佬分享最新前沿技术、实用的开发经验。\n今年 Kotlin 中文大会已于 12 月 16 日(六)及 12 月 17 日(日)两天进行线上直播,本次邀请到 16 位来自各公司的 Kotlin 技术专家,带来 Kotlin Multiplatform 的第一手案例实践、Kotlin 编译器核心讲解、使用 KSP 辅助开发、Kotlin 在后端的应用等话题。\n如有需要查看直播回放及讲师 PPT 也可见:https://blog.jetbrains.com/kotlin/2023/12/2023-kotlin-chinese-conference/\n社区说 Kotlin 分享 社区说|引领高效编程风向 Kotlin 前沿技术开发深度剖析\n随着全球化进程不断推进,多线远程合作编程已是业内大势所趋。作为一种跨平台、静态类型的编程语言,Kotlin 在近几年来受到了开发者们的青睐,并依托技术研发取得了令人瞩目的创新性突破。12 月 21 日的夜晚,三位技术大咖一同聚焦 Kotlin 的前沿发展,为我们带来了如下分享:\n社区说|KMP 正式步入生产 社区说|Jetpack 库打造 MVI 模式应用 社区说|协程的基本原理与使用 ","permalink":"https://beijing-kug.github.io/news/kotlin-news-2023-12/","summary":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin/Wasm 已进入 Alpha 阶段 Kotlin for WebAssembly Goes Alpha\nKotlin/Wasm 是新推出的 Kotlin Multiplatform 目标平台,现已达到 Alpha 状态!具体包括以下更新:\nJetBrains 已将 Kotlin/Wasm 提升到 Alpha 版本,让您可以亲自上手尝试。 您的反馈将影响使用 Kotlin 构建 Web 应用程序的未来! 作为 Alpha 版本,Kotlin/Wasm 已经可以在预生产场景中使用,但许多方面仍待完善。 我们需要社区的帮助来确定 Kotlin/Wasm 的相关决策并确定其优先级。 Compose for Web(目前处于实验阶段)由 Kotlin/Wasm 提供支持。 两种技术互相配合,让您完全使用 Kotlin 为 Web 应用程序创建声明式用户界面。 WebAssembly 从一开始就被设计为语言的编译目标,因此虽然 Kotlin/Wasm 仍处于 Alpha 阶段,但其在几乎所有宏基准测试中都已经优于 Kotlin/JS:\nJetbrains 2023 开发者生态报告发布 2023 开发者生态系统现状\nJetbrains 2023 开发者生态报告发布,从报告中可以看到很多值得关注和有趣的地方,比如在 2023 年,Scala、Go 和 Kotlin 开发者位列薪酬最高的三大类别。","title":"Kotlin 技术月报 | 2023 年 12 月"},{"content":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 1.9.20 版本发布 What\u0026rsquo;s new in Kotlin 1.9.20\nKotlin 1.9.20 版本已发布,具体包括以下内容:\nK2 对所有目标平台的支持达到 beta 状态 Kotlin Multiplatform 达到稳定状态 全新的 Kotlin 多平台项目模板,减少配置中的重复代码 Kotlin 多平台插件添加了对 Gradle 配置缓存的完全支持 Kotlin/Native 默认使用新版内存分配器 Kotlin/Native 垃圾回收性能持续提升 添加了全新的 wasm-wasi 目标,并将原有的 wasm 目标重命名为 wasm-js 标准库添加了对 WASI API 的支持 此外,本月 Kotlin 还发布了 1.9.21 小版本,主要是修复了一些 issue, 同时还解决了 kapt 与 java21 的兼容问题\nKotlin Multiplatform 已稳定并准备好投入生产使用 Kotlin Multiplatform Is Stable and Production-Ready\n经过多年的迭代,由 JetBrains 打造的开源技术 Kotlin 多平台(Kotlin Multiplatform)已经达到稳定状态并准备好投入生产使用。\nKotlin Multiplatform 技术的核心由许多部分组成,例如编译器支持、语言功能、库 API、IDE、构建工具等。 这些部分覆盖了最热门的代码共享用例,并且在 Kotlin 1.9.20 中得到稳定。 “稳定”意味着 Jetbrains 在改进这些部分时将遵循严格的兼容性规则,从而使开发者能够信心满满地将其用于生产环境代码。\n后续 Jetbrains 将持续优化 Kotlin 多平台(特别是 iOS 平台)的开发体验,Compose Multiplatform for iOS 也预计将在 2024 年发布 beta 版本,随着 KMP 生态的持续发展,现在正是加入的好时机。\nCompose Multiplatform 1.5.10 版本发布:最佳的入门时机 Compose Multiplatform 1.5.10 – The Perfect Time To Get Started\nCompose Multiplatform 是由 JetBrains 构建的声明式 UI 框架,允许开发者跨平台共享应用程序 UI。 它让您能够在 Android、iOS、桌面和 Web 端重用最高 100% 的代码库。\n现在是开始使用 Compose Multiplatform 的最佳时机, Compose Multiplatform 1.5.10 版本发布,具体包括以下更新:\n新的入门教程与引导将使 Compose Multiplatform 入门更加简单 所有 Compose Material 3 组件现在都可以在通用代码中使用 iOS 端增强的 TextFields 更快的编译器速度 对 K2 编译器的基本支持 iOS 端渲染性能的优化 新的 Kotlin Multiplatform 开发门户提供了教程、常见问题解答、全新示例和其他实用文档 KMP 2024 路线图发布 Kotlin Multiplatform Development Roadmap for 2024\nKMP 2024 路线图发布,具体包括以下内容:\nCompose for iOS 预计将发布 beta 版本 推出一站式 KMP 开发 IDE: Fleet ,提升开发者体验 重点优化 iOS 端开发体验,优化 Kotlin 与 Swift 互调用体验 推进 KMP 库生态发展,通过一系列优化与工具确保 KMP 库的向后兼容性 降低上手成本,允许不通过 mac 构建与发布 KMP 库,同时提供创建与发布 KMP 库的模板 Kotlin 在 Github 2023 语言排行榜中进入 Top 12 Octoverse: The state of open source and rise of AI in 2023\nGithub 发布了 2023 年的 Octoverse 报告,报告显示 kotlin 的份额增长势头强劲,已经稳步攀升至编程语言排行榜的 Top 12 之列。\n精选博客 Kotlin 跨平台 |我觉得可以试试 跨端一直在业内都是一个讨论度非常高的话题,无论是flutter,rn或者rust,各自都有自己的优劣势。本文分析比较了各跨端方案的优缺点,同时介绍了 KMP 方案比较合适的切入点: 计算逻辑比较复杂的 sdk。\n用Kotlin Duration来优化时间单位换算 时间单位换算在 JVM 中我们可以使用直接数学运算实现, Java 提供的 TimeUnit 以及 kotlin 的 Duration API。\nkotlin.time.Duration 是 Kotlin 标准库中的一个类,用于表示时间度量,它可以用于计算时间差等场景。该类提供了一些方便的方法来创建、比较和操作时间间隔,本文主要介绍了 Kotlin Duratioin API 的各种用法与示例\n//不使用Duration @Test fun time_millis() { val currentTimeMillis = System.currentTimeMillis() //1天24小时 每小时60分钟 1分钟60秒 每秒1000毫秒 val millisOfOneDay: Long = 24 * 3600 * 1000 println(\u0026#34;format:${currentTimeMillis + 3 * millisOfOneDay}\u0026#34;) } //Java TimeUnit @Test fun time_millis_java() { val currentTimeMillis = System.currentTimeMillis() val threeDaysOfMillis = TimeUnit.DAYS.toMillis(3) println(\u0026#34;format:${currentTimeMillis + threeDaysOfMillis}\u0026#34;) } //使用Duration @Test fun time_millis_duration() { val currentTimeMillis = System.currentTimeMillis() val feature = currentTimeMillis.milliseconds + 3.days println(\u0026#34;format:${feature.inWholeMilliseconds}\u0026#34;) } Kotlin inline 的实现原理 Kotlin under the hood: How inline functions work\n关于 Kotlin 内联函数的一个常见误解是,Kotlin 内联函数通过减少栈桢的方式实现了性能优化,但当你添加如下代码时\nprivate inline fun warningInlineFun(a: Int, b: Int): Int { return a + b } 编译器将会警告:Expected performance impact from inlining is insignificant. Inlining works best for functions with parameters of functional types\n事实上,内联最适合具有函数类型参数的函数,将函数类型参数反编译后对应 Java 的匿名内部类,在 Java 中创建匿名类是一项开销很大的操作,而这恰恰是内联函数的优点。内联函数允许您消除创建匿名类,以便将函数类型参数传递给函数参数。\n精选视频 这可能是 JetBrains Fleet 的杀手锏 Fleet 是由 JetBrains 打造的下一代 IDE,由于其轻量级特性,从一发布就面临着与 VSCode 的比较,那么 Fleet 相比 VSCode 到底有什么优势呢?\n对于 Kotlin 开发者来说,Fleet 提供了对 Kotlin Multiplatform 一站式开发的支持,在多平台项目中使用原生代码时,无需切换到不同的编辑器或牺牲实用性,同时也支持了 Swift 与 Kotlin 之间的跨语言导航,极大的优化了 KMP 程序的开发体验。\n北京 DevFest 分享回放 一年一度的北京 Google DevFest (谷歌开发者节) 活动已于 11 月 19 日举办,下面是活动中 Kotlin 相关一些主题分享:\nAndroid 应用,怎么开发你来定! 使用 Kotlin 元编程技术提升开发效率 Jetpack Compose 现在能做什么 从 Android 到 Kotlin 跨平台 社区活动 合肥 Kotlin 用户组正式成立 合肥 Kotlin 用户组正式成立,在这里可以和其它成员一起学习、讨论技术问题,还会不定期举行研讨会,进行与 Kotlin 相关的主题分享与讨论。\n欢迎所有对 Kotlin 感兴趣的开发者加入,想要加入的小伙伴,欢迎添加组织者微信 [WestonHan] 备注 KUG,邀请入群。\n详情可见合肥 Kotlin 用户组网站:https://hefei-kug.github.io/\nKotlin 中文开发者大会如期重返 Kotlin 中文开发者大会如期重返,不可错过的 Kotlin 年终总结!\n在 2023 年的尾声,Kotlin 开发者期待已久的大事即将发生!一年一度 Kotlin 中文开发者大会,将在 12 月 16 至 17 日和大家线上见面。\n今年大会将于 12 月 16 日(六)及 12 月 17 日(日)两天进行线上直播,本次邀请到 16 位来自各公司的 Kotlin 技术专家,带来 Kotlin Multiplatform 的第一手案例实践、Kotlin 编译器核心讲解、使用 KSP 辅助开发、Kotlin 在后端的应用等话题。首次设立 Live Coding 环节带大家一起使用 Compose 写个小游戏。另外还有来自 Kotlin 教育项目及 KUG 技术社区的小伙伴,跟大家分享 Kotlin 团队在教育方面的投入、KUG 社区同学参与 Kotlin 多平台竞赛的心得以及 KUG 社区运营等话题。如此丰富的主题,机会难得,不容错过!\n","permalink":"https://beijing-kug.github.io/news/kotlin-news-2023-11/","summary":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 1.9.20 版本发布 What\u0026rsquo;s new in Kotlin 1.9.20\nKotlin 1.9.20 版本已发布,具体包括以下内容:\nK2 对所有目标平台的支持达到 beta 状态 Kotlin Multiplatform 达到稳定状态 全新的 Kotlin 多平台项目模板,减少配置中的重复代码 Kotlin 多平台插件添加了对 Gradle 配置缓存的完全支持 Kotlin/Native 默认使用新版内存分配器 Kotlin/Native 垃圾回收性能持续提升 添加了全新的 wasm-wasi 目标,并将原有的 wasm 目标重命名为 wasm-js 标准库添加了对 WASI API 的支持 此外,本月 Kotlin 还发布了 1.9.21 小版本,主要是修复了一些 issue, 同时还解决了 kapt 与 java21 的兼容问题\nKotlin Multiplatform 已稳定并准备好投入生产使用 Kotlin Multiplatform Is Stable and Production-Ready\n经过多年的迭代,由 JetBrains 打造的开源技术 Kotlin 多平台(Kotlin Multiplatform)已经达到稳定状态并准备好投入生产使用。","title":"Kotlin 技术月报 | 2023 年 11 月"},{"content":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 1.9.20-RC2 版本发布 What\u0026rsquo;s new in Kotlin 1.9.20-RC2\nKotlin 1.9.20-RC2 版本已发布,具体包括以下内容:\nK2 版本 Kapt 编译器插件的实验性支持 全新的 Kotlin 多平台项目模板,减少配置中的重复代码 Kotlin 多平台插件添加了对 Gradle 配置缓存的完全支持 Kotlin/Native 默认使用新版内存分配器 Kotlin/Native 垃圾回收性能持续提升 添加了全新的 wasm-wasi 目标,并将原有的 wasm 目标重命名为 wasm-js 标准库添加了对 WASI API 的支持 Kudos 发布 https://github.com/kanyun-inc/Kudos\nKudos 是 Kotlin utilities for deserializing objects 的缩写。它可以解决使用 Gson、Jackson 等框架反序列化 JSON 到 Kotlin 类时所存在的空安全问题和构造器默认值失效的问题。\n在使用常见的 JSON 序列化框架解析 JSON 时,Kotlin 开发者通常会面临无参构造器和属性空安全的问题。我们通常的建议是使用 Moshi 或者 kotlinx.serialization。\n不过,切换框架往往并不容易。kotlinx.serialization 不支持 Java,适合纯 Kotlin 项目使用;Moshi 虽然也同时支持 Java,但它在解析时与 Gson 这样的框架在细节上仍然有不少差异。\n有没有什么办法为 Gson 这样的框架提供类型空安全和支持主构造器的参数默认值的能力呢?答案就是 Kudos。\nTouchlab 开源项目更新 Touchlab 是一个致力于推广 KMP 的团队,在过去几周 TouchLab 的一系列开源项目推出了一些更新, 具体包括以下内容:\nSKIE: 一个用于优化 Kotlin 与 Swift 之间的互操作性的工具 Kermit 2.0: Kotlin 跨平台日志库,已发布 2.0 版本 CrashKiOS : 方便线上 iOS 应用程序查看 Kotlin 代码中的崩溃堆栈 Stately 2.0: 帮助 Kotlin/Native 处理严格的内存模型,以及提供一些实现并发功能的库 KMMBridge: 一个用于将 Kotlin 代码发布成 Xcode Framework 二进制文件的 Gradle 工具 精选博客 Kotlin版本升级到1.9.0,需要做这些事\u0026hellip; 本文记录了通用项目工程 Kotlin 版本由 1.7 升级到 1.9 版本的适配要点,落实到具体的项目工程需要具体处理其中的细节问题,具体包括以下内容:\nKAE 插件正式废弃,迁移到 ViewBinding KAPT 默认启用 JVM IR,当前需要关闭 今日好奇:ChatGPT的Android端是用什么写的? ChatGPT 自发布以来一直非常火爆,并已发布了 Android 版本,本文通过 LibChecker 等工具分析对比了 ChatGPT 与 文心一言 Android 版本的技术栈。\n经过分析,ChatGPT Android 版本主要基于 Jetpack Compose 构建,而文心一言仍然基于传统的 Android View 构建。可以看出,Jetpack Compose 在国外已经相当流行了,而在国内仍然有相当的发展空间。\nChatGPT 文心一言 Kotlin的语法糖到底有多甜? 目前 Kotlin 开发者大多是 Android 开发者,而本文介绍了作者使用 Kotlin 进行后端开发的经验。他在过去一年中使用 Kotlin 进行开发,作者发现 Kotlin 在开发效率方面有显著优势,比较之下,后续不再想使用 Java 进行代码开发了。因此,他希望通过分享 Kotlin 的优点来吸引更多人使用这种语言。\n本文主要介绍了 Kotlin 的一些语法糖,包括:\nKotlin 基础常用特性 Kotlin 常用内置函数 Kotlin 扩展函数与扩展属性 Kotlin的容器 使用 Fleet 开发 Kotlin Fleet 中的 Kotlin 支持:探索 JetBrains 的新 IDE | 官方博客\nJetBrains Fleet 是一款轻量型代码编辑器和 IDE,使用 IntelliJ 代码处理引擎。该产品目前处于公开预览版阶段,供公众试用。\nFleet 开箱即支持 Kotlin,Fleet 对 Kotlin 的支持也是最完善的,因为 Fleet 主要使用 Kotlin 开发而成,JetBrains 团队也使用 Fleet 开发 Fleet。\n同时在 Fleet 中启动智能模式,也可以享受 Kotlin 的代码补全,实时模板,代码生成等功能。\nKotlin 开发者常用的反序列化库性能对比 常用 JSON 库性能对比\n反序列化是 Android 开发中必备且非常高频的需求,因此一个高性能的反序列化框架就非常重要了,那么在使用 Kotlin 开发时,常用的 Gson, Moshi, Jackson, Kotlin Serialization, FastJson 等框架中,到底谁比较快?\n写给初学者的 Jetpack Compose 系列教程 写给初学者的 Jetpack Compose 系列教程,从基础概念开始,循序渐进的带你学习 Jetpack Compose,具体包括以下内容:\n原创:写给初学者的Jetpack Compose教程,为什么要学习Compose? 原创:写给初学者的Jetpack Compose教程,基础控件和布局 原创:写给初学者的Jetpack Compose教程,Modifier 原创:写给初学者的Jetpack Compose教程,使用State让界面动起来 精选视频 如何使用 Kotlin Timing API How to Use Kotlin\u0026rsquo;s Timing API\nfun main() { val startTime = System.nanoTime() someLongWork() val endTime = System.nanoTime() val duration = (endTime - startTime) / 1_000_000 println(\u0026#34;Duration: $duration ms\u0026#34;) } 有时我们总要写一些类似上面的模板代码来计算某个函数的执行时间,但是这样的代码重复且冗长,Kotlin 的 Timing API 从 Kotlin 1.9 开始就稳定了,它提供了一些测量和指定时间的好方法。在本视频中,主要介绍了此 API 的主要功能,以便您可以像专业人士一样开始计算耗时与时间标记!\nJetpack Compose 动画库的故事 Kotlin 炉边漫谈 Podcast #13 让你的 UI 动起来!Jetpack Compose 动画库作者亲临现场\nJetpack Compose 是现代 Android 开发的必备技能,通过Jetpack Compose,用户可以轻松为UI添加动画效果,使得 UI 更吸引人。那么这么好用的动画库,到底是怎么开发出来的呢?\n本次 Kotlin 炉边漫谈邀请到了谷歌官方安卓团队负责动画库的开发者 Doris,跟大家聊聊为 Android 平台开发全新 UI 动画库的背景、过程及挑战,同时结尾彩蛋还会跟大家分享硅谷工作经验谈,欢迎大家收看。\n社区活动 Kotlin 线下技术交流·重庆站 10 月 25 日,KUG 社区在山城重庆举办线下技术交流活动,活动主要包括以下内容:\nJetBrains 技术布道师范圣佑带来关于 Kotlin 的最新技术动态以及实践经验。 来自板栗看板技术团队的资深工程师霍凯,与大家分享如何利用 Kotlin 作为后端开发语言来支撑百万级用户的实践经验和心得。 小组讨论与互动环节。 ","permalink":"https://beijing-kug.github.io/news/kotlin-news-2023-10/","summary":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 1.9.20-RC2 版本发布 What\u0026rsquo;s new in Kotlin 1.9.20-RC2\nKotlin 1.9.20-RC2 版本已发布,具体包括以下内容:\nK2 版本 Kapt 编译器插件的实验性支持 全新的 Kotlin 多平台项目模板,减少配置中的重复代码 Kotlin 多平台插件添加了对 Gradle 配置缓存的完全支持 Kotlin/Native 默认使用新版内存分配器 Kotlin/Native 垃圾回收性能持续提升 添加了全新的 wasm-wasi 目标,并将原有的 wasm 目标重命名为 wasm-js 标准库添加了对 WASI API 的支持 Kudos 发布 https://github.com/kanyun-inc/Kudos\nKudos 是 Kotlin utilities for deserializing objects 的缩写。它可以解决使用 Gson、Jackson 等框架反序列化 JSON 到 Kotlin 类时所存在的空安全问题和构造器默认值失效的问题。\n在使用常见的 JSON 序列化框架解析 JSON 时,Kotlin 开发者通常会面临无参构造器和属性空安全的问题。我们通常的建议是使用 Moshi 或者 kotlinx.serialization。\n不过,切换框架往往并不容易。kotlinx.serialization 不支持 Java,适合纯 Kotlin 项目使用;Moshi 虽然也同时支持 Java,但它在解析时与 Gson 这样的框架在细节上仍然有不少差异。","title":"Kotlin 技术月报 | 2023 年 10 月"},{"content":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 1.9.20-Beta 发布 What\u0026rsquo;s new in Kotlin 1.9.20-Beta\nKotlin 1.9.20-Beta 版本已发布,具体包括以下内容:\n全新的 Kotlin 多平台项目模板,减少配置中的重复代码 Kotlin 多平台插件添加了对 Gradle 配置缓存的完全支持 Kotlin/Native 默认使用新版内存分配器 Kotlin/Native 垃圾回收性能持续提升 添加了全新的 wasm-wasi 目标,并将原有的 wasm 目标重命名为 wasm-js 标准库添加了对 WASI API 的支持 Dagger/Hilt 支持 KSP https://github.com/google/dagger/releases\nDagger 2.48 版本发布,提供了对 Dagger 和 Hilt KSP 处理器的支持。\n为了使用 Dagger 的 KSP 处理器,主要需要完成以下工作:\n按照基本设置,将 Dagger 的处理器从 kapt 迁移到 ksp。 将任何 Dagger SPI 插件迁移到新的 Dagger SPI 插件 API。 确保没有 Kapt 处理器生成需要与 Dagger 交互的类。 需要注意的是,Dagger 的 KSP 处理器仍处于 alpha 阶段,官方目前主要关注的是确保正确性而不是优化性能,在使用的过程中有任何问题都可及时向官方反馈\nTouchLab 开源 SKIE 项目 SKIE is Open Source\nSKIE 是 TouchLab 开源的 Kotlin 多平台桥接 Swift API 的工具,通过该工具,可以生成 Swift 友好的 API.\nSKIE 通过为 Kotlin 编译器创建的 Objective-C 头文件生成 Swift 包装器来提高 Kotlin 和 Swift 之间的互操作性。它重新创建了两种语言都支持的功能,这些功能在从 Kotlin 到 Objective-C 再到 Swift 的转换中丢失了,例如:\n详尽的密封类和真正的 Swift 枚举。 默认参数 无缝的suspend函数与flow ktlint 发布 1.0.0 版本 https://github.com/pinterest/ktlint/releases/tag/1.0.0\nktlint 是被广泛使用的 Kotlin lint 库,终于发布了 1.0.0 版本,其中包含新功能和一些重大更改,详情可见以上链接。\nJetpack Paging 支持 Kotlin 跨平台 https://developer.android.com/jetpack/androidx/releases/paging#3.3.0-alpha02\nJetpack Paging 3.3.0-alpha02 版本添加了对 Kotlin 跨平台的支持,目前已支持 android, Jvm, iOS, macOS, linux 平台。这在很大程度上要归功于此前 CashApp 开源的 multiplatform-paging 项目的上游工作。\nPaging 库也成为继 Annotations, Collections, DataStore 之后又一个支持 KMP 的 Jetpack 库。\nKotlin 重返 TIOBE 指数前 20 位 September Headline: Kotlin reenters the TIOBE index top 20\n在 2023 年 9 月,Kotlin 再次挺进了 TIOBE 指数前 20 位,此前 Kotlin 在 2017 年 Google/IO 大会上被宣布为 Android 开发的一级语言时也曾达到过这一排名。经过 6 年的发展,Kotlin 建立起了一个稳定的社区,逐渐崛起并赢得了大批的忠实拥趸。\n对于此次 Kotlin 再次杀进 Top 20,TIOBE 首席执行官 Paul Jansen 认为 Kotlin 这次的崛起可能会更有力,因为其用户群体经过这 6 年早已不是 2017 年的规模了。\n精选博客 Java切换到Kotlin,Crash率上升了? 众所周知,Kotlin 相比 Java 的一大优势便是空安全,因此从 Java 切换到 Kotlin 理论上稳定性将有所提升。\n不过本文作者在将一个 Java 老项目使用 Kotlin 重构上线后却发现 Crash 率有所上升。而大部分 Crash 发生在 Java 调用 Kotlin 的函数里,本文分析了具体的 Crash 场景以及一些规避方式。\n架构级别的 Kotlin linter: Konsist,了解一下 Refactoring Multi-Module Kotlin Project With Konsist\n或许你早就知道文件级别的 Kotlin linter,例如 Ktlint,Detekt,它们可以检测出文件中的代码风格,命名规范,代码复杂度,代码坏味道等问题。\n而 Konsist 则是架构级别的 Kotlin linter,想象一下你有如下代码检查需求:\n每个 ViewModel 的子类文件名必须以 ViewModel结尾 @Repository注解的类必须存放在..repository..包名下 presentation层的类(存放在presentation包名下)只能访问domain层的类(存放在doomain包名下) 每个UseCase类的构造函数参数都按字母顺序排列 总得来说,Konsist 解决的就是这类问题,通过这种方式可以提升架构中各个层级代码结构的规范性和统一性。\n本文介绍了如何使用 Konsist 重构一个多模块 Kotlin 项目,如何让写在不同模块的同一层级的代码,遵循同一规范与风格。\n使用 Kotlin 高级特性与技巧写出更好的代码 Getting Better with Kotlin — Exploring Advanced Features and Effective Coding Strategies\nKotlin 不仅提供了简洁的语法和与 Java 的无缝交互性,还拥有一系列高级功能,能够提升编码体验。本文介绍了 Kotlin 的一些高级特性与实用技巧。\nInline Classes: 更加紧凑的抽象 Type Aliases: 增强可读性 Sealed Classes: Kotlin 版枚举 属性代理:更加优雅的管理属性读写 带有 Lambda 的 DSL: 构建用于特定于领域的语言 运算符重载: 添加个人风格 通过 Kotlin 协程轻松实现连续依次弹窗需求 如何通过Kotlin协程, 简化\u0026quot;连续依次弹窗(Dialog队列)\u0026ldquo;的需求\n有时我们会有连续依次弹窗的需求,即上一个弹窗关闭后再弹出下一个弹窗,这种需求如果使用回调来做很容易陷入回调地狱,利用 Kotlin 协程可以轻松实现类似的需求\nlifecycleScope.launch { showDialog(\u0026#34;签到活动\u0026#34;, \u0026#34;签到领10000币\u0026#34;) // 直到dialog被关闭, 才会继续运行下一行 showDialog(\u0026#34;新手任务\u0026#34;, \u0026#34;做任务领20000币\u0026#34;) // 直到dialog被关闭, 才会继续运行下一行 showDialog(\u0026#34;首充奖励\u0026#34;, \u0026#34;首充6元送神装\u0026#34;) } suspend fun showDialog(title: String, content: String) = suspendCancellableCoroutine { continuation -\u0026gt; MaterialAlertDialogBuilder(this) .setTitle(title) .setMessage(content) .setPositiveButton(\u0026#34;我知道了\u0026#34;) { dialog, which -\u0026gt; dialog.dismiss() } .setOnDismissListener { continuation.resume(Unit) } .show() } 从服务端到客户端,一次 Ktor 的跨端实践 经常使用 Kotlin 写项目的人应该都对 Ktor 这个框架不陌生,它严格意义上不仅仅是个网络框架,而是一个可以创建异步,高性能和轻量级的 Web 服务的框架,简单的来说它既能写服务端也能写客户端。本文介绍了如何一步步使用 Ktor 来写服务端代码,并在客户端使用 Ktor 对它发起网络请求,具体包括以下内容\n服务端如何创建 Ktor 项目 服务端 Ktor 项目结构介绍 使用 Ktor 开发第一个接口 客户端使用 Ktor 请求接口 总得来说,使用 ktor 可以同时进行服务端与客户端的开发,给个人 Kotlin 开发者提供了一种全栈的技术方案\n精选视频 使用 Kotlin 练习算法技巧 Practice Technical Interview Algorithms in Kotlin\n在 IDEA 或者 Android Studio 上安装Jetbrains Academy插件后就可以打开Algorithmic Challenges in Kotlin课程,然后就可以体验在 IDEA 上使用 Kotlin 写算法题。\n该课程可以帮助参与者为编码面试做好准备,并提供对算法技术的扎实理解。\n📚 掌握 30 多种算法,包括暴力算法、贪心算法、分而治之和动态规划等内容。 🧑💻 直接在 JetBrains IDE 中练习,方便调试。解决一系列精心挑选的编码挑战,涵盖算法面试中最流行的主题。 💪 使用 Kotlin(一种现代多平台编程语言)实现您的解决方案。 Android 深入理解协程 Android 深入理解协程 BaguTree周六茶话\nKotlin 协程在 Android 中的应用非常广泛,本视频主要从协程解决了什么问题,协程的关键角色剖析,结合源码解析协程常见问题等角度深入介绍了协程的使用与原理\n","permalink":"https://beijing-kug.github.io/news/kotlin-news-2023-09/","summary":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 1.9.20-Beta 发布 What\u0026rsquo;s new in Kotlin 1.9.20-Beta\nKotlin 1.9.20-Beta 版本已发布,具体包括以下内容:\n全新的 Kotlin 多平台项目模板,减少配置中的重复代码 Kotlin 多平台插件添加了对 Gradle 配置缓存的完全支持 Kotlin/Native 默认使用新版内存分配器 Kotlin/Native 垃圾回收性能持续提升 添加了全新的 wasm-wasi 目标,并将原有的 wasm 目标重命名为 wasm-js 标准库添加了对 WASI API 的支持 Dagger/Hilt 支持 KSP https://github.com/google/dagger/releases\nDagger 2.48 版本发布,提供了对 Dagger 和 Hilt KSP 处理器的支持。\n为了使用 Dagger 的 KSP 处理器,主要需要完成以下工作:\n按照基本设置,将 Dagger 的处理器从 kapt 迁移到 ksp。 将任何 Dagger SPI 插件迁移到新的 Dagger SPI 插件 API。 确保没有 Kapt 处理器生成需要与 Dagger 交互的类。 需要注意的是,Dagger 的 KSP 处理器仍处于 alpha 阶段,官方目前主要关注的是确保正确性而不是优化性能,在使用的过程中有任何问题都可及时向官方反馈","title":"Kotlin 技术月报 | 2023 年 9 月"},{"content":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 路线图更新 Kotlin 路线图更新了!今年还有哪些亮点值得期待?\n带有稳定版 K2 编译器的 Kotlin 2.0 即将面世! Kotlin Multiplatform 将在今年迈入稳定! Kotlin/Wasm 计划将提升至 alpha,并可适用于独立的 Wasm 虚拟机 新的基础库 kotlinx-io 正在开发中 Android 调试体验改进,调试内联类与内联函数将更加容易 Kotlin 跨平台的缩写正式更改为 KMP Update on the Name of Kotlin Multiplatform\n为了解决过去两年里困扰许多 Kotlin 开发者的命名不一致和缩写混淆问题,Jetbrains 决定弃用“Kotlin多平台移动”(KMM)产品名称。从现在开始,当提及 Kotlin 用于跨不同平台共享代码的技术时,首选术语是“Kotlin多平台”(KMP),无论所讨论的目标平台组合是什么。\nKotlinConf 2024 门票现已开售 KotlinConf 2024 门票现已开售!| 官方博客\n第五届 KotlinConf 将于 2024 年 5 月 22 日至 24 日在丹麦哥本哈根贝拉中心(Bella Center)举行,届时,Kotlin 社区成员将再度齐聚一堂!\nKotlinConf’24 将举办为期一天的工作坊,随后是连续两天的内容和社交活动,包括会议、展览和其他趣味活动。 赶快预订门票,安排旅行,准备参加规模最大的 Kotlin 活动。\nCompose 1.5.0 发布 What’s new in the Jetpack Compose August ’23 release\n在 Jetpack Compose 功能上基本完备之后,Compose 团队开接下来的主要目标是提升性能,Compose 1.5.0 在性能上带来了以下提升\n新的 Modifier API 性能大幅提升,最高可减少 80% 的 composition 耗时 减少了部分 Compose API 的内存占用,同时修复了 ComposeView 的内存泄漏问题 Text 组件迁移到了新的 Modifier API,平均减少了 22% 的首次 composition 耗时 Kotlin 1.9.10 发布 https://github.com/JetBrains/kotlin/releases\nKotlin 1.9.10 版本已发布,此版本修复了 1.9.0 版本中出现的一些 bug,因此,那些希望升级至 Kotlin 1.9.0 版本的用户可以放心升级了。\n精选博客 Kotlin 和 Swift 的前世一定是兄弟 Swift 这门编程语言主要用于 iOS 和 MacOS 的开发,很多人都说 Kotlin 与 Swift 两者非常相像\n本文主要从声明变量和常量,导包,基本运算符,逻辑分支,循环语句,函数,高阶函数和闭包,创建对象,类继承等角度分析比较了 Kotlin 与 Swift 的异同\n2023 年了,都有哪些公司使用了 KMP? Popular apps using Kotlin Multiplatform (KMP) in 2023 — and what you can learn from them\n在比较跨平台技术时,看看知名 APP 使用了什么技术栈以及我们可以从他们的实践中学到什么是非常重要的。\n目前 KMP 已经发布了 beta 版本,本文介绍了 KMP在 Cash, Netflix, Vmare, McDonald’s, 百度,虾皮,快手等知名 App 中的应用情况,以及他们分享的相关实践案例\n5 个提升 Kotlin 代码可读性与可维护性的小技巧 5 Kotlin Tips for a Cleaner Codebase\n本文主要介绍了 5 个提升 Kotlin 代码可读性与可维护性的小技巧\n优先考虑使用 internal,以将类的可见性限制为仅在当前模块内部。 将顶级函数的数量保持在最低限度,并注意其可见性,以避免滥用。 优先考虑可读性而不是少写几行代码 优先考虑创建专用数据类而不是使用 Pair 或 Triple 优先考虑使用详尽的 when 语句,因为使用 else 分支可能会导致错误 K2 编译器速度测试 A glimpse of K2 in nowinandroid\nK2 是 新的 Kotlin编译器前端,预计将在 Kotlin 2.0 发布正式版本。本文对比了在 nowinandroid 项目使用 K2 编译器前后的编译速度对比。\n总得来说,k2 已经到来,并且未来可期,目前 KAPT/KSP 仍然会回退到旧的编译器前端,一旦它们兼容 K2,我们可以期望有更好的结果\nCompose 1.5 发布,性能大幅提升? 不久前 Compose 1.5.0 稳定版发布,在组合的性能方面得到明显改善,这主要归功于对 Modifier API 的持续重构,本文介绍了这背后的原理以及如何将自定义 Modifier 迁移到新系统。\n总得来说,为了解决老版本 Modifier 的性能问题, Compose 引入 Modifier.Node,带来了以下收益:\n更少的分配:生成的 Element 的数量大大降低,避免了内存抖动和内存占用。 更轻量的树:状态存在 Node 上,不再依靠 remember {} 存储,Composition 的节点数也随之减少,树的遍历速度也更快了。 更快的重组:Modifier.Node 为重组提供可比较标的物, 非必要不重新生成 Node,重组性能得到提升。 精选视频 关于 Kotlin 编译的一些常见误解 绝大多数开发者都中招了\n本视频主要介绍了一些 Kotlin 编译相关的常见误解:\nKotlin 代码是用 Javac 编译的吗? Gradle Kotlin 版本与项目 Kotlin 版本的关系 Kotlin 与 Java 代码混合时是怎么编译的?依赖关系问题怎么解决? 为什么 Kotlin 反编译后成了 Java 源码? Kotlin 新版的 K2 编译器是什么? 最后打个广告,霍老师的新书《深入实践 Kotlin 元编程》已上架\n手把手带你开发一个 Compose 跨平台项目 Build an iOS \u0026amp; Android app in 100% Kotlin with Compose Multiplatform\nCompose Multiplatform 对 iOS 的支持意味着我们可以完全使用 Kotlin 来构建跨平台移动应用程序:包括业务逻辑与 UI 层。\nCompose Multiplatform for iOS 目前处于 Alpha 阶段,因此此时正是探索该技术的好时机。如下图所示,本视频手把手地带你从头到尾使用 Kotlin 构建一个简单的鸟类图片查看 APP。\n在此过程中,您将了解如何通过 Compose 跨平台和 Kotlin 跨平台实现网络请求、序列化、业务逻辑及 UI 层等各方面功能的共享。最终,我们将构建一个精简的 APP,可以从 API 加载并展示各种鸟类图片,同时支持 Android 和 iOS 平台。\nKotlin 多平台的未来 Keynote: kotlin and the multiplatform future\n虽然 Kotlin 最初是在 JVM 上开始的,并随后在 Android 社区得到了应用,但它已经发展成为一个支持多平台的语言。本视频介绍了 Kotlin 多平台的故事以及它的未来。\n","permalink":"https://beijing-kug.github.io/news/kotlin-news-2023-08/","summary":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 路线图更新 Kotlin 路线图更新了!今年还有哪些亮点值得期待?\n带有稳定版 K2 编译器的 Kotlin 2.0 即将面世! Kotlin Multiplatform 将在今年迈入稳定! Kotlin/Wasm 计划将提升至 alpha,并可适用于独立的 Wasm 虚拟机 新的基础库 kotlinx-io 正在开发中 Android 调试体验改进,调试内联类与内联函数将更加容易 Kotlin 跨平台的缩写正式更改为 KMP Update on the Name of Kotlin Multiplatform\n为了解决过去两年里困扰许多 Kotlin 开发者的命名不一致和缩写混淆问题,Jetbrains 决定弃用“Kotlin多平台移动”(KMM)产品名称。从现在开始,当提及 Kotlin 用于跨不同平台共享代码的技术时,首选术语是“Kotlin多平台”(KMP),无论所讨论的目标平台组合是什么。\nKotlinConf 2024 门票现已开售 KotlinConf 2024 门票现已开售!| 官方博客\n第五届 KotlinConf 将于 2024 年 5 月 22 日至 24 日在丹麦哥本哈根贝拉中心(Bella Center)举行,届时,Kotlin 社区成员将再度齐聚一堂!\nKotlinConf’24 将举办为期一天的工作坊,随后是连续两天的内容和社交活动,包括会议、展览和其他趣味活动。 赶快预订门票,安排旅行,准备参加规模最大的 Kotlin 活动。","title":"Kotlin 技术月报 | 2023 年 8 月"},{"content":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定尝试使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 1.9.0 版本发布 Kotlin 1.9.0 现已发布 | 官方博客:Kotlin 1.9.0 版本已发布,其中最大的变化应该是 K2 编译器终于支持了 KAPT 编译器插件,主要包括以下内容:\n持续完善 Kotlin K2 编译器,包括对 KAPT 的支持,Gradle 构建报告更好的支持等 一些语言特性:在枚举类中推荐使用entries属性代替values()方法进行遍历,data object 现已稳定,Value Class 支持次级构造函数 1.7.20 版本引入的..\u0026lt;操作符成为稳定 API 提供了一个用于根据名称获取正则表达式capture group的新 API 提供了一个新的扩展函数createParentDirectories,可用于创建带有必要父目录的新文件,如果目录已存在,则不操作,否则创建目录 Kotlin 跨平台 Gradle 插件支持配置缓存 Google 的 Android 团队将提供自己的 Gradle 插件来支持 Kotlin Multiplatform 中的 Android Target Kotlin/Native 在访问 object 单例的 const val 字段时将不再初始化 object Kotlin/Native在链接过程中遇到无符号问题时,默认处理方式已更改为警告而非报错,这样更接近于Kotlin/JVM的处理方式,即在运行时报错 Kotlin/Wasm 在包体积方面做了巨大的优化,以一个 HelloWorld 项目为例,1.9.0 版本相较于 1.8.20 版本,其体积缩小了10倍。 也可以查看视频版本的介绍:Kotlin 1.9 更新了什么?\nKotlin Notebook IDEA 插件已发布 Introducing Kotlin Notebook\nKotlin 版本的 Jupyter Notebook,与代码编辑器不同的是,Notebook是一种交互式工具,可以让你在一个文档中整合代码、可视化和文本。在Notebook中,你可以编写和运行代码片段,查看结果,并在一个地方记录你的思考过程。Notebook在快速原型设计、分析和数据科学等领域都有着广泛的应用,\nKotlin Notebook 插件为 IntelliJ IDEA 带来了交互式开发体验,现已推出首个实验版本。本文介绍了该插件所支持的功能及其使用示例。\nRedwood 发布 beta 版本 Redwood 发布 beta 版本\nRedwood 是 Cash 公司开源的 Compose 跨平台框架,类似 Compose 版 RN,通过组件映射的方式实现跨平台,同时也支持通过与 Zipline 结合实现动态更新\nRedwood 目前已发布了 0.50 版本,这个版本标志着Redwood进入 beta 阶段,相较于之前提供了更多的稳定性保证。\n从现在开始,直至 1.0 版本(不包括 1.0 版本)发布之前,Redwood 都将在协议和服务上与旧版本保持兼容。由于 Redwood 提供了动态更新功能,这也意味着在使用 Redwood 0.5 版本的 Treehouse host 中,可以无缝支持使用 Redwood 0.6 及以后版本编译和部署的 Treehouse client 代码。\n精选博客 设计图转Compose代码,Relay帮你轻松搞定 简单来说,Relay 可以与 Figma 集成,直接把设计稿生成 Compose 代码。\n设计人员使用 Relay for Figma 插件为界面组件添加注解并进行打包,包括布局、样式、动态内容和交互行为的相关信息,以便于开发者使用。\n开发者使用 Relay for Android Studio 插件导入界面软件包,并生成 Jetpack Compose 代码。\nAndroid 开发人员很大一部分的时间花费在了实现 UI 细节上,如果能实现全自动甚至是半自动的desgin to code,都将极大地提升开发效率。总的来说,这项技术具有巨大的应用价值。\nKotlin 新特性预览之 data object 数据单例 1.8.20版本中引入的 data object 数据单例在1.9.0版本中已经变得稳定。本文主要介绍了以下内容:\ndata object 与 object 的区别 data object 与 sealed class 更适配 data object 与 data class 的区别 Gson与Kotlin\u0026quot;摩擦\u0026quot;的那件小事 使用 Gson 进行序列化时,如果序列化类没有无参构造函数,会导致属性的默认初始值丢失等问题。本文介绍了 Gson 反序列化非静态内部类时的坑,同时介绍了一种代替复杂的TypeToken写法的新方式\n@OptIn(ExperimentalStdlibApi::class) fun main(args: Array\u0026lt;String\u0026gt;) { val content = \u0026#34;[{\u0026#34;content\u0026#34;: 10, \u0026#34;location\u0026#34;: \u0026#34;aa\u0026#34;}, {\u0026#34;content\u0026#34;: 10, \u0026#34;location\u0026#34;: \u0026#34;bb\u0026#34;}]\u0026#34; val obj = Gson().fromJson\u0026lt;List\u0026lt;OutClass\u0026gt;\u0026gt;(content, typeOf\u0026lt;List\u0026lt;OutClass\u0026gt;\u0026gt;().javaType) println(obj) } 总的来说,Gson 与 Kotlin 的适配并不是很好,因此如果使用 Kotlin 的话,还是更推荐迁移到 Moshi 或者 kotlin-serialization。\nCompose 为什么可以跨平台? 本文是 2022 Kotlin 中文开发者大会相关分享的文字版,深入介绍了 Compose 支持跨平台的底层原理\n我们知道,Compose 框架具有良好的分层结构,其中 Compose Compiler 层与 Compose Runtime 层负责驱动一棵节点树的更新,这部分与平台无关,节点树也可以是任意类型的节点树甚至是一棵渲染无关的树。\n而不同平台的渲染机制不同,所以 Compose UI 与平台相关,因此 Compose 要实现跨平台要解决的唯一问题就是 Compose UI 层的跨平台\nCompose 跨平台技术发展十分迅速,截止目前已经出现了两种实现 Compose UI 层跨平台的方案,令人充满期待\ncompose-multiplatform:Jetbrains 目前正在开发的 Compose 跨平台框架,类似于 flutter,通过封装 skia 引擎,解决 Compose UI 层的跨平台问题 redwood:Cash 公司开源的类 React Native 方案,通过组件映射的方式实现 UI 层的跨平台,同时也支持动态化更新组件 Compose 组件的 API 官方指南 API Guidelines for @Composable components in Jetpack Compose\n最近官方更新了 Compose 组件 API 指南,这些指南介绍了使用 Jetpack Compose 开发 UI 组件的最佳实践,遵循这些指南可以给我们带来以下收益\n长期可扩展:遵循最佳实践的组件 API 可以降低变更成本,减少变更对使用者的影响 与其他组件保持一致:不同的组件都遵循相同的指南,使用者可以使用现有的知识和模式来处理由不同作者创建的新组件,降低接入新组件的成本 减少错误:封装良好的组件会鼓励使用者写出符合最佳实践的代码,并在可能的情况下禁止错误的用法。 匿名内部类/Lambda Java和Kotlin谁会导致内存泄漏? 本文从字节码的角度分析了为什么 Java 匿名内部类会导致内存泄漏,同时分析比较了 Java 的 Lambda 表达式,Kotlin 匿名内部类,Lambda 表达式和高阶函数,以评估它们是否会引发类似的内存泄漏问题\nJetpack Compose也能搞插件化了 在传统的 View 体系中,插件化框架的其实很大一部分工作就是处理未注册 Activity 的问题。在进入 Jetpack Compose 的世界以后,Activity 的角色被淡化了,由于一个 Composable 组件就可以承担一个屏幕级的显示,因此我们的应用中不再需要那么多的 Activity 类,只要你喜欢,你甚至可以打造一个单 Activity 的纯 Compose 应用。\n因此 Compose 实际上降低了插件化的成本,本文主要探索了几种可以在 Jetpack Compose 中实施插件化/动态加载的可行性方案\nActivity 占坑方式访问插件中的 Composable 组件(传递不同参数,展示不同的 Composable) 直接加载插件中的 Composable 组件(返回 Compose 组件) 套娃模式加载 Composable 组件(返回 ComposeView) 精选视频 为什么 Kotlin 排名比 Swift 落后? 它居然说 Java 不行了?!!\n本视频分析了为什么 Kotlin 的使用明显比 Swift 更加广泛,但是在 TIOBE 等编程语言排名中,Swift 的排名却远高于 Kotlin。其原因在于 TIOBE 是通过搜索结果数来统计语言排名的,Swift 这个词汇具有多重含义,包括人名、国际结算系统等,而 Kotlin 则起源于圣彼得堡附近的一座默默无闻的小岛:Kotlin Island。\n相比之下,通过分析 Github 上的代码仓库来统计语言活跃度的 GitHut 排名或许更加准确\nKotlin 跨平台从入门到实战 Kotlin Multiplatform from \u0026ldquo;hello world\u0026rdquo; to the real world\nKotlin 跨平台目前已经进入 beta 阶段。到现在,您肯定已经听说过 Kotlin 多平台技术,并可能尝试在 demo 中体验过它。但当您真正尝试将 Kotlin 跨平台技术应用于实际项目时,您可能会遇到一些微妙且复杂的问题,比如 Kotlin 与 Swift 的互操作性、模块化、管理具有相互依赖关系的多个代码库,以及优化构建时间和二进制文件大小等。本视频的分享者来自 touchlab,介绍了他们在这些方面的一些实践经验。\n社区活动 深圳、武汉、贵州 KUG 联合线上分享会 社区活动 | 7 月 23 日,深圳、武汉、贵州 KUG 联合线上分享会等你参加!\n深圳、武汉、贵州 KUG 组织的联合线上分享会,主要包括以下内容\n《JWT 与 Ktor 的故事》分享 《Compose-Fluent-UI》分享 《Compose 状态管理与 Compose 快照》分享 加入 Kotlin 用户组 KUG 是让 Kotlin 开发者和爱好者们聚在一起的技术社区。通过基于群聊的日常交流或不定期在线上/线下举办的技术讲座和沙龙,促进大家的知识分享和技能提升。\n截至目前,国内已有 16 个 KUG 成立,各个 KUG 的信息和加入方式可见链接:找到组织!国内 Kotlin User Group 信息整理(23年7月)\n","permalink":"https://beijing-kug.github.io/news/kotlin-news-2023-07/","summary":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定尝试使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 1.9.0 版本发布 Kotlin 1.9.0 现已发布 | 官方博客:Kotlin 1.9.0 版本已发布,其中最大的变化应该是 K2 编译器终于支持了 KAPT 编译器插件,主要包括以下内容:\n持续完善 Kotlin K2 编译器,包括对 KAPT 的支持,Gradle 构建报告更好的支持等 一些语言特性:在枚举类中推荐使用entries属性代替values()方法进行遍历,data object 现已稳定,Value Class 支持次级构造函数 1.7.20 版本引入的..\u0026lt;操作符成为稳定 API 提供了一个用于根据名称获取正则表达式capture group的新 API 提供了一个新的扩展函数createParentDirectories,可用于创建带有必要父目录的新文件,如果目录已存在,则不操作,否则创建目录 Kotlin 跨平台 Gradle 插件支持配置缓存 Google 的 Android 团队将提供自己的 Gradle 插件来支持 Kotlin Multiplatform 中的 Android Target Kotlin/Native 在访问 object 单例的 const val 字段时将不再初始化 object Kotlin/Native在链接过程中遇到无符号问题时,默认处理方式已更改为警告而非报错,这样更接近于Kotlin/JVM的处理方式,即在运行时报错 Kotlin/Wasm 在包体积方面做了巨大的优化,以一个 HelloWorld 项目为例,1.9.0 版本相较于 1.8.20 版本,其体积缩小了10倍。 也可以查看视频版本的介绍:Kotlin 1.","title":"Kotlin 技术月报 | 2023 年 7 月"},{"content":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定尝试使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 1.9.0-RC 版本发布 What\u0026rsquo;s new in Kotlin 1.9.0-RC:Kotlin 1.9.0-RC 版本已发布,主要包括以下内容\n持续完善 Kotlin K2 编译器,添加了对 Kotlin/Native 后端的支持 在枚举类中推荐使用entries属性代替values()方法进行遍历 1.7.20 版本引入的..\u0026lt;操作符成为稳定 API 提供了一个用于根据名称获取正则表达式capture group的新 API 提供了一个新的扩展函数createParentDirectories,可用于创建带有必要父目录的新文件,如果目录已存在,则不操作,否则创建目录 Kotlin 跨平台 Gradle 插件支持配置缓存 Google 的 Android 团队将提供自己的 Gradle 插件来支持 Kotlin Multiplatform 中的 Android Target Kotlin/Native 在访问 object 单例的 const val 字段时将不再初始化 object 精选博客 Kotlin 中的函数式编程:探索 Monad 及其实际用例 Kotlin 是一门从一开始就支持函数式编程的语言,而 Monad 是函数式编程中的一个重要概念,本文主要介绍了 Monad 是什么,在 Kotlin 函数式编程中如何使用它们,以及一些 Monad 的实际应用案例。\nMonad 的概念看起来有些难以理解, 关于 Monad 到底是什么也可以参考灰蓝天际大佬翻译的: Kotlin 版图解 Functor、Applicative 与 Monad\n使用 ParallelGC 加快 Kotlin 编译速度,并减少内存占用 JDK 17: Using ParallelGC for the Kotlin process in Android Builds\n我们知道 Kotlin 编译过程中守护进程会占据大量的内存,这其中不可避免的会发生 GC,因此不同的垃圾回收策略也会影响 Kotlin 编译速度\n本文分别使用 G1 垃圾回收器与并行垃圾回收器编译 nowinandroid 项目,对比数据如下:\nKotlin 编译任务耗时减少了22% Kotlin 进程的垃圾回收器耗时减少了60% Kotlin进程内存使用量减少了51% 当然不同项目的测试结果可能不同,数据仅供参考。不过 Android 文档中的优化构建速度指南也推荐我们使用并发垃圾回收器,因此感兴趣的同学也可以尝试下,看看与本文的测试数据是否一致\nKotlin 编译器介绍 Crash Course on the Kotlin Compiler | K1 + K2 Frontends, Backends\n本文介绍了 Kotlin 编译的总体流程,包括 K1 和 K2 两个编译器前端的异同特点,以及编译器前端产物是如何通过 JVM、JS、Native 和 WASM 四个编译器后端,来生成相应的目标产物的。\n同时我们知道 K2 编译器前端比起 k1 编译器前端在性能上有了很大的提升,本文也介绍了 K1 编译器前端的主要性能问题在于非常糟糕的代码局部性和内存局部性。所有的descriptors都是惰性的,因此编译器总是在不同部分的代码之间跳转,从而破坏了 JIT 优化的数量。此外,解析的所有信息都存储在一个大的 Map(BindingContext)中,因此 CPU 不能充分缓存对象。\n从Kotlin中return@forEach了个寂寞 本文探讨了 Kotlin forEach 中一个容易出错的细节,在 Kotlin 语言中,return@forEach 的作用类似于 continue 而不是 break。文章解释了其背后的原理,并提供了一个相应的解决方案。\n(1..7).forEach { if (it == 3) { return@forEach // 相当于 continue 而不是 break } Log.d(\u0026#34;xys\u0026#34;, \u0026#34;Num: $it\u0026#34;) } 如何使用 Kotlin 技术栈构建一个播客网站 《Kotlin 炉边漫谈》是一个讨论 Kotlin 相关资讯的中文播客,播客网站现已上线:Kotlin 炉边漫谈官方网站\n该网站使用 Kotlin 技术栈构建,包括前端展示,后端云函数接口,数据爬虫获取与播放数据图表分析等功能。目前前端部分仍然是由 js 框架构建,后续在 Kotlin/WASM 成熟后或许可以弥补这一缺憾。同时后续也将推出 Kotlin 跨平台移动端 app,敬请期待。\n这个例子是 Kotlin 端到端解决方案的一个很好的示范,详情可见:how I make a podcast website using serverless technology in 2023\nKotlin 动态化框架 Zipline Dynamic Kotlin with Zipline\nZipline 是 Cash 公司开源的一款 Kotlin 动态化框架,借助这个框架,我们可以使用 Kotlin 编写功能和业务逻辑,并将它们动态推送给用户,免去了对应用发版的依赖。\nZipline 基于 Kotlin 跨平台构建,目前 1.0 版本是通过 Kotlin/Js 后端将 Kotlin 代码编译成 Js 代码,Js 代码发送到端上后通过 QuickJs 引擎执行。需要注意的是,编译成 Js 代码仅是 Zipline 内部的一个实现细节,因此在后续的迭代中可以方便地替换,在 Zipline 2.0 中将会切换到 WebAssembly。\nZipline 不仅可以动态更新业务逻辑,通过与 Compose 跨平台框架 Redwood 结合,也可以实现动态更新 UI,详情可见 Jake Wharton 大神在 KotlinConf 上的分享: Playing in the Treehouse with Redwood and Zipline\nRedwood + Zipline = Treehouse = \u0026ldquo;支持动态化的 Compose 跨平台方案\u0026rdquo;。这套方案解决了 Kotlin UI 跨平台及动态化两个关键问题,具有很大的想象空间和应用潜力。\n精选视频 Compose 跨平台快速上手 Build Your First Compose Multiplatform App (KMM)\nPhilipp Lackner 是一位在 YouTube 上非常活跃的讲师,主要分享 Kotlin 与 Android 相关的教程。在此视频中,他详细介绍了如何逐步创建一个 Compose 跨平台项目,实现在 Android 和 iOS 平台上共享 UI。\nKotlin 编译成 WebAssembly Kotlin goes WebAssembly!\nKotlin 1.8.20 引入了新的编译后端:WebAssembly,Kotlin 代码通过编译成 WebAssembly ,可以运行在浏览器,Node.js 等环境中。本视频主要介绍了 Wasm 是什么,Kotlin Wasm 的现状与示例,以及其在未来的展望\nCompose 渲染机制介绍 Compose 渲染机制的秘密\n这是由上海 Kotlin 用户组组织者带来的一场精彩分享。在本视频中,您将了解到 Jetpack Compose 是如何在屏幕上绘制的,同时还会介绍 Skia 引擎与 OpenGL ES、Vulkan 等图形 API 之间的关系以及 Compose-Multiplatform 在各个平台上的渲染方式。\n","permalink":"https://beijing-kug.github.io/news/kotlin-news-2023-06/","summary":"为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定尝试使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频以及社区活动等方面的信息。\n最新动态 Kotlin 1.9.0-RC 版本发布 What\u0026rsquo;s new in Kotlin 1.9.0-RC:Kotlin 1.9.0-RC 版本已发布,主要包括以下内容\n持续完善 Kotlin K2 编译器,添加了对 Kotlin/Native 后端的支持 在枚举类中推荐使用entries属性代替values()方法进行遍历 1.7.20 版本引入的..\u0026lt;操作符成为稳定 API 提供了一个用于根据名称获取正则表达式capture group的新 API 提供了一个新的扩展函数createParentDirectories,可用于创建带有必要父目录的新文件,如果目录已存在,则不操作,否则创建目录 Kotlin 跨平台 Gradle 插件支持配置缓存 Google 的 Android 团队将提供自己的 Gradle 插件来支持 Kotlin Multiplatform 中的 Android Target Kotlin/Native 在访问 object 单例的 const val 字段时将不再初始化 object 精选博客 Kotlin 中的函数式编程:探索 Monad 及其实际用例 Kotlin 是一门从一开始就支持函数式编程的语言,而 Monad 是函数式编程中的一个重要概念,本文主要介绍了 Monad 是什么,在 Kotlin 函数式编程中如何使用它们,以及一些 Monad 的实际应用案例。\nMonad 的概念看起来有些难以理解, 关于 Monad 到底是什么也可以参考灰蓝天际大佬翻译的: Kotlin 版图解 Functor、Applicative 与 Monad","title":"Kotlin 技术月报 | 2023 年 6 月"},{"content":"最近举办的 KotlinConf 与 Google I/O 上都有不少 Kotlin 技术的分享,同时最近一个月各地的 Kotlin 组织也举办了不少活动\n为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定尝试使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频,社区活动等\n最新动态 KotlinConf 2023 回放来了 KotlinConf 2023 的所有回放已出,所有回放列表可见:https://kotlinconf.com/talks/\n本次大会除了开场与闭幕讨论,共有 69 场分享,可以说是一场盛宴了,我整理统计了一下各个分享的主题\n主题 分享数 Kotlin 跨平台 21 Compose 相关分享 10 Kotlin 在服务端的应用 9 Kotlin 协程相关分享 8 Kotlin 编译器与编译器插件 8 Kotlin 与测试 4 Kotlin 语言特性相关分享 4 Kotlin 与函数式编程 3 Kotlin 用于数据科学 2 Kotlin 与游戏 2 Kotlin 与 Gradle 1 Kotlin 与 AI 1 从各个主题的分享数量也可以看出 Kotlin 在各个方向的火热程度\nKotlin 跨平台相关分享是最多的,可以看出这也是 Kotlin 团队下一步要重点发展的方向 越来越多的人开始使用 Compose ,据统计,在 top 1000 的 Android 应用中,有 21% 的应用使用了 Jetpack Compose 虽然据统计大约 66% 的 Kotlin 开发者是 Android 开发者,但服务端开发者使用 Kotlin 的比例也在逐渐上升,这应该也是 Kotlin 团队想要发力的方向 这次大会 Kotlin 编译器与编译器插件相关的分享也比较多,应该是因为 K2 编译器的逐渐成熟,即将发布 beta 版本 国外很多团队重视代码测试,而不仅仅是需求开发,因此 Kotlin 在测试方面的分享也较多 Google I/O : Android 版 Kotlin 的新动态 What\u0026rsquo;s new in Kotlin for Android:在本次 Google I/O 大会上,介绍了今年将为 Android 开发者发布的 Kotlin 更新,主要包括\n即将推出的 K2 编译器 KTS 成为 Gradle 构建默认设置 Kotlin 符号处理 (Kotlin Symbol Processing) 的改进 Kotlin 跨平台的一些新动态 这其中我最关注的是 K2 编译器的新动态,K2 编译器最显著的改进是编译速度的大幅提升,同时稳定的编译器插件 API 也可以降低 Kotlin 编译器插件的开发成本\n在 Kotlin 1.8.20 中,已经可以通过设置languageVersion = \u0026quot;2.0\u0026quot;来开启 K2 了,而 K2 编译器也将在 Kotlin 1.9.x 中 Beta,并最终在 Kotlin 2.0 版本中稳定\nKotlin 1.9.0-Beta 发布 What\u0026rsquo;s new in Kotlin 1.9.0-Beta:Kotlin 1.9.0 Beta 版本终于发布,主要包括以下内容\n持续完善 Kotlin K2 编译器,添加了对 Kotlin/Native 后端的支持 1.7.20 版本引入的..\u0026lt;操作符成为稳定 API 提供了一个新的扩展函数createParentDirectories,可用于创建带有必要父目录的新文件,如果目录已存在,则不操作,否则创建目录 Kotlin 跨平台 Gradle 插件支持配置缓存 Google 的 Android 团队将提供自己的 Gradle 插件来支持 Kotlin Multiplatform 中的 Android Target Kotlin/Native 在访问object单例的const val字段时将不再初始化object Kotlin 协程 1.7.0 发布 https://github.com/Kotlin/kotlinx.coroutines/releases:在我看来,主要变动在于\n不再支持老版本的 Kotlin/Native 内存模型 Kotlin/Native 版协程终于添加了 Dispatchers.IO 支持 精选博客 Kotlin 成为 Gradle 默认语言!如何快速上手?KOGE 小册来帮忙! 在使用 groovy 开发构建脚本时,大家肯定碰到过代码自动补全,类型检查等痛点问题,而使用 Kotlin DSL 开发脚本可以完美解决这些问题\n在本次 KotlinConf 上已经宣布,Kotlin DSL 现在成为新 Gradle 构建的默认设置。如果你想学习 Gradle,而苦于对 groovy 的语法并不熟悉,那么 KOGE 是你的好帮手\nKOGE 是 Kotlin-oriented Gradle Essentials 的缩写,顾名思义是面向 Kotlin 的 Gradle 基础手册。我们按照合理的先后顺序,列出新手最困惑的概念,再从一些互联网上已有的问题、源码、示例项目中去学习。它不是 “Awesome Gradle” 的项目收藏夹,而是一份大纲,一本简练的自学手册。 手册选择了 Kotlin 作为介绍 DSL 脚本和插件开发的语言,链接和用例以 Android 构建场景为主。\nKotlin 跨平台系列文章 Kotlin 跨平台系列文章,分享了 Kotlin 跨平台在各端的使用实践,包括以下内容:\nKMM跨平台开发入门,看这一篇就够了~ Compose跨平台第一弹:体验Compose for Desktop Compose跨平台第二弹:体验Compose for Web 一文先行体验使用Compose开发iOS~ Kotlin跨平台第四弹:了解Kotlin/Wasm 我开源了一个Compose跨平台项目模版 落地包体积监控,用Kotlin写一个APK差异分析CLI CLI 即 command-line interface (命令行界面),我们在开发中常常会写一些 CLI 工具,本文即是一个使用 Kotlin 实现 APK 差异分析 CLI 的很好示例\n当然有人会问,开发 CLI 我为什么不使用 python 呢?使用 Kotlin 开发 CLI 的最大优势在于,如果你比较熟悉 Kotlin 的话,可以更快的实现功能,也可以写出更好的代码,而不是使用一个你可能不那么熟悉的语言。\n因此使用 Kotlin 开发 CLI 是在你已经掌握 Kotlin 之后提供的一个选项,大家可根据自己的情况选用\nKotlin Unit 与 Nothing 详解 Unit 为啥还能当函数参数?面向实用的 Kotlin Unit 详解 这玩意真的有用吗?对,是的!Kotlin 的 Nothing 详解 Kotlin 的 Unit 与 Nothing 类型,其实我们每天都在使用。我们知道,Unit 表示没有返回值,Nothing 则是所有类型的子类型,但是它们的本质是什么,又为什么这么设计呢?上面两篇文章就解答了这些问题,讲解的很细致,通俗易懂\n精选视频 Compose iOS 发布 alpha 版本 Compose Multiplatform on iOS by: Sebastian Aigner and Nikita Lipsky:KotlinConf 大会上关于 Compose iOS 的分享,非常精彩,主要包括以下内容:\nCompose Multiplatform for iOS Demo 现场演示,效果看起来已经很不错了 基于 Jetpack Compose 构建,与 Jetpack Compose 的 API 相同,因此可以快速将 Jetpack Compose 项目扩展成 Compose 跨平台项目 基于 Kotlin 跨平台构建,因此可以使用相同的机制访问平台特异的 API 允许与原生用户界面的双向互操作:可以在 Compose UI 中嵌入复杂的原生视图,例如MKMapView,或者在 SwiftUI 中嵌入 Compose 代码 介绍了 Compose Multiplatform for iOS 的架构与原理,以及其目前在功能与性能上待完善的部分 Kotlin 炉边漫谈第 8 期 《Kotlin 炉边漫谈》第 8 期:阿里和美团的 Kotlin Multiplatform 应用案例 | 播客\n由来自阿里巴巴的曹立成和美团的刘银龙两位嘉宾,跟大家一起分享 Kotlin Multiplatform 的落地实践经验\n横向对比了 Flutter, Kotlin Multiplatform, React Native, 以及国内大厂自研跨平台框架等的优缺点及应用场景,同时分享了在做技术选型时的经验分享,非常精彩,不容错过\nK2 编译器编译速度实测 Kotlin 新编译器 K2 到底有多快?:K2 编译器一直号称可以大幅提升编译速度,那么到底提升了多少?现在我们是否可以开始使用 K2 了呢?\n本视频实测了 K2 的编译提速效果,发现 K2 编译器并没有吹牛,测试结果如下图所示:\n社区活动 KotlinConf Global KotlinConf Global 是 KotlinConf 在全球各个城市的拓展延伸活动,促进各地 Kotlin 开发人员之间的联系,最近全国各个城市也举办了相关活动\n上海线下活动|2023 KotlinConf Global Shanghai Meetup 期待与您见面 活动回顾 | 2023 KotlinConf Global 北京分享会 深圳 KotlinConf Global 2023 西安线下活动|2023 KotlinConf Global Xi’an Meetup 期待与您见面 新成立的 Kotlin User Group 最近全国各个城市也新创建了一些 KUG,欢迎各个城市的 Kotlin 爱好者加入\n贵州 Kotlin 用户组 郑州 Kotlin 用户组 ","permalink":"https://beijing-kug.github.io/news/kotlin-news-2023-05/","summary":"最近举办的 KotlinConf 与 Google I/O 上都有不少 Kotlin 技术的分享,同时最近一个月各地的 Kotlin 组织也举办了不少活动\n为了帮助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,我们决定尝试使用月报的形式,整理展示最近一个月的 Kotlin 技术动态。\n月报的主要内容包括:整理展示最近一个月的最新技术动态,精选博客,精选视频,社区活动等\n最新动态 KotlinConf 2023 回放来了 KotlinConf 2023 的所有回放已出,所有回放列表可见:https://kotlinconf.com/talks/\n本次大会除了开场与闭幕讨论,共有 69 场分享,可以说是一场盛宴了,我整理统计了一下各个分享的主题\n主题 分享数 Kotlin 跨平台 21 Compose 相关分享 10 Kotlin 在服务端的应用 9 Kotlin 协程相关分享 8 Kotlin 编译器与编译器插件 8 Kotlin 与测试 4 Kotlin 语言特性相关分享 4 Kotlin 与函数式编程 3 Kotlin 用于数据科学 2 Kotlin 与游戏 2 Kotlin 与 Gradle 1 Kotlin 与 AI 1 从各个主题的分享数量也可以看出 Kotlin 在各个方向的火热程度\nKotlin 跨平台相关分享是最多的,可以看出这也是 Kotlin 团队下一步要重点发展的方向 越来越多的人开始使用 Compose ,据统计,在 top 1000 的 Android 应用中,有 21% 的应用使用了 Jetpack Compose 虽然据统计大约 66% 的 Kotlin 开发者是 Android 开发者,但服务端开发者使用 Kotlin 的比例也在逐渐上升,这应该也是 Kotlin 团队想要发力的方向 这次大会 Kotlin 编译器与编译器插件相关的分享也比较多,应该是因为 K2 编译器的逐渐成熟,即将发布 beta 版本 国外很多团队重视代码测试,而不仅仅是需求开发,因此 Kotlin 在测试方面的分享也较多 Google I/O : Android 版 Kotlin 的新动态 What\u0026rsquo;s new in Kotlin for Android:在本次 Google I/O 大会上,介绍了今年将为 Android 开发者发布的 Kotlin 更新,主要包括","title":"Kotlin 技术月报 | 2023 年 5 月"},{"content":"2023 KotlinConf Global 北京分享会结束了,感谢所有参与其中的讲师、参会者、工作人员。\n我们将讲师的演讲视频与讲义发布在 B 站与谷歌 drive ,方便大家回顾\n演讲回看 活动开场 你想知道的 Jetpack Compose 的编译器黑魔法 Jetpack Compose 是 Android 官方推出的新一代的声明式 UI 开发框架,它一经推出便受到了广大开发者的密切关注。Compose 的设计实现将 Kotlin 的 DSL 能力发挥到了极致,其中基于 Kotlin 编译器插件实现的编译时代码检查和变换发挥了巨大的作用。这次分享我们将对 Jetpack Compose 的编译器插件源码进行简要剖析,在了解 Compose 的工作机制的同时也能深入理解编译器插件的适用场景。\n《你想知道的 Jetpack Compose 的编译器黑魔法》 PPT 链接\nCompose 到底能玩出什么花? Jetpack Compose 是 Android 官方推出的新一代的声明式 UI 开发框架,无独有偶,Jetbrains 也推出了新一代的声明式 UI 开发框架: “Compose”,没错,名称都一样,并且使用方式也基本一致。本次分享会带大家看一看 Jetbrains 的 Compose 有什么厉害之处,并且能为我们安卓开发工程师的竞争力带来哪些提升。\n《Compose 到底能玩出什么花?》 PPT 链接\nKMM 跨平台原理及实践 Jetbrains Compose 为什么可以跨平台?这离不开 Kotlin Multiplatform (KMP)技术,它是 Kotlin 官方提供的一套跨平台解决方案,通过编译器将 Kotlin 源码编译为各平台目标代码或机器码。本次分享主要介绍 KMP 跨平台原理,以及 Kotlin Multiplatform Mobile(KMM)在移动端的落地实践,并结合本次官方 KotlinConf 大会的最新进展探讨未来更广的发展前景。\n《KMM 跨平台原理及实践》PPT 链接\n精彩瞬间 ","permalink":"https://beijing-kug.github.io/events/kotlinconf-callback/","summary":"2023 KotlinConf Global 北京分享会结束了,感谢所有参与其中的讲师、参会者、工作人员。\n我们将讲师的演讲视频与讲义发布在 B 站与谷歌 drive ,方便大家回顾\n演讲回看 活动开场 你想知道的 Jetpack Compose 的编译器黑魔法 Jetpack Compose 是 Android 官方推出的新一代的声明式 UI 开发框架,它一经推出便受到了广大开发者的密切关注。Compose 的设计实现将 Kotlin 的 DSL 能力发挥到了极致,其中基于 Kotlin 编译器插件实现的编译时代码检查和变换发挥了巨大的作用。这次分享我们将对 Jetpack Compose 的编译器插件源码进行简要剖析,在了解 Compose 的工作机制的同时也能深入理解编译器插件的适用场景。\n《你想知道的 Jetpack Compose 的编译器黑魔法》 PPT 链接\nCompose 到底能玩出什么花? Jetpack Compose 是 Android 官方推出的新一代的声明式 UI 开发框架,无独有偶,Jetbrains 也推出了新一代的声明式 UI 开发框架: “Compose”,没错,名称都一样,并且使用方式也基本一致。本次分享会带大家看一看 Jetbrains 的 Compose 有什么厉害之处,并且能为我们安卓开发工程师的竞争力带来哪些提升。\n《Compose 到底能玩出什么花?》 PPT 链接\nKMM 跨平台原理及实践 Jetbrains Compose 为什么可以跨平台?这离不开 Kotlin Multiplatform (KMP)技术,它是 Kotlin 官方提供的一套跨平台解决方案,通过编译器将 Kotlin 源码编译为各平台目标代码或机器码。本次分享主要介绍 KMP 跨平台原理,以及 Kotlin Multiplatform Mobile(KMM)在移动端的落地实践,并结合本次官方 KotlinConf 大会的最新进展探讨未来更广的发展前景。","title":"活动回顾 | 2023 KotlinConf Global 北京分享会"},{"content":"5月13日,北京 Kotlin 用户组将举办首次线下聚会,欢迎您的到来。\n这场活动是 KotlinConf Global 活动的一部分,我们邀请了三位嘉宾来分享他们在 Kotlin 元编程、Compose 跨平台以及 Kotlin Multiplatform 等方面的实践经验。\n大家可以在现场与各位 Kotlin 技术爱好者一起交流讨论,线下面基,点击报名链接或者扫描文末二维码即可报名\n活动简介 经过三年的疫情最困难时期,JetBrains 官方举办的 KotlinConf 大会于今年 4 月中旬在荷兰阿姆斯特丹再次回归。此次大会上,Kotlin 团队的开发人员介绍了 Kotlin 的未来发展方向和重要更新,同时来自世界各地的开发人员也分享了 Kotlin 在各个领域的先进实践经验。\n鉴于许多开发人员无法亲身参加现场活动,JetBrains 官方在全球范围内发起了 KotlinConf Global 活动,由 JetBrains 注册的 Kotlin User Group(KUG)在当地举办,旨在促进本地 Kotlin 开发人员之间的联系,提高技术水平。\n本次活动是 KotlinConf Global 活动的一部分,同时也是北京 Kotlin 用户组的首次线下活动,期待您的参加\n精彩内容 《你想知道的 Jetpack Compose 的编译器黑魔法》 讲师简介:霍丙乾 bennyhuo,Google 开发者专家(Kotlin 方向);《深入理解 Kotlin 协程》 作者;先后就职于腾讯、猿辅导。\n内容简介:Jetpack Compose 是 Android 官方推出的新一代的声明式 UI 开发框架,它一经推出便受到了广大开发者的密切关注。Compose 的设计实现将 Kotlin 的 DSL 能力发挥到了极致,其中基于 Kotlin 编译器插件实现的编译时代码检查和变换发挥了巨大的作用。这次分享我们将对 Jetpack Compose 的编译器插件源码进行简要剖析,在了解 Compose 的工作机制的同时也能深入理解编译器插件的适用场景。\n《Compose 到底能玩出什么花?》 讲师简介:朱江,《Jetpack Compose:Android全新UI编程》作者;CSDN 博客专家、掘金优秀创作者;现在联想(北京)有限公司担任 Android 开发工程师。\n内容简介:正如霍丙乾大佬所说,Jetpack Compose 是 Android 官方推出的新一代的声明式 UI 开发框架;无独有偶,Jetbrains 也推出了新一代的声明式 UI 开发框架: “Compose”,没错,名称都一样,并且使用方式也基本一致。本次分享会带大家看一看 Jetbrains 的 Compose 有什么厉害之处,并且能为我们安卓开发工程师的竞争力带来哪些提升。\n《KMM 跨平台原理及实践》 讲师简介:刘银龙,美团移动端开发工程师,GMTC 讲师。\n内容简介:Jetbrains Compose 为什么可以跨平台?这离不开 Kotlin Multiplatform (KMP)技术,它是 Kotlin 官方提供的一套跨平台解决方案,通过编译器将 Kotlin 源码编译为各平台目标代码或机器码。本次分享主要介绍 KMP 跨平台原理,以及 Kotlin Multiplatform Mobile(KMM)在移动端的落地实践,并结合本次官方 KotlinConf 大会的最新进展探讨未来更广的发展前景。\n时间地点 时间:2023 年 5 月 13 日,14:00 - 17:00 地点:北京市朝阳区望京SOHO T2C座(在 1 楼抵达即可,组织者会带领大家上去) 报名方式 我们非常欢迎您报名成为观众,并与我们一同聆听他人的分享、参与热烈的技术探讨。观众报名对我们而言非常重要,因为我们需要根据观众人数申请合适的活动场地、准备活动奖品,并采购零食和饮料等。因此如果您有意参加的话,请您填写下方的观众报名表。\n报名链接:2023 KotlinConf Global 北京分享会线下观众报名表\n扫码报名:\n组织者联系方式 如果您决定报名参加活动,请添加组织者的微信号,以便在活动当日前往正确的地点。如果您有任何疑问或需要帮助,请随时联系组织者:\n微信号:RicardoJiang2022 公众号:关注微信公众号“程序员江同学”,点击技术讨论 ","permalink":"https://beijing-kug.github.io/events/kotlinconf/","summary":"5月13日,北京 Kotlin 用户组将举办首次线下聚会,欢迎您的到来。\n这场活动是 KotlinConf Global 活动的一部分,我们邀请了三位嘉宾来分享他们在 Kotlin 元编程、Compose 跨平台以及 Kotlin Multiplatform 等方面的实践经验。\n大家可以在现场与各位 Kotlin 技术爱好者一起交流讨论,线下面基,点击报名链接或者扫描文末二维码即可报名\n活动简介 经过三年的疫情最困难时期,JetBrains 官方举办的 KotlinConf 大会于今年 4 月中旬在荷兰阿姆斯特丹再次回归。此次大会上,Kotlin 团队的开发人员介绍了 Kotlin 的未来发展方向和重要更新,同时来自世界各地的开发人员也分享了 Kotlin 在各个领域的先进实践经验。\n鉴于许多开发人员无法亲身参加现场活动,JetBrains 官方在全球范围内发起了 KotlinConf Global 活动,由 JetBrains 注册的 Kotlin User Group(KUG)在当地举办,旨在促进本地 Kotlin 开发人员之间的联系,提高技术水平。\n本次活动是 KotlinConf Global 活动的一部分,同时也是北京 Kotlin 用户组的首次线下活动,期待您的参加\n精彩内容 《你想知道的 Jetpack Compose 的编译器黑魔法》 讲师简介:霍丙乾 bennyhuo,Google 开发者专家(Kotlin 方向);《深入理解 Kotlin 协程》 作者;先后就职于腾讯、猿辅导。\n内容简介:Jetpack Compose 是 Android 官方推出的新一代的声明式 UI 开发框架,它一经推出便受到了广大开发者的密切关注。Compose 的设计实现将 Kotlin 的 DSL 能力发挥到了极致,其中基于 Kotlin 编译器插件实现的编译时代码检查和变换发挥了巨大的作用。这次分享我们将对 Jetpack Compose 的编译器插件源码进行简要剖析,在了解 Compose 的工作机制的同时也能深入理解编译器插件的适用场景。","title":"线下活动 | 2023 KotlinConf Global 北京分享会"},{"content":"kotlin-android-extensions 框架已经过时了很久,并且将在 Kotlin 1.8 中被正式移除。\n对于新代码,我们可以使用 ViewBinding 等方式替换,但是大量存量代码的迁移,对于开发者来说不是一个轻松的工作。\n为此,看云控股技术团队开源了 Kace 框架, 帮助开发者实现 kotlin-android-extensions 插件的无缝迁移。\n开源地址:https://github.com/kanyun-inc/Kace\n","permalink":"https://beijing-kug.github.io/events/kace/","summary":"kotlin-android-extensions 框架已经过时了很久,并且将在 Kotlin 1.8 中被正式移除。\n对于新代码,我们可以使用 ViewBinding 等方式替换,但是大量存量代码的迁移,对于开发者来说不是一个轻松的工作。\n为此,看云控股技术团队开源了 Kace 框架, 帮助开发者实现 kotlin-android-extensions 插件的无缝迁移。\n开源地址:https://github.com/kanyun-inc/Kace","title":"KAE将被正式移除,如何无缝迁移?"},{"content":"Kotlin 协程 破解 Kotlin 协程专栏 Kotlin 协程视频教程 KMM (Kotlin Multiplatform Mobile) KMM 环境搭建及入门教程 KMM 视频分享教程 Kotlin 元编程 Kotlin 元编程GDG社区分享视频 Kotlin 注解处理器视频教程 别了 KAPT , 使用 KSP 快速实现 ButterKnife Kotlin 更新 Kotlin 1.5 有哪些新内容? Kotlin 1.6 有哪些新内容? Kotlin 1.7 有哪些新内容? ","permalink":"https://beijing-kug.github.io/advanced/","summary":"Kotlin 协程 破解 Kotlin 协程专栏 Kotlin 协程视频教程 KMM (Kotlin Multiplatform Mobile) KMM 环境搭建及入门教程 KMM 视频分享教程 Kotlin 元编程 Kotlin 元编程GDG社区分享视频 Kotlin 注解处理器视频教程 别了 KAPT , 使用 KSP 快速实现 ButterKnife Kotlin 更新 Kotlin 1.5 有哪些新内容? Kotlin 1.6 有哪些新内容? Kotlin 1.7 有哪些新内容? ","title":"Kotlin 进阶学习材料"},{"content":"","permalink":"https://beijing-kug.github.io/events/","summary":"events","title":"Events"},{"content":"","permalink":"https://beijing-kug.github.io/news/","summary":"news","title":"News"}]