为了协助社区的小伙伴们更好地了解 Kotlin 相关的最新动态,咱们决定测验运用月报的形式,收拾展现最近一个月的 Kotlin 技能动态。

月报的首要内容包含:收拾展现最近一个月的最新技能动态,精选博客,精选视频以及社区活动等方面的信息。

最新动态

Kotlin 1.9.0 版别发布

Kotlin 1.9.0 现已发布 | 官方博客:Kotlin 1.9.0 版别已发布,其间最大的变化应该是 K2 编译器终于支撑了 KAPT 编译器插件,首要包含以下内容:

  • 继续完善 Kotlin K2 编译器,包含对 KAPT 的支撑,Gradle 构建陈述更好的支撑等
  • 一些言语特性:在枚举类中引荐运用entries特点替代values()方法进行遍历,data object 现已安稳,Value Class 支撑次级构造函数
  • 1.7.20 版别引进的..<操作符成为安稳 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 更新了什么?

Kotlin Notebook IDEA 插件已发布

Introducing Kotlin Notebook

Kotlin 版别的 Jupyter Notebook,与代码编辑器不同的是,Notebook是一种交互式东西,能够让你在一个文档中整合代码、可视化和文本。在Notebook中,你能够编写和运转代码片段,查看成果,并在一个当地记载你的考虑过程。Notebook在快速原型规划、剖析和数据科学等范畴都有着广泛的运用,

Kotlin Notebook 插件为 IntelliJ IDEA 带来了交互式开发体会,现已推出首个实验版别。本文介绍了该插件所支撑的功用及其运用示例。

Redwood 发布 beta 版别

Redwood 发布 beta 版别

Redwood 是 Cash 公司开源的 Compose 跨渠道结构,相似 Compose 版 RN,经过组件映射的方法完成跨渠道,一起也支撑经过与 Zipline 结合完成动态更新

Redwood 现在已发布了 0.50 版别,这个版别标志着Redwood进入 beta 阶段,相较于之前供给了更多的安稳性保证。

从现在开始,直至 1.0 版别(不包含 1.0 版别)发布之前,Redwood 都将在协议和服务上与旧版别坚持兼容。因为 Redwood 供给了动态更新功用,这也意味着在运用 Redwood 0.5 版别的 Treehouse host 中,能够无缝支撑运用 Redwood 0.6 及今后版别编译和部署的 Treehouse client 代码。

精选博客

规划图转Compose代码,Relay帮你轻松搞定

简单来说,Relay 能够与 Figma 集成,直接把规划稿生成 Compose 代码。

规划人员运用 Relay for Figma 插件为界面组件添加注解并进行打包,包含布局、样式、动态内容和交互行为的相关信息,以便于开发者运用。

开发者运用 Relay for Android Studio 插件导入界面软件包,并生成 Jetpack Compose 代码。

Android 开发人员很大一部分的时刻花费在了完成 UI 细节上,假如能完成全自动乃至是半自动的desgin to code,都将极大地提高开发功率。总的来说,这项技能具有巨大的运用价值。

Kotlin 新特性预览之 data object 数据单例

1.8.20版别中引进的 data object 数据单例在1.9.0版别中现已变得安稳。本文首要介绍了以下内容:

  1. data object 与 object 的区别
  2. data object 与 sealed class 更适配
  3. data object 与 data class 的区别

Gson与Kotlin”摩擦”的那件小事

运用 Gson 进行序列化时,假如序列化类没有无参构造函数,会导致特点的默许初始值丢失等问题。本文介绍了 Gson 反序列化非静态内部类时的坑,一起介绍了一种替代杂乱的TypeToken写法的新方法

@OptIn(ExperimentalStdlibApi::class)
fun main(args: Array<String>) {
    val content = "[{"content": 10, "location": "aa"}, {"content": 10, "location": "bb"}]"
    val obj = Gson().fromJson<List<OutClass>>(content, typeOf<List<OutClass>>().javaType)
    println(obj)
}

总的来说,Gson 与 Kotlin 的适配并不是很好,因而假如运用 Kotlin 的话,仍是更引荐迁移到 Moshi 或者 kotlin-serialization。

Compose 为什么能够跨渠道?

本文是 2022 Kotlin 中文开发者大会相关共享的文字版,深化介绍了 Compose 支撑跨渠道的底层原理

Kotlin 技术月报 | 2023 年 7 月

咱们知道,Compose 结构具有杰出的分层结构,其间 Compose Compiler 层与 Compose Runtime 层担任驱动一棵节点树的更新,这部分与渠道无关,节点树也能够是任意类型的节点树乃至是一棵烘托无关的树。

而不同渠道的烘托机制不同,所以 Compose UI 与渠道相关,因而 Compose 要完成跨渠道要处理的唯一问题就是 Compose UI 层的跨渠道

