機能プラグインを使用する Instant App を作成する

注: このページのワークフローが当てはまるのは、Android Studio 3.1 を使用して Instant App を作成する場合に限られます。

今後は、Android Studio 3.3 以降を使用して Instant 対応アプリバンドルを作成することを強くおすすめします。

このガイドでは、Instant App を作成するための開発環境のセットアップ方法について説明します。また、[Create project] ウィザードや既存のアプリを使用して Instant App を作成する方法についても説明します。そして、Instant App を含む Android Studio プロジェクトの実行方法とデバッグ方法について説明します。最後に、Instant App の公開方法に関する参考リンクを提示します。

まだ Android Studio 3.0 以降をダウンロードしていない場合は、ダウンロードしてからこのガイドの手順を行ってください。

開発環境を準備する

Android Studio で、Android SDK Manager を開きます。[SDK Platforms] タブで、Android 6.0(API レベル 23)以降がインストールされていることを確認します。

次に、[SDK Tools] タブを開いて、次のパッケージをインストールします。

  • Android SDK Build-Tools 26.x 以降
  • Android SDK Platform Tools 25.x 以降
  • Android SDK Tools(最新バージョン)
  • Google Play Instant Development SDK(最新バージョン)
  • Support Repository(最新バージョン)
    • Support Repository のすべての依存関係(それぞれの最新バージョン)

サポート対象のパーミッションだけをリクエストする

Instant App は、ガイドに記載されているリストのパーミッションだけを使用して、Android App Bundle を使用して既存のアプリを Instant 対応にすることができます。

Instant App を作成する

次のいずれかのワークフローを使用して、Instant App を作成できます。

新しい Instant App プロジェクトを作成する

Instant App を作成する手順は次のとおりです。

  1. Android Studio を起動して、新しいプロジェクトを作成します。
    • プロジェクトをまだ開いていない場合は、[Welcome to Android Studio] ウィンドウで、[Start a new Android Studio project] をクリックします。
    • すでにプロジェクトを開いている場合は、[File] > [New Project] を選択します。
  2. [Create Android Project] ウィンドウで、以下の手順を行います。
    1. [Application name] ボックスに、「My First Instant App」と入力します。
    2. [Company domain] ボックスに、「example.com」と入力します。
    3. [Package name] は、「com.example.myfirstinstantapp」のままにします。
    4. [Next] をクリックします。
  3. [Target Android Devices] ウィンドウで、以下の手順を行います。
    1. [Phone and Tablet] が選択されていることを確認します。
    2. [Minimum SDK] リストで、[Include Android Instant App support] チェックボックスをオンにします。[Next] をクリックします。
  4. [Customize Instant App Support] ウィンドウで、デフォルト設定をそのままにしておきます。[Next] をクリックします。
  5. [Add an Activity to Mobile] ウィンドウで、[Empty Activity] を選択します。[Next] をクリックします。
  6. [Configure Activity] ウィンドウで、以下の手順を行います。
    • [Instant App URL Host] ボックスに、「myfirstinstantapp.example.com」と入力します(かっこは付けません)。
    • [Instant App URL route] ボックスに、「/hello」と入力します(かっこは付けません)。
    • 他の設定は、デフォルト値のままにします。
    • [Finish] をクリックします。

Android Studio が新しいプロジェクトのファイルをビルドし、ロードします。

既存のアプリをモジュール化する

このセクションでは、既存のモノリシック アプリをモジュール化アプリに変換する方法と、その新しくモジュール化したアプリに Instant 対応機能を追加する方法について説明します。

ベース機能モジュールと APK モジュールを作成する

Instant App を作成するには、まず以下のモジュールを作成する必要があります。

  • ベース機能モジュール - 作成するすべての Instant App にバンドルされる機能モジュール。これは、Android App Bundle のベース モジュールとは異なり、Instant App の機能と最初にインストールされたアプリの機能の両方を含んでいます。
  • ミニマル モジュール - アプリの APK ファイルのビルドに不可欠な共有コードだけを含みます。

プロセスが完了すると、アプリのビルドプロセスはアプリのロジックから分離されます。これにより、ロジックベース モジュールの一部を Instant App に変換できるようになります。

アプリをベース機能モジュールとして指定する

アプリを作成すると、「app」というモジュールが自動的に追加されます。このセクションでは、アプリのロジックをベース機能モジュールの一部として宣言する方法について説明します。

アプリのロジックをベース機能モジュールに移動する手順は次のとおりです。

  1. モジュールの名前を「base」などにします。
  2. アプリのリソース用のインポート ステートメントを更新して、新しく名前を付けたモジュールを参照するようにします。
  3. モジュールの base/build.gradle ファイルを開いて、次の変更を加えて、このモジュールを機能モジュールとして指定します。

    base/build.gradle

        // Replace
        // apply plugin: 'com.android.application'
        // with
        apply plugin: 'com.android.feature'
  4. このモジュールはアプリのベース機能モジュールであるため、baseFeature フラグを true に設定してマーキングします。

    base/build.gradle

        android {
            ...
            baseFeature true
            ...
        }

    注: アプリ内に機能モジュールが 1 つしかない場合は、それをベース機能モジュールとして指定する必要があります。

