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
Make your Android app into Multiplatform app
Search
Masatoshi Kubode
October 10, 2024
Programming
0
150
Make your Android app into Multiplatform app
https://sansan.connpass.com/event/329244/
Masatoshi Kubode
October 10, 2024
Tweet
Share
More Decks by Masatoshi Kubode
See All by Masatoshi Kubode
ウォンテッドリーの「ココロオドル」モバイル開発 / Wantedly's "kokoro odoru" mobile development
kubode
2
930
Firebase Dynamic Linksの代替手段を自作する / Create your own Firebase Dynamic Links alternative
kubode
0
380
技術を根付かせる / How to make technology take root
kubode
1
350
WantedlyでのKotlin Multiplatformの導入と課題 / Kotlin Multiplatform Implementation and Challenges at Wantedly
kubode
0
440
Google Play Consoleデベロッパー アカウントの確認 / Verifying your Play Console developer account
kubode
1
1.2k
ウォンテッドリーにおけるモバイルアプリ開発 / iOSDC Japan 2024 Sponsor Session
kubode
1
1.1k
Jetpack ComposeのBottomSheetとの戦い / Fight with BottomSheet of Jetpack Compose
kubode
0
790
Mobile Chapterが目指すところと技術 / Vision and Technology of Mobile Chapter at Wantedly
kubode
0
360
ウォンテッドリーでのKMPワークフロー / KMP workflow at Wantedly
kubode
0
1.8k
Other Decks in Programming
See All in Programming
XSLTで作るBrainfuck処理系
makki_d
0
210
PHP 8.4の新機能「プロパティフック」から学ぶオブジェクト指向設計とリスコフの置換原則
kentaroutakeda
2
660
Deep Dive into ~/.claude/projects
hiragram
9
1.6k
技術同人誌をMCP Serverにしてみた
74th
1
420
git worktree × Claude Code × MCP ~生成AI時代の並列開発フロー~
hisuzuya
1
500
童醫院敏捷轉型的實踐經驗
cclai999
0
200
Code as Context 〜 1にコードで 2にリンタ 34がなくて 5にルール? 〜
yodakeisuke
0
110
deno-redisの紹介とJSRパッケージの運用について (toranoana.deno #21)
uki00a
0
150
20250628_非エンジニアがバイブコーディングしてみた
ponponmikankan
0
510
なぜ「共通化」を考え、失敗を繰り返すのか
rinchoku
1
570
datadog dash 2025 LLM observability for reliability and stability
ivry_presentationmaterials
0
160
「Cursor/Devin全社導入の理想と現実」のその後
saitoryc
0
360
Featured
See All Featured
KATA
mclloyd
30
14k
Automating Front-end Workflow
addyosmani
1370
200k
The Language of Interfaces
destraynor
158
25k
Building Applications with DynamoDB
mza
95
6.5k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
Building Adaptive Systems
keathley
43
2.6k
Making Projects Easy
brettharned
116
6.3k
How STYLIGHT went responsive
nonsquared
100
5.6k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
710
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Transcript
© 2024 Wantedly, Inc. Make your Android app into Multiplatform
app DroidKaigi 2024 AfterNight 2024/10/10 ウォンテッドリー株式会社 久保出雅俊
© 2024 Wantedly, Inc. wantedly.com/id/kubode @swiz_ard @kubode
© 2024 Wantedly, Inc. 目的 クロスプラットフォーム開発の1つの可能性を紹介
© 2024 Wantedly, Inc. 1つの可能性 Compose Multiplatformにより、既存のAndroidアプリを段 階的にマルチプラットフォームアプリへ作り変えていく
© 2024 Wantedly, Inc. 1つの可能性 Compose Multiplatformにより、既存のAndroidアプリを段 階的にマルチプラットフォームアプリへ作り変えていく 👉 既存コードを活かしつつ、継続的にリリース可能
© 2024 Wantedly, Inc. Compose Multiplatformとは Jetpack ComposeのKotlin Multiplatform版 •
Composeとほぼ同じAPI • Android互換を意識したAPI
© 2024 Wantedly, Inc. • パッケージ名がandroidx.compose • Lifecycle, ViewModel, Navigation
• Multiplatform Resources Compose MultiplatformのAndroidとの互換性
© 2024 Wantedly, Inc. Multiplatform Resources Androidのsrc/main/resをある程度そのまま Compose Multiplatformに持ち込める
© 2024 Wantedly, Inc. • AndroidXのKotlin Multiplatform化 ◦ Room, DataStore,
Paging, etc. • 各種KotlinライブラリのKMP化、CMP化 ◦ Coil, Koin, etc. Compose Multiplatform以外の実現可能性
© 2024 Wantedly, Inc. つまり Compose Multiplatformにより、既存のAndroidアプリを段 階的にマルチプラットフォームアプリへ作り変えていく 👉 AndroidのコードがすべてKotlinで、UIがすべてJetpack
Composeで、Android依存がほぼなく、すべてのライブラリが KMP対応していれば実現できるはず
© 2024 Wantedly, Inc. 実際に途中までやってみた
© 2024 Wantedly, Inc. 対象 android/sunflowerをiOSでも動作するようにしてみる 🍴 kubode/sunflower 理由 •
もともとがXMLだったものをCompose化したアプリ • RoomやPagingなどKMP化したAndroidXを利用 • ほどよいコード量とテストコード
© 2024 Wantedly, Inc. 手順 • [ ] KMPでないライブラリをKMPへ移行 ◦
Gson → KotlinX Serialization ◦ Retrofit → Ktor ◦ Glide → Coil ◦ Dagger → Koin • [ ] Compose Multiplatform化 ◦ res → Multiplatform Resources ◦ Navigation • [ ] iOSターゲットの追加 ◦ Androidネイティブなコードをexpect/actualでiOS用に書き直し ◦ iOSアプリとして動作させる
© 2024 Wantedly, Inc. 手順 • ✅ KMPでないライブラリをKMPへ移行 ◦ Gson
→ KotlinX Serialization ◦ Retrofit → Ktor ◦ Glide → Coil ◦ Dagger → Koin • ✅ Compose Multiplatform化 ◦ res → Multiplatform Resources ◦ Navigation • [ ] iOSターゲットの追加 ◦ Androidネイティブなコードをexpect/actualでiOS用に書き直し ◦ iOSアプリとして動作させる
© 2024 Wantedly, Inc. 達成できていること ✅ 各手順でAndroidアプリとしてビルド、テスト、動作 つまり… Compose Multiplatformにより、既存のAndroidアプリを段
階的にマルチプラットフォームアプリへ作り変えていく (ただしAndroidでのみ動作)
© 2024 Wantedly, Inc. 難点 iOSターゲットを追加すると…
© 2024 Wantedly, Inc. 現実の課題 • Deeplink • パフォーマンス •
実施する価値 • etc.
© 2024 Wantedly, Inc. まとめ • クロスプラットフォーム開発の1つの可能性を紹介 • Compose MultiplatformのAndroid互換性の良さ
• 個人的には可能性を感じるが、まだまだ早い手法 ◦ Deeplinkやパフォーマンスの課題 ◦ 時間が解決するはず