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
130
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
Firebase Dynamic Linksの代替手段を自作する / Create your own Firebase Dynamic Links alternative
kubode
0
240
技術を根付かせる / How to make technology take root
kubode
1
310
WantedlyでのKotlin Multiplatformの導入と課題 / Kotlin Multiplatform Implementation and Challenges at Wantedly
kubode
0
390
Google Play Consoleデベロッパー アカウントの確認 / Verifying your Play Console developer account
kubode
1
1.2k
ウォンテッドリーにおけるモバイルアプリ開発 / iOSDC Japan 2024 Sponsor Session
kubode
1
930
Jetpack ComposeのBottomSheetとの戦い / Fight with BottomSheet of Jetpack Compose
kubode
0
680
Mobile Chapterが目指すところと技術 / Vision and Technology of Mobile Chapter at Wantedly
kubode
0
340
ウォンテッドリーでのKMPワークフロー / KMP workflow at Wantedly
kubode
0
1.7k
ComposeでのShared Element Transition / Shared Element Transition in Compose
kubode
0
510
Other Decks in Programming
See All in Programming
DataStoreをテストする
mkeeda
0
280
小田原でみんなで一句詠みたいな #phpcon_odawara
stefafafan
0
320
「”誤った使い方をすることが困難”な設計」で良いコードの基礎を固めよう / phpcon-odawara-2025
taniguhey
0
130
Django for Data Science (Boston Python Meetup, March 2025)
wsvincent
0
330
サービスクラスのありがたみを発見したときの思い出 #phpcon_odawara
77web
4
630
CRE Meetup!ユーザー信頼性を支えるエンジニアリング実践例の発表資料です
tmnb
0
640
Optimizing JRuby 10
headius
0
210
DomainException と Result 型で作る型安全なエラーハンドリング
karszawa
0
900
AI Coding Agent Enablement - エージェントを自走させよう
yukukotani
14
5.9k
Devinのメモリ活用の学びを自社サービスにどう組み込むか?
itarutomy
0
2.1k
Devin入門と最近のアップデートから見るDevinの進化 / Introduction to Devin and the Evolution of Devin as Seen in Recent Update
rkaga
9
4.8k
技術選定を未来に繋いで活用していく
sakito
3
110
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
Six Lessons from altMBA
skipperchong
27
3.7k
Thoughts on Productivity
jonyablonski
69
4.6k
Designing for Performance
lara
607
69k
Scaling GitHub
holman
459
140k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.3k
Being A Developer After 40
akosma
91
590k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
119
51k
For a Future-Friendly Web
brad_frost
176
9.7k
Typedesign – Prime Four
hannesfritz
41
2.6k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.5k
How to Ace a Technical Interview
jacobian
276
23k
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やパフォーマンスの課題 ◦ 時間が解決するはず