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
53
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
Google Play Consoleデベロッパー アカウントの確認 / Verifying your Play Console developer account
kubode
0
52
ウォンテッドリーにおけるモバイルアプリ開発 / iOSDC Japan 2024 Sponsor Session
kubode
1
350
Jetpack ComposeのBottomSheetとの戦い / Fight with BottomSheet of Jetpack Compose
kubode
0
220
Mobile Chapterが目指すところと技術 / Vision and Technology of Mobile Chapter at Wantedly
kubode
0
250
ウォンテッドリーでのKMPワークフロー / KMP workflow at Wantedly
kubode
0
1.5k
ComposeでのShared Element Transition / Shared Element Transition in Compose
kubode
0
400
K2への完全移行結果 / Results of complete migration to K2
kubode
2
5.7k
Data Bindingの移行を楽にする / Easier migration of Data Binding
kubode
0
1.3k
Compose Shadow Alternative
kubode
0
330
Other Decks in Programming
See All in Programming
pytest プラグインを開発して DRY に自動テストを書こう
inuatsu
2
260
WEBアプリケーションにおけるAWS Lambdaを用いた大規模な非同期処理の実践
delhi09
PRO
7
4.2k
게임 개발하던 학생이이 세계에선 안드로이드 개발자?
pangmoo
0
110
Real-time message handling and notifications with API Platform and Symfony
alli83
1
110
(Deep|Web) Link support with expo-router
mrtry
0
180
ACES Meet におけるリリース作業改善の取り組み
fukucheee
0
130
Beyond Laravel Octane - Hyperf for Laravel Artisans
albertcht
1
140
UnJSで簡単に始めるCLIツール開発 / cli-tool-development-with-unjs
aoseyuu
2
300
Removing Corepack
yosuke_furukawa
PRO
9
1.2k
Why I Choose NetBeans for Jakarta EE
ivargrimstad
0
170
dbt-ga4パッケージを実業務に導入してみた話
t_tokumaru_feedcorp
0
130
.NET Aspireのクラウド対応検証: Azureと他環境での実践
ymd65536
1
490
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
504
140k
Speed Design
sergeychernyshev
22
490
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Fashionably flexible responsive web design (full day workshop)
malarkey
404
65k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
249
21k
Practical Orchestrator
shlominoach
186
10k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.8k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
7.5k
Why Our Code Smells
bkeepers
PRO
334
57k
Intergalactic Javascript Robots from Outer Space
tanoku
268
27k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
92
16k
GraphQLの誤解/rethinking-graphql
sonatard
65
9.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やパフォーマンスの課題 ◦ 時間が解決するはず