Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dynamic Feature Modules 入門

Dynamic Feature Modules 入門

umeda.apk #4 で発表した、Dynamic Feature Modulesについての資料です

punchdrunker

June 07, 2018
Tweet

More Decks by punchdrunker

Other Decks in Technology

Transcript

  1. Dynamic Feature Module
    を使ってみた
    @punchdrunker

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  5. aabの構造

    View Slide

  6. 今日のテーマ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  11. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide