Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Understanding Kotlin Multiplatform (Busan)
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
HyunWoo Lee
September 07, 2025
Programming
85
0
Share
Understanding Kotlin Multiplatform (Busan)
Google I/O Extended Busan 2025에서 진행한 Understanding Kotlin Multiplatform의 Speaker Deck입니다.
HyunWoo Lee
September 07, 2025
More Decks by HyunWoo Lee
See All by HyunWoo Lee
Navigating Dependency Injection with Metro
l2hyunwoo
1
290
How Android Uses Data Structures Behind The Scenes
l2hyunwoo
1
720
Understanding Kotlin Multiplatform
l2hyunwoo
0
340
파급효과: From AI to Android Development
l2hyunwoo
0
340
선언형 UI에서의 상태관리
l2hyunwoo
0
630
선언형 UI를 학습할 때 알아둬야하는 키워드들
l2hyunwoo
0
530
Essential concepts to know when learning Declarative UI
l2hyunwoo
2
1.6k
React Native under the hood
l2hyunwoo
0
180
유연한 Composable 설계
l2hyunwoo
0
760
Other Decks in Programming
See All in Programming
Redox OS でのネームスペース管理と chroot の実現
isanethen
0
570
煩雑なSkills管理をSoC(関心の分離)により解決する――関心を分離し、プロンプトを部品として育てるためのOSSを作った話 / Solving Complex Skills Management Through SoC (Separation of Concerns)
nrslib
4
850
Codex CLIのSubagentsによる並列API実装 / Parallel API Implementation with Codex CLI Subagents
takatty
2
890
AWS re:Invent 2025の少し振り返り + DevOps AgentとBacklogを連携させてみた
satoshi256kbyte
3
160
PHP で mp3 プレイヤーを実装しよう
m3m0r7
PRO
0
240
SkillがSkillを生む:QA観点出しを自動化した
sontixyou
6
3.2k
へんな働き方
yusukebe
6
2.9k
PHPで TLSのプロトコルを実装してみるをもう一度しゃべりたい
higaki_program
0
190
ネイティブアプリとWebフロントエンドのAPI通信ラッパーにおける共通化の勘所
suguruooki
0
260
Laravel Nightwatchの裏側 - Laravel公式Observabilityツールを支える設計と実装
avosalmon
1
330
今からFlash開発できるわけないじゃん、ムリムリ! (※ムリじゃなかった!?)
arkw
0
190
LM Linkで(非力な!)ノートPCでローカルLLM
seosoft
0
460
Featured
See All Featured
First, design no harm
axbom
PRO
2
1.2k
A designer walks into a library…
pauljervisheath
211
24k
Utilizing Notion as your number one productivity tool
mfonobong
4
290
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
120
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.9k
We Are The Robots
honzajavorek
0
210
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
190
Leo the Paperboy
mayatellez
7
1.6k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Typedesign – Prime Four
hannesfritz
42
3k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
880
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 উ٘۽٘ ٘о ࢿػ ࢚ടীࢲ ࡅܰѱ iOSীب
ਊೞӝ ਤ೧ ࠺ૉפझ ۽ਸ ҕਬೡ ࣻ ח KMPܳ ఖ೮णפ. Duolingo
Kotlin Multiplatform, Is it good?
Google I/O Extended 25 Advantage of KMP ֎౭࠳ ӝמਸ ࢿמ
ೞ হ Ӓ۽ Virtual Machine ҅க হয ࢿػ ٘о ۖಬ ֎౭࠳ ٘۽ ஹੌؾפ. ੋ ٘ ݃Ӓۨ࣌ оמ ֎౭࠳ ٘۽ ஹੌ غӝী ӝઓ ٘ب ഝਊೡ ࣻ Ҋ ܳ ഝਊ೧ࢲ ࠗ࠙ ਊ, ਊ оמפ. ٘ ࢎਊࢿҗ ࢎਊ ҃ ੌҙࢿ زੌೠ ٘߬झܳ ৈ۞ ۖಬী ҕਬо оמೞৈ ٘ ࢎਊࢿਸ ֫ੌ ࣻ Ҋ ী ٮۄ ۖಬী ޖҙೞѱ زੌೠ ҃ਸ ઁҕೡ ࣻ णפ.
Google I/O Extended 25 01 ࢎਊীѱ “જ” ҃ਸ ઁҕ೧ ࣻ
যঠೠ. 02 ۨਕܳ ഝਊೠ জٜ दীࢲ જ Ѿҗܳ ࠁৈঠ ೠ 03 ೧ ӝࣿਸ ӝ߈ਵ۽ ࢿҕੋ ழܻযܳ ऺ ޙоٜ যঠೠ. Good Framework? KMPח ֎౭࠳ জٜҗ زੌೠ ࢿמਵ۽ ӝמਸ ҳഅೡ ࣻ ٘߬झܳ ҕਬೞҊ ѐߊ दрਸ ױ୷ೞৈ दী ࡅܰҊ উਵ۽ ઁಿਸ ࢶࠁੌ ࣻ ӝઓ Kotlin, Android ޙоٜਸ ഝਊೡ ࣻ
Let’s start! Kotlin Multiplatform
୭नചػ Kotlin Multiplatform మ݁ ࢎਊ ೧ࢲ KMP/CMP জ ઁ оמ
Android Studio
୭नചػ Kotlin Multiplatform మ݁ ࢎਊ ೧ࢲ KMP/CMP জ ઁ оמ
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.busan” compileSdk
= 35 // … } kotlin { … }
plugins { … } kotlin { androidLibrary { namespace =
“io.google.extended.busan” 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.busan” 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”?
Google I/O Extended 25 CocoaPods • iOS ѐߊٜ SPM
ইצ CocoaPodsਸ ࢎਊೞҊ ݶ ఖ оמ • Gradle DSL۽ب ۄ࠳۞ܻ ߓನо оמೣ ઁח ҳध ػ ࢲ٘౭ ಁః ݒפ
Summary
Google I/O Extended 25 CodeLab - Get Started with Kotlin
Multiplatform CodeLab - Migrate existing apps to Room KMP
Thank You HyunWoo Lee Android/React Native Engineer, Viva Republica(Toss) Organizer,
GDG Korea Android/Kotlin User Groups Seoul Kotlin Multiplatform: Theory and Practice