KotlinConf 2024:深入了解Kotlin Multiplatform (KMP)

news2025/2/24 23:23:52

KotlinConf 2024:深入了解Kotlin Multiplatform (KMP)

在近期的Google I/O大会上,我们推荐了Kotlin Multiplatform (KMP)用于跨移动、网页、服务器和桌面平台共享业务逻辑,并在Google Workspace中采用了KMP。紧接着,KotlinConf 2024成为与Kotlin社区分享亮点并交流的重要时刻。

Kotlin Multiplatform (KMP) 的优势

Kotlin Multiplatform由JetBrains开发,允许开发者通过将Kotlin代码编译为平台原生的二进制文件来构建跨平台应用,同时利用现代内存管理语言的全部功能。这种方法是Google Workspace团队的长期投资,使他们能够在不同平台之间共享业务逻辑。

Android团队一直在努力支持KMP,并最近发布了支持KMP的Room的alpha版本。目前,Annotations、Collections和DataStore已经在支持KMP的稳定版中发布。我们还对Lifecycle、ViewModel和Paging库进行了通用化处理,以便与非Android平台集成。

大会主题演讲和技术会议

会议以主题演讲开始,Google的Jeffrey van Gogh概述了Google对Kotlin生态系统的贡献。Jeffrey深入探讨了Google如何利用Kotlin Multiplatform (KMP)简化其产品组合的开发。Jeffrey强调了KMP为Google项目带来的代码共享和效率提升的好处,这与我们最近对Android应用开发的建议一致。

在KotlinConf 2024上的技术会议涵盖了一系列主题:

  1. 《两种语言的故事》
    由John Pampuch带来的这场演讲,通过对比Java和Kotlin的演变,展示了它们的共生关系和相互影响。

  2. 《启用Kotlin Multiplatform成功:Android Jetpack之旅》
    由Elif Bilgin、Yigit Boyar和Daniel Santiago Rivera代表的Android Jetpack团队,分享了KMP在Jetpack中的当前状态,介绍了支持KMP的Jetpack库更新,并探讨了将一个成熟的Jetpack库迁移到KMP的过程。

  3. 《使用Kotlin加速开发》
    由Andrei Shikov分享了优化Compose for Android的宝贵经验,强调了Kotlin中的一些有趣性能细节以及Compose团队为确保最佳性能而建立的保护措施。

  4. 《Google Workspace中的Kotlin Multiplatform》
    由Jason Parachoniak讨论了Google Workspace从以Java为导向的多平台基础迁移到Kotlin Multiplatform的过程,分享了所学到的经验和这一雄心勃勃的过渡的当前状态。

  5. 《编写你自己的Kotlin Lint检查》
    由Android Studio工程总监Tor Norbye带来的这场会议,帮助开发者通过创建自己的检查来扩展Android Lint,这是一种被数百万开发者使用的静态分析工具。尽管名字如此,它不仅仅针对Android——还用于分析Google内部的服务器端Kotlin和Java代码!

Android 支持 Kotlin Multiplatform (KMP) 实现跨移动、网页、服务器和桌面平台的业务逻辑共享

传统上,开发者需要为每个平台单独编写代码,或者在复用代码时做出许多妥协。自2017年以来,Android 一直积极支持 Kotlin。今天在 Google I/O 大会上,我们宣布支持 Kotlin Multiplatform (KMP),这使得跨移动、网页、服务器和桌面平台共享代码成为可能,从而提高开发者的生产力,并与 Android 的 Kotlin 优先策略完美契合,最终提升 Android 应用的质量。

Kotlin Multiplatform (KMP) 的长期投资

Google Workspace 团队长期以来一直投资于 KMP,这使得跨平台体验的交付更加灵活和快速。Google Workspace 团队对 KMP 作为多平台架构投资方向的潜力充满信心,认为其能够满足各种工作负载的性能预期。

首个应用案例