APK のミニマル モジュールを作成する

ベース機能モジュールに加えて、ミニマル モジュールも作成する必要があります。このモジュールには、アプリの APK ファイルをビルドする際に必要となる共有コードが格納されます。

ミニマル モジュールを作成する手順は次のとおりです。

  1. [File] > [New] > [New Module] を選択します。
  2. 表示された [Create New Module] ダイアログで、[Phone & Tablet Module] を選択します。[Next] をクリックします。
  3. [Phone & Tablet Module] ウィンドウで、モジュール名とパッケージ名を選択します。このガイドでは、モジュール名として「apk」を使用します。

    [Next] をクリックします。

  4. [Add an Activity to Mobile] ウィンドウで、[Add No Activity] を選択します。[Finish] をクリックします。

Android Studio がミニマル モジュールの作成を完了し、それをプロジェクト ウィンドウにロードします。

ミニマル モジュールと機能モジュールを関連付ける

機能モジュールを作成した後、それを Android Studio がアプリの APK ファイルに追加するには、その機能モジュールをアプリのミニマル モジュールに関連付ける必要があります。手順は次のとおりです。

  1. 必ず com.android.application を宣言する Gradle モジュール内でアプリ ID を宣言する必要があるため、applicationID 行を機能モジュールからミニマル モジュールに移動します。

    そのためには、以下のコード スニペットに示す手順を行います。

    base/build.gradle

        android {
           defaultConfig {
               // Remove this line
               // applicationId "com.mycompany.example"
               ...
           }
           ...
        }
    
        dependencies {
              // Add this line to declare this module's dependency
              // on the minimal module
              application project(":apk")
        }

    apk/build.gradle

        android {
            ...
            defaultConfig {
                // replace
                // applicationId "com.mycompany.example.apk"
                // with
                applicationId "com.mycompany.example"
                ...
            }
            ...
        }
  2. ミニマル モジュールは、アプリの各機能モジュールに依存する必要があります。そのためには、以下のコード スニペットのように、コンパイルの依存関係を更新します。

    apk/build.gradle

        dependencies {
            implementation project(':base')
            // If your app contains feature modules other than the base feature module,
            // add dependency lines that are similar to the following:
            // implementation project(':feature1')
            // implementation project(':feature2')
        }
  3. ベース機能モジュールで、以下のコンテンツを含むように AndroidManifest.xml ファイルを更新します。

    base/src/main/AndroidManifest.xml

        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
                  xmlns:tools="http://schemas.android.com/tools"
                  package="com.mycompany.example">
        ...
        </manifest>
  4. アプリのマニフェスト ファイルはそれぞれ一意のパッケージを参照する必要があるため、APK の AndroidManifest.xml 内の名前を次のように更新します。

    apk/src/main/AndroidManifest.xml

        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
                  package="com.mycompany.example.app">
        </manifest>

Google Play Instant 用の別の機能モジュールを作成する

機能モジュールを使用することで、アプリのアップデートが簡単になります。また、機能モジュールを使用すると、Instant App を簡単に作成できます。Instant App の場合、ユーザーは、アプリをインストールしなくても、リンクをクリックするだけで、特定の機能モジュール内の機能にアクセスすることができます。

機能モジュールをゼロから作成した場合、Google Play Instant の機能をすぐに追加できます。

Google Play Instant 用の新しい機能モジュールを作成する手順は次のとおりです。

  1. Android Studio で、[File] > [New] > [New Module] を選択します。
  2. 表示された [Create New Module] ウィンドウで、[Instant App] を選択します。[Next] をクリックします。
  3. 新しい機能モジュールの名前を指定します。このガイドでは、「instant」という名前を使用しています。[Finish] をクリックします。

Android Studio が新しい Instant App 機能モジュールの作成とビルドを完了します。

ベース機能モジュールの依存関係を検証する

機能モジュールがアプリのベース機能モジュールへの依存関係を含んでいるか確認する必要があります。

instant/build.gradle

dependencies {
        implementation project(':base')
    }
    

「今すぐ試す」機能を有効にする

図 1: Instant App に表示される [今すぐ試す] ボタン

Google Play Instant の場合、ユーザーが URL をクリックしなくても、Instant App をユーザーに配信できます。この「今すぐ試す」機能は、Play ストアで利用できます(図 1 を参照)。

アプリ内でこの機能を提供するには、2 つの方法があります。

  1. デフォルト アクティビティをそのまま残し、「今すぐ試す」機能のエントリ ポイントにします。
  2. アクティビティに URL を追加して、デフォルト URL を宣言し、「今すぐ試す」機能のエントリ ポイントにします。
デフォルト アクティビティを使用する

次のインテント フィルタを含むアクティビティが、エントリ ポイントになります。

<activity android:name="com.example...MainActivity" ... >
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
    
デフォルト URL を作成する