Compose 跨渠道技能发展十分迅速,截止现在现已呈现了两种完成 Compose UI 层跨渠道的计划,令人充溢等待

  • compose-multiplatform:Jetbrains 现在正在开发的 Compose 跨渠道结构,相似于 flutter,经过封装 skia 引擎,处理 Compose UI 层的跨渠道问题
  • redwood:Cash 公司开源的类 React Native 计划,经过组件映射的方法完成 UI 层的跨渠道,一起也支撑动态化更新组件

Compose 组件的 API 官方攻略

API Guidelines for @Composable components in Jetpack Compose

最近官方更新了 Compose 组件 API 攻略,这些攻略介绍了运用 Jetpack Compose 开发 UI 组件的最佳实践,遵从这些攻略能够给咱们带来以下收益

  • 长期可扩展:遵从最佳实践的组件 API 能够下降改变本钱,削减改变对运用者的影响
  • 与其他组件坚持一致:不同的组件都遵从相同的攻略,运用者能够运用现有的常识和模式来处理由不同作者创立的新组件,下降接入新组件的本钱
  • 削减错误:封装杰出的组件会鼓励运用者写出符合最佳实践的代码,并在可能的情况下禁止错误的用法。

匿名内部类/Lambda Java和Kotlin谁会导致内存走漏?

本文从字节码的角度剖析了为什么 Java 匿名内部类会导致内存走漏,一起剖析比较了 Java 的 Lambda 表达式,Kotlin 匿名内部类,Lambda 表达式和高阶函数,以评价它们是否会引发相似的内存走漏问题

Kotlin 技术月报 | 2023 年 7 月

Jetpack Compose也能搞插件化了

在传统的 View 体系中,插件化结构的其实很大一部分作业就是处理未注册 Activity 的问题。在进入 Jetpack Compose 的世界今后,Activity 的人物被淡化了,因为一个 Composable 组件就能够承当一个屏幕级的显示,因而咱们的运用中不再需求那么多的 Activity 类,只要你喜爱,你乃至能够打造一个单 Activity 的纯 Compose 运用。

因而 Compose 实际上下降了插件化的本钱,本文首要探究了几种能够在 Jetpack Compose 中实施插件化/动态加载的可行性计划

  • Activity 占坑方法拜访插件中的 Composable 组件(传递不同参数,展现不同的 Composable)
  • 直接加载插件中的 Composable 组件(回来 Compose 组件)
  • 套娃模式加载 Composable 组件(回来 ComposeView)

精选视频

为什么 Kotlin 排名比 Swift 落后?

它竟然说 Java 不行了?!!

本视频剖析了为什么 Kotlin 的运用显着比 Swift 愈加广泛,但是在 TIOBE 等编程言语排名中,Swift 的排名却远高于 Kotlin。其原因在于 TIOBE 是经过搜索成果数来统计言语排名的,Swift 这个词汇具有多重含义,包含人名、世界结算体系等,而 Kotlin 则起源于圣彼得堡邻近的一座默默无闻的小岛:Kotlin Island。

相比之下,经过剖析 Github 上的代码仓库来统计言语活跃度的 GitHut 排名或许愈加准确

Kotlin 技术月报 | 2023 年 7 月

Kotlin 跨渠道从入门到实战

Kotlin Multiplatform from “hello world” to the real world

Kotlin 跨渠道现在现已进入 beta 阶段。到现在,您肯定现已听说过 Kotlin 多渠道技能,并可能测验在 demo 中体会过它。但当您真正测验将 Kotlin 跨渠道技能运用于实际项目时,您可能会遇到一些奇妙且杂乱的问题,比如 Kotlin 与 Swift 的互操作性、模块化、办理具有相互依赖关系的多个代码库,以及优化构建时刻和二进制文件大小等。本视频的共享者来自 touchlab,介绍了他们在这些方面的一些实践经验。

社区活动

深圳、武汉、贵州 KUG 联合线上共享会

社区活动 | 7 月 23 日,深圳、武汉、贵州 KUG 联合线上共享会等你参与!

深圳、武汉、贵州 KUG 安排的联合线上共享会,首要包含以下内容

  • 《JWT 与 Ktor 的故事》共享
  • 《Compose-Fluent-UI》共享
  • 《Compose 状况办理与 Compose 快照》共享

参加 Kotlin 用户组

KUG 是让 Kotlin 开发者和爱好者们聚在一起的技能社区。经过根据群聊的日常沟通或不定期在线上/线下举行的技能讲座和沙龙,促进大家的常识共享和技能提高。

截至现在,国内已有 16 个 KUG 成立,各个 KUG 的信息和参加方法可见链接:找到安排!国内 Kotlin User Group 信息收拾(23年7月)