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
Dynamic Feature Modules 入門
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
punchdrunker
June 07, 2018
Technology
2.8k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Dynamic Feature Modules 入門
umeda.apk #4 で発表した、Dynamic Feature Modulesについての資料です
punchdrunker
June 07, 2018
More Decks by punchdrunker
See All by punchdrunker
Kotlin2.0以降の新機能
punchdrunker
0
51
DnD in Compose
punchdrunker
0
330
what's new in Material Design で気になったトピック
punchdrunker
1
650
7カ国語に対応したサービスでの翻訳管理システムの改善事例
punchdrunker
1
1.5k
Java Bytecode Vertical Tasting
punchdrunker
2
1.6k
getting started with dark theme
punchdrunker
2
1.1k
Practical Activity Transition in Android
punchdrunker
0
1.3k
今時のProgress indicator / Replacing ProgressDialog with ProgressBar
punchdrunker
0
740
レビュー評価4.7の秘密 / The Secret To A Better Reputation
punchdrunker
2
2.1k
Other Decks in Technology
See All in Technology
AI時代のエンジニアキャリアについて今一度考える
sakamoto_582
2
1.3k
次世代ランサムウェア対策の考察 / 20260704 Mitsutoshi Matsuo
shift_evolve
PRO
5
1.7k
美しいコードを書くためにF#を学んでみた話
yud0uhu
1
350
ゼロをイチにする仕事が終わったあと
smasato
0
310
ローカルLLMとLINE Botの組み合わせ その3 / LINE DC Generative AI Meetup #8
you
PRO
0
120
FinOps X 2026 Recap from Engineer Side #JapanFinOps
chacco38
0
270
小さいから、全部わかる。— 常駐AI "xangi" のすすめ
sugupoko
0
270
人を動かすのは時間ではなく、納得感 〜新任EMが入社3ヶ月、組織を2回変えた話〜
kakehashi
PRO
2
160
記録をかんたんに、提案をパーソナルに ── AIであすけんが目指すもの
oprstchn
0
170
CIで使うClaude
iwatatomoya
0
170
AIDLC_ヤフーショッピングの取り組み
lycorptech_jp
PRO
0
560
ループエンジニアリングでE2Eテストを実践
noriyukitakei
0
310
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
220
Scaling GitHub
holman
464
140k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
380
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Building the Perfect Custom Keyboard
takai
2
810
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
1.9k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
180
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
200
Transcript
Dynamic Feature Module を使ってみた @punchdrunker
自己紹介 • @punchdrunker / 七尾 貴史 • 普段は、Android > iOS
> Rails • 株式会社ミクシィで、 みてねというアプリを作っています • DroidKaigiでも働いてます • shibuya.apkではライブ配信係
今日話すこと Android App Bundleの中の目玉機能の1つである、Dynamic Feature Modulesを 使ったアプリを実際にリリースして、どのような使い心地になるかを体験してみようという お話しです。 aabの作り方とか、その他の詳しい話は割愛します。 前回の里山さんの資料に色々まとまっています。
https://www.slideshare.net/nsface/app-bundle
Android App Bundle概要 アプリをいままでよりスマートに配信する事が出来る機能群の総称 • Multiple APKの代替(何らかの理由で端末別にapkを用意できる仕組み) • APKサイズの最適化(aab) •
必要になった時に追加でモジュールをインストールできる ◦ Dynamic Feature Moduleとしてベータ公開中 • アプリをインストールしていなくてもモジュール単位で利用可能になる ◦ instant enableとして近日公開予定 (AndroidStudio 3.2 RC14以降でしか使えない)
aabの構造
今日のテーマ
Dynamic Feature Module? アプリのインストール後に、必要になった時に機能やリソースを事後的にインストール (Dynamic Delivery)する事ができる仕組みのこと。 一部の端末やユーザー向けのものはアプリインストール後に必要になったときにインス トールできるようにする事で、その機能が必要の無いユーザーに対してはストレージ使 用量を抑えられる。 また回線速度に依存するが、モジュールのインストールには数秒以上かかると思った方
がよい。 必要なくなったらuninstallすることも出来る。
Dynamic Feature Moduleの使い道 - 有料コンテンツやプレミアム機能 - 有料登録時にインストールできれば良い - ゲームのステージ情報 -
ステージが進んだ時にインストールすれば良い - とにかく大きな画像などのリソースをたまに使う - 必要だとわかったらインストールすれば良い - 利用者が少なく、ある程度分離された機能 - 他サービスとの連携する機能など (あくまで自分の妄想です)
どんな対応が必要か • play coreライブラリを利用 ◦ com.google.android.play.core.splitinstall.* • SplitInstallManager を使って、利用可能なモジュールの確認やインストールを行う ◦
確認: SplitInstallManager.getInstalledModules() ◦ 追加: SplitInstallManager.startInstall(module) ◦ 削除: SplitInstallManager.deferredUninstall(modules) • インストール完了したら(SplitInstallStateUpdatedListener)、使うだけ ◦ パッケージ名を指定して、startActivity()やcreatePackageContext()するだけ
デモ 1. 設定アプリでhochoアプリのストレージ使用量を確認 2. hochoアプリを起動 3. メニューからDynamic Feature Moduleを選択 4.
写真一覧が表示されるまで待機 5. 写真一覧が表示されたら再度設定アプリでhochoのストレージ使用量を確認 サンプルアプリ インストールURL →
aab的にはどうなるのか(時間があれば) bundletoolでどんなapkが生成されるか手元で確認できます https://github.com/google/bundletool/releases 具体的な手順はcodelabがわかりやすいです https://codelabs.developers.google.com/codelabs/your-first-dynamic-app/index.ht ml?index=..%2F..%2Fio2018#4
ハマりどころ(1) Modules 'base' and 'gallery' contain entry 'res/layout/activity_main.xml' with different
content. → 別モジュールでも同じリソース名は不可 オンデマンド モジュールのタイトルのリソース ID には、ベース モジュールで定義された文字列を指 定する必要があります。無効なモジュールは「 gallery」です →ベースとなるアプリ側でリソースIDを定義しておく必要がある(feature_names.xml) implementationで利用するライブラリを定義すると、 dynamic feature module側から使えない → apiでロードするようにしたら使えた
ハマりどころ(2) ベータ機能なので、申請フォームに記入が必要 →半日くらい待つと使えるようになっていた aabでリリースしたらminSdkVersion21なのに、hdpi端末でベクターがぼやけた(伝聞) →VectorDrawableCompatのissueが上がっているので、その内直りそう
参考資料 • codelab ◦ https://goo.gl/h17V6Y • sample app ◦ https://github.com/googlesamples/android-dynamic-features
• hochoでの実装 ◦ https://github.com/punchdrunker/hocho/pull/33/files