这一旅程的初始步骤是推出 Google Docs 应用,该应用利用 KMP 实现了 Android、iOS 和网页端的共享业务逻辑,验证了其在 Google 规模上的生产就绪性。Google Workspace 团队期待继续探索 KMP 在其产品套件中的可能性,旨在提高生产力,并为所有平台的用户提供无缝体验。

跨平台开发的成功案例

许多公司已经成功利用 KMP 进行跨平台应用开发,了解他们如何应用不同的代码共享策略。Kotlin Multiplatform 由 JetBrains 开发,通过将 Kotlin 编译为平台原生二进制文件,提供了一种共享代码的新方法。Kotlin 能够为本机平台提供完整、现代的内存管理语言,实现原生互操作性和渐进采用。结合其他平台上的 Kotlin Multiplatform,Kotlin 在 Android 上提供了一种提高生产力和质量的绝佳方式,同时不妥协性能和互操作性。

当前支持状态

许多广泛使用的库提供了对 Kotlin Multiplatform 的内置支持,简化了跨平台开发体验。这些库无缝协作,例如,Ktor 通过处理 REST 服务消费简化了网络任务,kotlinx.serialization 将数据转换为 JSON 等格式,而 Okio 处理基本的文件 I/O。此外,SKIE 支持在 iOS 上使用现代类型和协程,CocoaPods 集成则使得使用 iOS 特定依赖项成为可能。

我们与 JetBrains 及 Kotlin 开发者社区合作,为许多 Jetpack 库添加了 KMP 支持。在某些情况下,我们提供了 iOS 平台目标,而在其他情况下,JetBrains 和社区提供了多平台发行版。

目前,Annotations、Collections 和 DataStore 库均已在稳定版中支持 Kotlin Multiplatform。我们还在增加对 iOS 平台目标的二进制兼容性验证支持,使其达到与 Android 相同的质量标准。除了上述库之外,我们还开始为 Room、Lifecycle 和 ViewModels 添加 Kotlin Multiplatform 支持,alpha 版本现已可用。为了更好地理解哪些类和函数在哪些平台上可用,库参考文档现在标明了“common”和平台支持。

编译器和性能优化

Android 工程师与 JetBrains 合作改进 Kotlin/Native(用于 iOS 和原生桌面操作系统)的运行时性能,在编译器基准测试中显示出18%的运行时性能提升。此外,Android 团队还贡献了 Kotlin Native Compiler 的构建时间性能改进,速度提高了多达2倍。

Android Gradle 插件现在正式支持 Kotlin Multiplatform,能够通过简洁的构建定义将 Android 作为共享代码的平台目标,如下所示:

plugins {
    id("org.jetbrains.kotlin.multiplatform")
    id("com.android.library")
}

kotlin {
    androidTarget {
        compilations.all {
            kotlinOptions {
                jvmTarget = "11"
            }
        }
    }  
    listOf(
        iosX64(),
        iosArm64(),
        iosSimulatorArm64()
    ).forEach { iosTarget ->
        iosTarget.binaries.framework {
            baseName = "Shared"
            isStatic = true
        }
    }    
    sourceSets {
        commonMain.dependencies {
            // 在这里添加你的多平台依赖项
        }
    }
}

Android Gradle 插件 DSL 中的 KMP 支持

由于 Android Studio 基于 JetBrains 的 IntelliJ 平台,因此它继承了对 Kotlin Multiplatform 代码编辑和许多其他开发功能的支持。其他 Android 开发工具,如 Android Lint 和 Kotlin Symbol Processing (KSP),也开始增加更多的 Kotlin Multiplatform 支持。

Google Chrome 现在正式支持 WasmGC,这被 Kotlin Multiplatform 的 WebAssembly 平台目标使用,以高效且性能良好的方式实现与浏览器的代码共享。

了解更多KMP

