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
Pragmatic Code Sharing with Kotlin Multiplatform (Simonyi 2024)
Search
Márton Braun
March 17, 2024
Programming
0
140
Pragmatic Code Sharing with Kotlin Multiplatform (Simonyi 2024)
Márton Braun
March 17, 2024
Tweet
Share
More Decks by Márton Braun
See All by Márton Braun
Kotlin Multiplatform at Stable and Beyond (Android Makers 2024)
zsmb
0
290
Build Apps for iOS, Android & Desktop in 100% Kotlin With Compose Multiplatform (mDevCamp 2024)
zsmb
0
340
Composing an API the *right* way (Droidcon London 2023)
zsmb
0
510
Composing an API the *right* way (Droidcon Italy 2023)
zsmb
0
760
Avoiding common coroutine mistakes in Compose (KotlinConf '23)
zsmb
2
1k
Untangling Coroutine Testing (KotlinConf '23)
zsmb
1
840
Composing an API with Kotlin vol 2 (Advanced Kotlin Dev Day 2022)
zsmb
1
750
Composing an API with Kotlin (Kotlin Budapest Meetup 2022 October)
zsmb
0
440
Untangling Coroutine Testing (Droidcon Berlin 2022)
zsmb
2
1.3k
Other Decks in Programming
See All in Programming
Elm Form Validation
bkuhlmann
0
510
サイコロで理解する統計的仮説検定の考え方
tatamiya
4
950
PostmanでAPIの動作確認が楽になった話
h455h1
0
170
1BRC--Nerd Sniping the Java Community
gunnarmorling
0
340
GitHub Copilotのススメ
marcy731
1
200
はてなにおける CSS Modules、及び CSS Modules に足りないもの / CSS Modules in Hatena, and CSS Modules missing parts
mizdra
7
940
Ruby GitHub Packages
bkuhlmann
0
630
Fast JSX: Don't clone props object #28768
yossydev
1
130
Git Rebase
bkuhlmann
11
1.6k
Anthropic Cookbook のおすすめレシピ
schroneko
7
990
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
27
8.3k
Apache Hive 4 on Treasure Data
ryukobayashi
0
340
Featured
See All Featured
Designing with Data
zakiwarfel
96
4.8k
How to Ace a Technical Interview
jacobian
272
22k
The MySQL Ecosystem @ GitHub 2015
samlambert
243
12k
Stop Working from a Prison Cell
hatefulcrawdad
266
19k
Principles of Awesome APIs and How to Build Them.
keavy
121
16k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
18
6.9k
Why Our Code Smells
bkeepers
PRO
331
56k
The Art of Programming - Codeland 2020
erikaheidi
42
12k
How GitHub (no longer) Works
holman
304
140k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
104
6.6k
Git: the NoSQL Database
bkeepers
PRO
422
63k
Building Better People: How to give real-time feedback that sticks.
wjessup
355
18k
Transcript
Kotlin Multiplatform Kódmegosztás pragmatikusan Braun Márton Developer Advocate JetBrains
iOS Android Desktop Web Server
iOS Android Desktop Web Server
kotl.in/kmp-case-studies
None
None
Projekt kezdete
Projekt kezdete Kotlin/JVM .kt .class Java .java .class
Nyilvános bejelentés Projekt kezdete Open source Kotlin/JVM .kt .class Java
.java .class
Nyilvános bejelentés Projekt kezdete Open source Kotlin/JVM .kt .class Kotlin
1.0
Kotlin 1.0 Nyilvános bejelentés Projekt kezdete Open source JavaScript Kotlin/JVM
.kt .class Kotlin/JS .kt .js
Kotlin 1.0 Nyilvános bejelentés Projekt kezdete Open source Native JavaScript
Kotlin/JVM .kt .class Kotlin/Native .kt .klib|.kexe Kotlin/JS .kt .js
Kotlin 1.0 Nyilvános bejelentés Projekt kezdete Open source Native JavaScript
KMP stable
Kotlin 1.0 Nyilvános bejelentés Projekt kezdete Open source Native JavaScript
KMP stable Wasm Kotlin/JVM .kt .class Kotlin/Native .kt .klib|.kexe Kotlin/JS .kt .js Kotlin/Wasm .kt .wasm
Jetpack KMP Kotlin first Java + Kotlin Kotlin 1.0 Nyilvános
bejelentés Projekt kezdete Open source Native JavaScript KMP stable Wasm
iOS Android Desktop +
Desktop + Android iOS .kt .kt .class .framework
iOS .class .framework Desktop + Android .kt .kt
Common .kt .kt
.kt .kt .kt .kt Android Desktop iOS Common
.kt .kt .kt .kt Android Desktop iOS Common
.kt .kt .kt .kt Android Desktop iOS Common
.kt .kt .kt Android Desktop iOS Common .kt
.kt .kt .kt .kt Android Desktop iOS Common
.kt .kt .kt Android Desktop iOS Common class Person(val name:
String, var age: Int) fun greet(person: Person) { println("Hello, ${person.name}") }
.kt .kt .kt Android Desktop iOS Common fun List<Person>.duplicates(): Map<String,
Int> { return map { it.name.substringBefore(" ") } .groupingBy { it } .eachCount() .filter { (name, count) -> count > 1 } }
Android Desktop iOS actual Common expect actual actual
Android Desktop iOS Common expect actual actual actual
Android Desktop iOS Common fun getPlatform(): String expect actual actual
actual
Android Desktop iOS Common fun getPlatform(): String fun getPlatform(): String
= "Java ${System.getProperty("java.version")}" expect actual actual actual
Android Desktop iOS Common fun getPlatform(): String fun getPlatform(): String
= "Java ${System.getProperty("java.version")}" fun getPlatform(): String = "Android ${Build.VERSION.SDK_INT}" expect actual actual actual
Android Desktop iOS Common fun getPlatform(): String fun getPlatform(): String
= "Java ${System.getProperty("java.version")}" fun getPlatform(): String = "iOS ${UIDevice.currentDevice.systemVersion}" fun getPlatform(): String = "Android ${Build.VERSION.SDK_INT}" expect actual actual actual
Multiplatform libraries
github.com/terrakok/kmp-awesome
.kt .kt .kt Android Desktop iOS Common import io.ktor.client.* suspend
fun loadHtml(): String { val client = HttpClient() val response = client.get("https://kotlinlang.org") return response.body<String>() }
Shared logic
Shared logic Swing Desktop logic Android Views Android logic SwiftUI
iOS logic
Shared logic Swing Desktop logic Android Views Android logic SwiftUI
iOS logic
Shared logic Swing Desktop logic Android Views Android logic SwiftUI
iOS logic
Compose Multiplatform jb.gg/compose
Compose Multiplatform jb.gg/compose
Swing Desktop logic Android Views Android logic SwiftUI iOS logic
Shared logic
Desktop logic Android logic iOS logic Shared logic Shared UI
Compose Multiplatform
Desktop logic Android logic iOS logic Shared logic Shared UI
Compose Multiplatform Swing Android Views SwiftUI
Preview
None
None
None
None
None
None
None
Kotlin alapú szoftverfejlesztés VIAUAV41 Free Educational Licenses jb.gg/edulicense Kotlin Multiplatform
jb.gg/kmp Compose Multiplatform jb.gg/compose Fleet jb.gg/fleet Kotlin Multiplatform Kódmegosztás pragmatikusan zsmb.co/talks Braun Márton
[email protected]