オンデマンド配信の設定

機能モジュールを使用すると、アプリのベース モジュールから特定の機能とリソースを分離して App Bundle に組み込むことができます。たとえば、Play Feature Delivery により、ユーザーはアプリのベース APK をインストールした後で、そのようなコンポーネントをオンデマンドでダウンロードしてインストールできます。

例として、テキスト メッセージ アプリに画像メッセージを撮影して送信する機能があるにもかかわらず、その機能を使用するユーザーの割合が少ない場合を考えてみましょう。この場合、画像メッセージをダウンロード可能な機能モジュールとして組み込むのが妥当です。そうすれば、すべてのユーザーにとってアプリの初回ダウンロード サイズが小さくなり、画像メッセージを送信するユーザーの場合のみ追加コンポーネントのダウンロードが必要になります。

このタイプのモジュール化には多くの労力と、場合によってはアプリの既存のコードのリファクタリングが必要になるため、アプリのどの機能をユーザーにオンデマンドで提供すればメリットが最大になるかを慎重に検討してください。オンデマンド機能の最適な事例とガイドラインの理解を深めるには、オンデマンド配信の UX に関するおすすめの方法をご覧ください。

オンデマンド配信のような高度な配信方法を有効にせずに、時間をかけて徐々にアプリの機能をモジュール化する場合は、代わりにインストール時の配信を設定します。

このページでは、機能モジュールをアプリ プロジェクトに追加して、オンデマンド配信用に設定する方法を紹介します。はじめに、Android Studio 3.5 以上と Android Gradle Plugin 3.5.0 以上を使用していることをご確認ください。

新しいモジュールをオンデマンド配信用に設定する

新しい機能モジュールを作成する最も簡単な方法は、Android Studio 3.5 以上を使用することです。機能モジュールは本来的にベースアプリ モジュールと依存関係にあるため、既存のアプリ プロジェクトにしか追加できません。

Android Studio を使用してアプリ プロジェクトに機能モジュールを追加する手順は次のとおりです。

  1. IDE 内でアプリ プロジェクトをまだ開いていない場合は、開きます。
  2. メニューバーから [File] > [New] > [New Module] を選択します。
  3. [Create New Module] ダイアログで [Dynamic Feature Module] を選択して [Next] をクリックします。
  4. [Configure your new module] で次のように入力します。
    1. [Base application module] プルダウンからそのアプリ プロジェクトのベース モジュールを選択します。
    2. [Module name] にモジュール名を指定します。この名前は IDE によって Gradle 設定ファイル内でそのモジュールを Gradle サブプロジェクトとして識別するために使用されます。サブプロジェクト名の最後の要素は、App Bundle をビルドする際、Gradle によって、<manifest split> 属性を機能モジュールのマニフェストに挿入するために使用されます。
    3. [Package name] にモジュールのパッケージ名を指定します。Android Studio でのデフォルトのパッケージ名は、ベース モジュールのルート パッケージ名と、前のステップで指定したモジュール名を組み合わせた名前です。
    4. [Minimum API level] で、モジュールがサポートする最小 API レベルを選択します。この値はベース モジュールの値と一致している必要があります。
  5. [Next] をクリックします。
  6. [Module Download Options] セクションで次のように入力します。

    1. [Module title] にモジュールのタイトルを半角 50 文字(全角 25 文字)以内で指定します。プラットフォームがこのタイトルを使用するのは、たとえば、モジュールをダウンロードするかどうかをユーザーに確認するときに、モジュールを識別するためです。そのため、アプリのベース モジュールのタイトルを、文字列リソースとして指定して、翻訳できるようにする必要があります。Android Studio を使ってこのモジュールを作成すると、IDE はその文字列リソースをベース モジュールに追加して、次のようなエントリをその機能モジュールのマニフェストに挿入します。

      <dist:module
          ...
          dist:title="@string/feature_title">
      </dist:module>
      
    2. [Install-time inclusion] のプルダウンで、[Do not include module at install-time] を選択します。Android Studio はデベロッパーの選択に合わせて、モジュールのマニフェストに以下を挿入します。

      <dist:module ... >
        <dist:delivery>
            <dist:on-demand/>
        </dist:delivery>
      </dist:module>
      
    3. Android 4.4(API レベル 20)以下を搭載したデバイスでこのモジュールを使用可能にして、マルチ APK に含める場合は、[Fusing] チェックボックスをオンにします。このモジュールのオンデマンド動作を有効にし、融合(Fusing)を無効にすると、分割 APK のダウンロードとインストールに対応していないデバイスを対象外にすることができます。Android Studio はデベロッパーの選択に合わせて、モジュールのマニフェストに以下を挿入します。

      <dist:module ...>
          <dist:fusing dist:include="true | false" />
      </dist:module>
      
  7. [Finish] をクリックします。

Android Studio でモジュールの作成を終えた後、[Project] ペインでモジュールの内容を確認します(メニューバーから [View] > [Tool Windows] > [Project] を選択します)。デフォルトのコード、リソース、編成は、標準のアプリ モジュールの場合と同様です。

オンデマンドでダウンロードする機能を実装した後は、Play Core Library を使用してダウンロードをリクエストする方法をご確認ください。

アプリをデプロイする

Play Feature Delivery をサポートするアプリの開発中も、通常のように、接続されたデバイスにアプリをデプロイできます。それには、メニューバーから [Run] > [Run] を選択します(または、ツールバーで実行アイコン をクリックします)。

アプリ プロジェクトに 1 つ以上の機能モジュールが含まれる場合、アプリのデプロイ時にどの機能モジュールを含めるかを選択できます。それには、次のようにして既存の実行 / デバッグ構成を変更します。

  1. メニューバーから [Run] > [Edit Configurations] を選択します。
  2. [Run/Debug Configurations] ダイアログの左パネルの [Android App] で該当するアプリの構成を選択します。
  3. [General] タブの [Dynamic features to deploy] で、アプリのデプロイ時に含める各機能モジュールのチェックボックスをオンにします。
  4. [OK] をクリックします。

デフォルトでは、Android Studio が App Bundle を使用してアプリをデプロイすることはありません。代わりに IDE が APK をビルドしてデバイスにインストールします。この APK は、サイズよりも、デプロイの早さについて最適化されます。IDE ではなく、Android Studio で App Bundle からの APK と Instant 版のビルド、デプロイを行うように設定するには、実行 / デバッグ構成を変更します。

参考情報

Play Feature Delivery の使用の詳細については、以下のリソースをご覧ください。

サンプル

Codelab

ブログ投稿

動画