此外,你可以查看更新的文档和一个新的移动示例项目。这些资源应该能够帮助你开始学习KMP,如果你有任何反馈或遇到任何问题,请通过此链接分享。

https://developer.android.com/kotlin/multiplatform

https://github.com/android/kotlin-multiplatform-samples

https://developer.android.com/jetpack/androidx/releases/room#version_27_2

展望未来

我们对Kotlin的未来充满期待,计划在更多的AndroidX库中添加对KMP的支持。我们期待看到你们如何采用并使用KMP构建下一代应用。

KotlinConf 2024不仅是展示最新技术和工具的平台,更是开发者之间交流和学习的盛会。通过KMP,开发者们可以更高效地在多个平台上共享业务逻辑,提升开发速度和质量。Google在Kotlin生态系统中的持续投入,展示了我们对这一技术的长期承诺和信心。

https://android-developers.googleblog.com/2024/05/android-support-for-kotlin-multiplatform-to-share-business-logic-across-mobile-web-server-desktop.html

在未来的开发过程中,我们将继续致力于优化KMP的使用体验,提供更多的资源和支持,帮助开发者们更好地利用这一强大的工具。期待在不久的将来,看到更多优秀的应用诞生,推动整个Kotlin社区的进步和发展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1719808.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字水印 | 图像噪声攻击(高斯/椒盐/泊松/斑点)

目录 Noise Attack1 高斯噪声(Gaussian Noise)2 椒盐噪声(Salt and Pepper Noise)3 泊松噪声(Poisson Noise)4 斑点噪声(Speckle Noise)5 完整代码 参考博客:Python…

ES 生命周期管理

一 .概念 ILM定义了四个生命周期阶段:Hot:正在积极地更新和查询索引。Warm:不再更新索引,但仍在查询。cold:不再更新索引,很少查询。信息仍然需要可搜索,但是如果这些查询速度较慢也可以。Dele…

[羊城杯 2021]BabySmc

