Slide 1

Slide 1 text

Dynamic Feature Module を使ってみた @punchdrunker

Slide 2

Slide 2 text

自己紹介 ● @punchdrunker / 七尾 貴史 ● 普段は、Android > iOS > Rails ● 株式会社ミクシィで、 みてねというアプリを作っています ● DroidKaigiでも働いてます ● shibuya.apkではライブ配信係

Slide 3

Slide 3 text

今日話すこと Android App Bundleの中の目玉機能の1つである、Dynamic Feature Modulesを 使ったアプリを実際にリリースして、どのような使い心地になるかを体験してみようという お話しです。 aabの作り方とか、その他の詳しい話は割愛します。 前回の里山さんの資料に色々まとまっています。 https://www.slideshare.net/nsface/app-bundle

Slide 4

Slide 4 text

Android App Bundle概要 アプリをいままでよりスマートに配信する事が出来る機能群の総称 ● Multiple APKの代替(何らかの理由で端末別にapkを用意できる仕組み) ● APKサイズの最適化(aab) ● 必要になった時に追加でモジュールをインストールできる ○ Dynamic Feature Moduleとしてベータ公開中 ● アプリをインストールしていなくてもモジュール単位で利用可能になる ○ instant enableとして近日公開予定 (AndroidStudio 3.2 RC14以降でしか使えない)

Slide 5

Slide 5 text

aabの構造

Slide 6

Slide 6 text

今日のテーマ

Slide 7

Slide 7 text

Dynamic Feature Module? アプリのインストール後に、必要になった時に機能やリソースを事後的にインストール (Dynamic Delivery)する事ができる仕組みのこと。 一部の端末やユーザー向けのものはアプリインストール後に必要になったときにインス トールできるようにする事で、その機能が必要の無いユーザーに対してはストレージ使 用量を抑えられる。 また回線速度に依存するが、モジュールのインストールには数秒以上かかると思った方 がよい。 必要なくなったらuninstallすることも出来る。

Slide 8

Slide 8 text

Dynamic Feature Moduleの使い道 - 有料コンテンツやプレミアム機能 - 有料登録時にインストールできれば良い - ゲームのステージ情報 - ステージが進んだ時にインストールすれば良い - とにかく大きな画像などのリソースをたまに使う - 必要だとわかったらインストールすれば良い - 利用者が少なく、ある程度分離された機能 - 他サービスとの連携する機能など (あくまで自分の妄想です)

Slide 9

Slide 9 text

どんな対応が必要か ● play coreライブラリを利用 ○ com.google.android.play.core.splitinstall.* ● SplitInstallManager を使って、利用可能なモジュールの確認やインストールを行う ○ 確認: SplitInstallManager.getInstalledModules() ○ 追加: SplitInstallManager.startInstall(module) ○ 削除: SplitInstallManager.deferredUninstall(modules) ● インストール完了したら(SplitInstallStateUpdatedListener)、使うだけ ○ パッケージ名を指定して、startActivity()やcreatePackageContext()するだけ

Slide 10

Slide 10 text

デモ 1. 設定アプリでhochoアプリのストレージ使用量を確認 2. hochoアプリを起動 3. メニューからDynamic Feature Moduleを選択 4. 写真一覧が表示されるまで待機 5. 写真一覧が表示されたら再度設定アプリでhochoのストレージ使用量を確認 サンプルアプリ インストールURL →

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

ハマりどころ(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でロードするようにしたら使えた

Slide 13

Slide 13 text

ハマりどころ(2) ベータ機能なので、申請フォームに記入が必要 →半日くらい待つと使えるようになっていた aabでリリースしたらminSdkVersion21なのに、hdpi端末でベクターがぼやけた(伝聞) →VectorDrawableCompatのissueが上がっているので、その内直りそう

Slide 14

Slide 14 text

参考資料 ● codelab ○ https://goo.gl/h17V6Y ● sample app ○ https://github.com/googlesamples/android-dynamic-features ● hochoでの実装 ○ https://github.com/punchdrunker/hocho/pull/33/files