Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Understanding Kotlin Multiplatform
Search
HyunWoo Lee
July 26, 2025
Programming
410
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Understanding Kotlin Multiplatform
Google I/O Extended Incheon 2025에서 진행한 Understanding Kotlin Multiplatform의 Speaker Deck입니다.
HyunWoo Lee
July 26, 2025
More Decks by HyunWoo Lee
See All by HyunWoo Lee
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
150
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
190
Navigating Dependency Injection with Metro
l2hyunwoo
1
510
How Android Uses Data Structures Behind The Scenes
l2hyunwoo
1
840
Understanding Kotlin Multiplatform (Busan)
l2hyunwoo
0
130
파급효과: From AI to Android Development
l2hyunwoo
0
420
선언형 UI에서의 상태관리
l2hyunwoo
0
670
선언형 UI를 학습할 때 알아둬야하는 키워드들
l2hyunwoo
0
580
Essential concepts to know when learning Declarative UI
l2hyunwoo
2
1.9k
Other Decks in Programming
See All in Programming
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
1
2.3k
JRuby: Past, Present, and Future
headius
0
230
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
170
AI主導のプログラミング学習アプリを作ってみた
econanringo
0
160
golang-bob.pdf
iwatsukayura
0
130
TechTown - Creating Composable Callables in Contemporary C++
rollbear
0
110
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
230
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
22
22k
プロダクトコードからライブラリの境界を見つける
elmetal
PRO
0
110
ActionController meets Protocol Buffers
sorah
0
220
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
330
The Rails Doctrine Decade
koic
2
570
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Making the Leap to Tech Lead
cromwellryan
135
10k
KATA
mclloyd
PRO
35
16k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
From π to Pie charts
rasagy
1
400
Six Lessons from altMBA
skipperchong
29
4.5k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
270
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
WENDY [Excerpt]
tessaabrams
14
40k
Navigating Team Friction
lara
192
16k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Transcript
Understanding Kotlin Multiplatform HyunWoo Lee Android/React Native Engineer, Viva Republica(Toss)
Organizer, GDG Korea Android/Kotlin User Groups Seoul Kotlin Multiplatform: Theory and Practice
2023.12 GDG Devfest Incheon
Kotlin Multiplatform
Kotlin Multiplatform Is it stable?
Kotlin Multiplatform Is it widely used?
Kotlin Multiplatform
Google I/O Extended 25 Google Docs Google Docsח iOS ജ҃ীࢲ
KMPܳ ഝਊೞҊ णפ. ӝઓ ٘৬ ࠺Ү೮ਸ ٸ ࢿמ ରо ѱ ա ঋҊ য়۰ ࠁ ؊ જ ҃ب णפ.
Google I/O Extended 25 Juliana Chahoud ൞ח 55% о ٘ܳ
KMPܳ ഝਊೞৈ ҕਬೞҊ णפ. ؋࠙ী ӝמ ѐߊਸ ೡ ٸ ড 40% ب ࡈۄ Ѫ эणפ. Sr Director of Engineering, StoneCo
Google I/O Extended 25 উ٘۽٘ ٘о ࢿػ ࢚ടীࢲ ࡅܰѱ iOSীب
ਊೞӝ ਤ೧ ࠺ૉפझ ۽ਸ ҕਬೡ ࣻ ח KMPܳ ఖ೮णפ. Duolingo
Google I/O Extended 25 Advantage of KMP ֎౭࠳ ӝמਸ ࢿמ
ೞ হ Ӓ۽ Virtual Machine ҅க হয ࢿػ ٘о ۖಬ ֎౭࠳ ٘۽ ஹੌؾפ. ੋ ٘ ݃Ӓۨ࣌ оמ ֎౭࠳ ٘۽ ஹੌ غӝী ӝઓ ٘ب ഝਊೡ ࣻ Ҋ ܳ ഝਊ೧ࢲ ࠗ࠙ ਊ, ਊ оמפ. ٘ ࢎਊࢿҗ ࢎਊ ҃ ੌҙࢿ زੌೠ ٘߬झܳ ৈ۞ ۖಬী ҕਬо оמೞৈ ٘ ࢎਊࢿਸ ֫ੌ ࣻ Ҋ ী ٮۄ ۖಬী ޖҙೞѱ زੌೠ ҃ਸ ઁҕೡ ࣻ णפ.
Kotlin Multiplatform X Android Team
Google I/O Extended 25 01 ࢎਊীѱ “જ” ҃ਸ ઁҕ೧ ࣻ
যঠೠ. 02 ۨਕܳ ഝਊೠ জٜ दীࢲ જ Ѿҗܳ ࠁৈঠ ೠ 03 ೧ ӝࣿਸ ӝ߈ਵ۽ ࢿҕੋ ழܻযܳ ऺ ޙоٜ যঠೠ. Good Framework? KMPח ֎౭࠳ জٜҗ زੌೠ ࢿמਵ۽ ӝמਸ ҳഅೡ ࣻ ٘߬झܳ ҕਬೞҊ ѐߊ दрਸ ױ୷ೞৈ दী ࡅܰҊ উਵ۽ ઁಿਸ ࢶࠁੌ ࣻ ӝઓ Kotlin, Android ޙоٜਸ ഝਊೡ ࣻ
Google I/O Extended 25 Android Jetpack for KMP
Google I/O Extended 25 Jetpack KMPച? 800+ Jetpack ݽٕ іࣻ
• ݽٚ Jetpack ۄ࠳۞ܻܳ KMP ജदఃח Ѫ ࠺ബਯ. (Android ౠച ۄ࠳۞ܻب ઓ ೣ) • ݽٚ KMP ۄ࠳۞ܻٜਸ ݽٚ ۖಬী ਗೡ ࣻ ѱ সೞח Ѫب दрബਯ ঋ.
Google I/O Extended 25 Tier 1 Tier 2 Tier 3
• Android • JVM • iOS • macOS • Linux • watchOS • tvOS • Windows • WASM(Web)
Google I/O Extended 25 Tier 1 Tier 2 Tier 3
• CIীࢲ Unit Test, Device Test ࣻ೯ • ߡ ଼ী ٮۄࢲ Binary compatibility ېఊ • CIীࢲ Unit Test݅ ࣻ೯ • Binary Compatibility ࣻ೯ X • CI పझ ࣻ೯ X • Binary Compatibility ࣻ೯ X
Google I/O Extended 25 Stable Commonized Alpha • Binary Compatibility
ࠁ • 1 tier ۖಬীࢶ औѱ ాद ఆ ࣻ • Binary Compatibility ࠁ • ࣻز Integration • ৈ ѐߊ • APIٜ ߸҃ؼ ࣻ
Google I/O Extended 25 • Binary Compatibility ࠁ • ࣻز
Integration
Google I/O Extended 25 Toolchain Contributions
Google I/O Extended 25 System Lint Productivity • Kotlin/Native ஹੌ۞
ੋ LLVM 16ਵ۽ ೱ࢚ • ࢜۽ ޙৌ അ ҳഅ ߂ GC ࢿמ ೱ࢚ਵ۽ ۠ఋ ࢿמ ߂ ݫݽܻ ࢎਊ ѐࢶ • KMP ٘ ࠙ࢳਸ ਤ೧ Kotlin ఋѶ ࢚ਵ۽ Android Lint ਗ • Binary compatibility tracking • AGP(Android Gradle Plugin) & KGP(Kotlin Gradle Plugin) API ా
Kotlin Multiplatform మ݁ ୭नച Android Studio
Kotlin Multiplatform మ݁ ୭नച Android Studio
Kotlin Multiplatform Shared Module మ݁ ୶о Android Studio
ӒܻҊ Gradle ٘ܳ झਸ਼ ࠁݶ Target? sourceSet? binaries? framework? kotlin
{ targets .filterIsInstance<KotlinNativeTarget>() .forEach { target -> target.binaries { framework { baseName = "Snup" isStatic = true } } } sourceSets { androidMain.dependencies { implementation(compose.preview) implementation(libs.androidx.activity.compose) } commonMain.dependencies { implementation(projects.feature.preview) implementation(libs.androidx.lifecycle.viewmodel) implementation(libs.androidx.lifecycle.runtimeCompose) implementation(libs.androidx.navigation.compose) implementation(libs.kotlinx.serialization.json) } commonTest.dependencies { implementation(libs.kotlin.test) } } }
Understanding Kotlin Multiplatform Project
ӝࠄਵ۽ • App Module • ৈ۞ѐ subproject(Library Module) ۽ ҳࢿؽ
Android ۽ં ҳࢿ
۽ં ٘ܳ ஹੌೡ ࢚ ఋѶਸ ࢶ ࣗझ ٘ܳ ۖಬ р
ҕਬೡ ࣻ ب۾ ҳࢿ Kotlin Multiplatform ۽ં ҳࢿ
build.gradle plugins { id(“org.jetbrains.kotlin”) id(“com.android.library”) } android { … }
kotlin { … }
build.gradle plugins { id(“org.jetbrains.kotlin.multiplatform”) id(“com.android.kotlin.multiplatform.library”) } kotlin { … }
public fun org.gradle.api.Project.kotlin( configure: org.gradle.api.Action<org.jetbrains.kotlin.gradle.dsl .KotlinAndroidProjectExtension> ): kotlin.Unit { /*
compiled code */ }
public fun org.gradle.api.Project.kotlin( configure: org.gradle.api.Action<org.jetbrains.kotlin.gradle.dsl .KotlinMultiplatformExtension> ): kotlin.Unit { /*
compiled code */ }
• যڃ ۖಬ ই౭ಂܳ ࢤࢿೡ Ѫੋ ೞח Ѫ •
۽ ܴਸ ࠢੌ ࣻب Ҋ ۖಬ ߹۽ ৈ ۞ѐ ఋӥਸ ೡ ࣻ Targets
• Kotlin Toolchainীࢲ ؽ • ٘о جইоח पੋ ജ҃ਸ
• example) iOSSimulatorArm64 Platform
plugins { … } android { namespace = “io.google.extended.incheon” compileSdk
= 35 // … } kotlin { … }
plugins { … } kotlin { androidLibrary { namespace =
“io.google.extended.incheon” compileSdk = 35 } iosX64 { … } }
Google I/O Extended 25 https://www.jetbrains.com/help/kotlin-multiplatform-dev/ multiplatform-hierarchy.html#manual-configuration
• ஹੌ җীࢲ ܻغח Kotlin ࣗझ ੌ, ઓࢿ, ܻࣗझ ҙ۲
ࠁٜਸ ೞח ҕр • ܲ Source Setী ઓ ҙ҅ܳ ࢸ೧ ٘ ܳ ҕਬೡ ࣻ Ҋ ਃೠ ҃ ழझథ ࣗझࣇਸ ೡ ࣻ Source Sets
kotlin { sourceSets { commonMain.dependencies { … } wasmJsMain {
dependencies { implementation(libs.kotlinx.immutable) } } val nonWasmJsMain by creating { dependsOn(commonMain.get()) } appleMain { dependsOn(nonWasmJsMain) } desktopMain { dependsOn(nonWasmJsMain) } androidMain { dependsOn(nonWasmJsMain) } } }
kotlin { sourceSets { commonMain.dependencies { … } wasmJsMain {
dependencies { implementation(libs.kotlinx.immutable) } } val nonWasmJsMain by creating { dependsOn(commonMain.get()) } appleMain { dependsOn(nonWasmJsMain) } desktopMain { dependsOn(nonWasmJsMain) }
} val nonWasmJsMain by creating { dependsOn(commonMain.get()) } appleMain {
dependsOn(nonWasmJsMain) } desktopMain { dependsOn(nonWasmJsMain) } androidMain { dependsOn(nonWasmJsMain) } } }
val nonWasmJsMain by creating { dependsOn(commonMain.get()) } appleMain { dependsOn(nonWasmJsMain)
} desktopMain { dependsOn(nonWasmJsMain) } androidMain { dependsOn(nonWasmJsMain) }
Google I/O Extended 25 • ݽٕ ղীࢲ ࢶػ ݽٚ ݽٕীࢲ
ࢎਊغח ҕా ٘ܳ ࢿೞח ࣗझࣇੑפ. • ࢶػ ۖಬী ஹੌ ؼ ࣻ ח ٘ܳ ࢿೡ ࣻ݅ ਵݶ commonMainীࢲ ࢿೡ ࣻ णפ. • ݽٕী androidTarget, jvm݅ ࢸ೮ݶ, commonMainীࢲب jvm ఋѶ ٘ܳ ࢿೡ ࣻ णפ. What is “common”? Common ఋѶب, ۖಬب ইתפ.
Understanding Kotlin Multiplatform Publishing
Google I/O Extended 25 JAR/AAR • JVM & Android ࢚
• ӝઓҗ زੌೠ ߑध • Gradleীࢲ ࢎਊೣ Klib • JVM & Android ઁ৻ ఋѶ • Gradleীࢲ ࢎਊೣ XCFramework • iOS ਊ Binary format • Cocoapods/SPM(Swift Package Manager) ഝਊ ೞৈ ࢎਊೡ ࣻ Binary formats
plugins { id(“maven-publish”) } group = “io.google.extended.incheon” version = “1.0.0”
publishing { repositories { maven { … } } }
Understanding Kotlin Multiplatform Publishing - iOS
plugins { … } kotlin { // androidLibrary { …
} iosX64 { binaries { framework { baseName = “NunuFramework” } } } build.gradle
Google I/O Extended 25 • ѐߊੌ ٸח ࠽٘ दী ѐߊੋ
Shared Module(KMP Module) ࠽٘ Ѿҗޛਸ জী ನೣೠ • ߓನܳ ೡ ٸীח Gradleীࢲ ۄ࠳۞ܻܳ ࢎਊೞח Ѫۢ Cocoapods, Swift Package Managerীࢲ ߉ਸ ࣻ ب۾ ৻ࠗ ࢲߡী ۨਕܳ ߓನ/ࢸೠ. ৈӝࢲ ੌө? ઁ݅ ೧֬ও iOS জী ֍ ঋও.
cd ${PROJECT_DIR}/path/to/project ./gradlew \ :yourSharedModule:embedAndSignAppleFram eworkForXcode Local Integration
Google I/O Extended 25 Swift Package Manager • Appleীࢲ ӂೞח
Binary package ߓನ ҙܻ ߑध • അ iOS ࢤక҅ Best Practice Apple ҕधੋ Package Manager
Google I/O Extended 25 Swift Package Manager • ./gradlew <your_shared>:assembleXCFramework
• XCFrameworkܳ .zipਵ۽ ݅ • Github Release৬ э ܻݽ ജ҃ী ৢ۰֬ח • Package.swift ੌਸ ࢿೠ • ৻ࠗ ۨನఠܻী Package.swift ੌਸ য֍ח How to deploy “framework”?
import PackageDescription let package = Package( name: “Nunu”, platforms: [
.iOS(.v14), ], products: [ … ], targets: [ .binaryTarget(name: “Nunu”, url: “<XCFramework ZIP ੌ স۽٘ೠ ࣗ>”, // swift package compute-checksum NunuExmaple ݺ۸য प೯ checksum: “<प೯ػ Ѿҗޛਸ ৈӝী ੑ۱>” ] ) Package.swift
Swift Package Manager
Google I/O Extended 25 CocoaPods • iOS ѐߊٜ SPM
ইצ CocoaPodsਸ ࢎਊೞҊ ݶ ఖ оמ • Gradle DSL۽ب ۄ࠳۞ܻ ߓನо оמೣ ઁח ҳध ػ ࢲ٘౭ ಁః ݒפ
Google I/O Extended 25 CocoaPods • CocoaPodsܳ ࢸפ. • rvm
install ruby x.y.z sudo gem install -n /usr/local/bin cocoapods • Gradleী CocoaPods ߓನ ҙ۲ ࢸਸ ࢿפ. • ./gradlew :{shared_module}:podPublishXCFramework How to deploy “framework”?
plugins { id(“org.jetbrains.kotlin.native.cocoapods”) } cocoapods { specRepos { url(“{ߓನػ URL}”)
} pod(“dependency”) } build.gradle
Summary
Google I/O Extended 25 CodeLab - Get Started with Kotlin
Multiplatform CodeLab - Migrate existing apps to Room KMP
Google I/O Extended 25 ೞ߈ӝী Kotlin Multiplatform Compose Multiplatform Meetup
ਸ ҅ദੑפ. Kotlin User Groups
Thank You HyunWoo Lee Android/React Native Engineer, Viva Republica(Toss) Organizer,
GDG Korea Android/Kotlin User Groups Seoul Kotlin Multiplatform: Theory and Practice