运行就是输入flag 不知道怎么跳过去的 这个应该就是smc加密的函数了 运行完这个函数才能继续往下 int __cdecl main(int argc, const char **argv, const char **envp) {__int64 v3; // rbx__int64 v4; // r12__int64 v5; // r13unsigned __int64 v6; // raxchar v7; // spcha…

恒压频比开环控制系统Matlab/Simulink仿真分析(SPWM控制方式)

介绍恒压频比的开环控制方法驱动永磁同步电机的转动,首先分析恒压频比的控制原理,然后在Matlab/Simulink中进行永磁同步电机恒压频比开环控制系统的仿真分析,最后将Simulink中的恒压频比控制算法生成代码加载到实际工程中进行工程实现。 一、…

匿名函数(lambda)

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 匿名函数是指没有名字的函数,应用在需要一个函数,但是又不想费神去命名这个函数的场合。通常情况下,这样的函数只…

StrApi基本使用

1.创建项目(这里只使用默认的sqllite) 点击链接进入官网查看先决条件,看看自己的node,python等是否符合版本要求 运行以下命令进行创建项目(网慢导致下载失败的话可以尝试使用手机热点给电脑使用,我就是这样解决的,也可以看我csdn的资源这里进行下载) yarn create strapi-ap…

Echarts 指定 series 中的数据对应指定类型的X轴或Y轴

文章目录 需求分析需求 下图中,既有折线又有柱状图,也就是说X轴既有 value 的类型,又有 category 类型的数据,如果都要在一张图中展示, 分析 因为数据来源不同,且数据所对应的 X 轴和 Y 轴也不同,所以需要在设置数据源时添加所对应的索引 xAxisIndex 和 yAxisIndex op…

Llama模型家族之RLAIF 基于 AI 反馈的强化学习(六) RLAIF 代码实战

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (三) 基于 LlaMA…

二叉树—堆(C语言实现)

一、树的概念及结构 1.树的概念 树是一种非线性的数据结构,它是有n(n > 0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一颗倒挂的树,也就是说它是根朝上,而叶朝下。 ● 有一个特殊的结点…

CasaOS:开源家庭云系统安装

CasaOS是一个基于Docker生态系统的开源家庭云系统,专为家庭场景而设计。致力于打造全球最简单、最易用、最优雅的家居云系统。安装CasaOS可以给鲁班猫带来更好的局域网文件传输体验。 安装脚本 wget -qO- https://get.casaos.io | sudo bash软件截图

nginx的安装002

之前001讲述了nginxyum安装现在讲一下nginx如何本地离线安装 操作系统: CentOS Stream 9 操作步骤: 首先访问nginx官网,下载。 用wget命令下载, [rootlocalhost ~]# wget -c https://nginx.org/download/nginx-1.26.0.tar.gz …

小白必看:COMSOL Multiphysics多物理场仿真技术与应用”光电专题

COMSOL Multiphysics多物理场仿真技术与应用”光电专题

路由选路原则

5.2路由选路原则 路由就是报文从源端到目的端的路径。当报文从路由器到目的网段有多条路由可达时,路由器可以根据路由表中最佳路由进行转发。最佳路由的选取与发现此路由的路由协议的优先级、路由的度量有关。当多条路由的协议优先级与路由度量都相同时&#xff0c…

【工具】Docker安装Jenkins并部署Java项目

【工具】Docker安装Jenkins并部署Java项目 文章目录 【工具】Docker安装Jenkins并部署Java项目1. 前置条件2. 安装3. 创建项目3.1 配置Maven3.2 构建项目3.3 自动部署 1. 前置条件 准备一台云服务器或本地虚拟机,保证必须要java环境,一键安装jdk&#x…

ADuM1201可使用π121U31间接替换π122U31直接替换

ADuM1201可使用π121U31间接替换π122U31直接替换 一般低速隔离通信150Kbps电路可使用π121U31,价格优势较大。速度快的有其它型号可达10M,200M,600M。 本文主要介绍ADUM1201,替换芯片π121U31简单资料请访问下行链接 只要0.74元的双通道数字隔离器,1T1…

Unity实现简单的第一人称控制

先看效果 实现方式 1.首先创建一个脚本 2.编辑脚本内容 付上脚本代码 private float RotationX 0;public float speed 2f;//移动速度// Use this for initializationvoid Start(){Cursor.lockState CursorLockMode.Locked;//锁定鼠标到中心点Cursor.visible false;//隐藏鼠…

OceanBase开发者大会实录-李楠:4条路径+6大方案,关键业务系统数据库的升级之路

本文来自2024 OceanBase开发者大会,OceanBase 金融与政企事业部解决方案总监李楠的演讲实录 ——《关键业务系统分布式数据库升级路线选择和技术演进之路》。完整视频回看,请点击这里>> 大家好,我是 OceanBase 金融与政企事业部…

AI盒子在智慧加油站的应用

方案背景 为规范加油站作业,保障人民生命财产安全,《加油站作业安全规范》(AQ 3010-2007)中第五条规定:卸油作业基本要求,明确防静电、防雷电、防火、人员值守、禁止其他车辆及非工作人员进入卸油区。 痛点…

初识java——javaSE(8)异常

文章目录 一 异常的概念与体系结构1.1 什么是异常?1.2 异常的体系结构!1.3 编译时异常与运行时异常与Error编译时异常:异常声明:throws关键字 运行时异常:什么是Error? 二 处理异常2.1 异常的抛出:throw(注…

前端从零到一开发vscode插件并发布到插件市场

前端从零到一开发vscode插件并发布到插件市场 背景目标成果展示一条龙实现过程安装插件脚手架和工具创建项目运行调试打包第一次打包前的必要操作 发布第一次发布前账号准备注册Azure DevOps发布账号-获取token注册vscode开发者账号终端登录vsce 发布方式2-手动上传插件 进阶开…