6 月 3 日の「#Android11: The Beta Launch Show」にぜひご参加ください。

インストール時の配信を設定する

動的機能モジュールを使用すると、アプリの特定の機能やリソースをベース モジュールから分離した状態で App Bundle に格納できます。Dynamic Delivery では、配信オプションをカスタマイズして、Android 5.0(API レベル 21)以上を実行するデバイスがアプリの機能をいつどのようにダウンロードするのかを制御できます。

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

アプリの動作を変更したり、高度な配信オプションをカスタマイズしたりせずに、時間をかけて徐々にアプリの機能をモジュール化したい場合は、インストール時の配信向けに設定された動的機能モジュールを作成することで実現できます。つまり、高度なオプションを有効にしなくても、動的機能としてモジュール化することで、アプリをインストールしたユーザーが機能を使用できるようになります。

また、機能が不要になった場合は後でアンインストールすることができるため、インストール時の配信向けに設定した動的機能を作成すると便利な場合があります。たとえば、アプリのインストール サイズを削減するには、トレーニングやオンボーディングに必要なコンテンツをモジュール化し、ユーザーがアプリを使用する準備が整った後で動的機能モジュールをアンインストールすることができます。

ここでは、インストール時の配信向けに動的機能モジュールを作成する方法について説明します。始める前に、Android Studio 3.3 以降と Android Gradle Plugin 3.3.0 以降を使用していることを確認してください。

インストール時の配信用に新しいモジュールを設定する

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

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 はデフォルトで、ベース モジュールのルート パッケージ名と、1 つ前の手順で指定したモジュール名をつなげて、パッケージ名の候補とします。
    4. [Minimum API level] で、モジュールがサポートする最小 API レベルを選択します。この値はベース モジュールの値と一致している必要があります。
  5. [Next] をクリックします。
  6. [Configure On-Demand Options] で、[Enable on-demand] チェックボックスをオフにします。アプリのインストール後にダウンロードできる動的機能の作成方法については、オンデマンド配信の設定をご覧ください。
  7. [Finish] をクリックします。

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

動的機能モジュールのビルドの設定

Android Studio を使用して新しい動的機能モジュールを作成するとき、IDE は以下の Gradle プラグインをモジュールの build.gradle ファイルに適用します。

// The following applies the dynamic-feature plugin to your dynamic feature module.
    // The plugin includes the Gradle tasks and properties required to configure and build
    // an app bundle that includes your dynamic feature module.

    apply plugin: 'com.android.dynamic-feature'
    

標準のアプリ プラグインで使用できるプロパティの多くは、動的機能モジュールでも使用できます。以降のセクションでは、動的機能モジュールのビルド設定に含める必要のあるプロパティと含めないプロパティについて説明します。

動的機能モジュールのビルド設定に含めないプロパティ

各動的機能モジュールはベース モジュールに依存しているため、特定の設定も継承します。そのため、動的機能モジュールの build.gradle ファイルでは次の項目を省略します。

  • 署名設定: App Bundle はベース モジュールで指定する署名設定を使って署名されます。
  • minifyEnabled プロパティ: アプリ プロジェクト全体のコード圧縮を有効にできるのは、ベース モジュールのビルド設定に限られます。そのため、動的機能モジュールではこのプロパティを省略する必要があります。ただし、各動的機能モジュールで追加の ProGuard ルールを指定できます。
  • versionCodeversionName: App Bundle をビルドするとき、Gradle はベース モジュールで提供されるアプリのバージョン情報を使用します。動的モジュールの build.gradle ファイルにはこれらのプロパティを含めないでください。

ベース モジュールとの関係を確立する

Android Studio が動的機能モジュールを作成する場合、下記のように、android.dynamicFeatures プロパティをベース モジュールの build.gradle ファイルに追加することで、ベース モジュールから動的機能モジュールを認識できるようにします。

// In the base module’s build.gradle file.
    android {
        ...
        // Specifies dynamic feature modules that have a dependency on
        // this base module.
        dynamicFeatures = [":dynamic_feature", ":dynamic_feature2"]
    }
    

また、下記のように、Android Studio には動的機能モジュールの依存関係としてベース モジュールが含まれます。

// In the dynamic feature module’s build.gradle file:
    ...
    dependencies {
        ...
        // Declares a dependency on the base module, ':app'.
        implementation project(':app')
    }
    

追加の ProGuard ルールを指定する

アプリ プロジェクトのコード圧縮を有効にできるのはベース モジュールのビルド設定のみですが、下記のように、proguardFiles プロパティを使用して、各動的機能モジュールでカスタムの ProGuard ルールを指定できます。

android.buildTypes {
         release {
             // You must use the following property to specify additional ProGuard
             // rules for dynamic feature modules.
             proguardFiles 'proguard-rules-dynamic-features.pro'
         }
    }
    

これらの ProGuard ルールは、ビルド時に他のモジュール(ベース モジュールを含む)のルールと統合されます。そのため、各動的機能モジュールで新しいルールセットを指定している場合がありますが、それらのルールはアプリ プロジェクトのすべてのモジュールに適用されます。

アプリをデプロイする

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

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

  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 をビルドして、デバイスにインストールします。Android Studio が代わりに App Bundle から APK と Instant 機能をビルド、デプロイするように設定するには、実行 / デバッグの構成を変更します。

参考情報

Dynamic Delivery のサポートについて詳しくは、以下のリソースをご覧ください。

ブログ投稿

動画