Instant App への URL アクセスを提供する場合、デフォルト URL を追加する必要があります。この URL は、ユーザーが Google Play ストアで [今すぐ試す] をクリックしたときや、Instant App をランチャーに固定したときに呼び出されます。デフォルト URL は通常、アプリのベース機能モジュール内にあるアプリのメイン アクティビティに対応します。

デフォルト URL を追加するには、次のコード スニペットに示すように、アプリのメイン アクティビティを含むアプリ モジュール内に <meta-data> 属性を追加します。

base/manifests/AndroidManifest.xml

<activity android:name="com.example.base.MainActivity" ... >
        <meta-data android:name="default-url"
                   android:value="https://example.com/welcome" />
    </activity>
    

Instant App への URL アクセスを提供する

アプリのウェブサイトのバナーなど、Play ストアの外部でユーザーが Instant App を開くことができるようにするには、次のいずれかのタスクを行います。

  • Launch API を使用します。

    https://play.google.com/store/apps/details?id=package_name&launch=true
  • アプリへのアプリリンクを追加します。各アプリリンクは、デベロッパーが所有する個別の URL であり、クリックすると、Instant App 内に特定のアクティビティがロードされます。

ドメインとアプリを関連付ける

URL Mapping Editor を使用すると、各アプリリンクを、Instant App へのエントリ ポイントとして機能する各アクティビティに関連付けることができます。詳細については、Android アプリリンクを検証するをご覧ください。

ユーザーがリンクをクリックしたときに起動する機能モジュールのマニフェスト ファイル内に、アプリリンクが表示されているか確認します。次の例の場合、「survey」という名前の機能モジュールのリンクが含まれています。

survey/manifests/AndroidManifest.xml

<activity android:name="com.example.survey_module.SurveyActivity" ... >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data
                android:scheme="http"
                android:host="example.com"
                android:pathPrefix="/survey" />
        </intent-filter>
    </activity>
    

これまでの手順を完了した後に、ブラウザが Instant App ではなく URL をロードしようとする場合は、次のコマンドを実行して DevMan データベースをクリアしてください。

$ adb shell pm clear com.google.android.instantapps.devman
    

ユーザーを直接 Instant App に移動させる

ユーザーがアプリリンクをクリックしたときに、ユーザーを直接アプリに移動させることができます。そのためには、次の手順に沿って、アプリリンク検証機能を提供します。

  1. Instant App とウェブサイトの関連付けを宣言します。
  2. アプリリンクに対応する各 <intent-filter> 要素に自動検証機能を追加します。

    survey/manifests/AndroidManifest.xml

        <activity android:name="com.example.survey.SurveyActivity" ... >
             <intent-filter android:autoVerify="true">
                 ...
             </intent-filter>
        </activity>

Instant App のアプリリンクを作成した後は、次のいずれかの方法で、別の機能モジュールをロードすることができます。

  • その機能モジュールに関連付けられている URL をロードするインテントを呼び出します。
  • Play コアライブラリを使用します。

Instant App を実行する

Instant App は、Android 5.1(API レベル 21)以降を搭載しているほとんどのデバイスにデプロイできます。テストデバイスがない場合は、下記のセクションを読んで、Instant App を実行するためのエミュレータのセットアップ方法についてご確認ください。

プロジェクトを Android Studio 内で実行する手順は次のとおりです。

  1. [View] > [Tool Windows] > [Project] をクリックして [Project] ウィンドウを開き、[Run] > [Run 'instantapp'] を選択します。
  2. [Select Deployment Target] ウィンドウで、アプリを実行するターゲット デバイスを選択します。

Android Studio がアプリをビルドし、テストデバイスまたはエミュレータ上にインストールします。

Instant App をサポートするエミュレータをセットアップする

Instant App を実行するためのエミュレータをセットアップする手順は次のとおりです。

  1. Android Virtual Device を作成します。Instant App に関するすべての最新機能を使用するには、デバイスが Android 8.1(API レベル 27)以降を搭載し、x86 アーキテクチャを採用していて、Google API を含んでいる必要があります。

  2. エミュレータを起動して、テスト用 Google アカウントにログインします。

  3. システムの [設定] メニューで、[Google] > [Instant Apps] に移動して、Android Instant App を有効にします。

公開用に Instant App をデプロイする

公開用に Instant App を準備する手順は次のとおりです。

  1. Android Studio で、[Build] > [Generate Signed APK] を選択します。
  2. [Generate Signed APK] ウィンドウで、instantapp モジュールを選択します。[Next] をクリックします。
  3. Instant App を配信するに記載されている手順を完了します。
  4. Google Play Console に移動して、リリースを準備して公開するに記載されているワークフローを完了します。必ず、対象 Instant App の APK をアップロードするようにしてください。

Google Play Console 内でアプリを準備して公開する方法については、アプリへの署名をご覧ください。

参考リンク

Google Play Instant の詳細については、以下の参考リンクをご覧ください。

コードラボ: 初めての Instant App を作成する
Google Play Instant に対するサポートを既存のアプリに追加します。
コードラボ: マルチ機能 Instant App を作成する
マルチ機能アプリをモジュール化します。