警告: Google Play Instant はご利用いただけなくなります。2025 年 12 月より、Google Play を通じて Instant Apps を公開できなくなり、すべての Google Play 開発者サービス Instant API が機能しなくなります。ユーザーには、どのメカニズムを使用しても、Google Play からインスタント アプリが提供されなくなります。
この変更は、Google Play Instant の導入以降、エコシステムの改善に向けて継続的に投資してきたこと と、デベロッパーの皆様からのフィードバックに基づいて行われます。
引き続き最も効果的にユーザーを獲得するために、デベロッパーの皆様には、 ディープリンクを使用して通常のアプリやゲームにユーザーを導き、必要に応じて特定のジャーニーや機能にリダイレクトすることをおすすめします。
Google Play Instant エクスペリエンスを作成する際は、 Android App Bundle の一部として組み込みます。このようなバンドルのことを「Instant 対応 App Bundle」と呼びます。このドキュメントでは、Instant 対応 App Bundle 用の開発環境をセットアップする方法と、Instant 対応 App Bundle を設定、ビルド、テスト、公開する方法について説明します。
既存の Instant App プロジェクトが、サポートの終了した機能
プラグイン(com.android.feature)を使用している場合は、Android App Bundle に対応できるように Instant App に
移行する方法を確認してください。
開発環境をセットアップする
App Bundle 内で Instant エクスペリエンスを提供するには、Google Play Instant Development SDK にアクセスする必要があります。SDK をインストールするには、次のいずれかの方法を使用します。
- Android Studio 3.6 以降をインストールします。Android Studio を開いた後、SDK Manager の [SDK Tools] タブから Google Play Instant Development SDK をダウンロードします。
コマンドラインからインストールします。
cd path/to/android/sdk/tools/bin && \ ./sdkmanager 'extras;google;instantapps'
また、ローカルで Instant エクスペリエンスをテストする場合は、物理デバイスまたは仮想デバイスを用意します。
必須の実行条件について
Google Play Instant は、特別なタイプの SELinux サンドボックス内で Instant 対応 App Bundle を実行することで、セキュリティを強化しています。このサンドボックスでは、権限のサブセットを使用できるほか、他のアプリとの限られた種類のやり取りも行えます。以降のセクションでは、このサンドボックスの特性について詳しく説明します。
サポートされる権限とオペレーション
Instant 対応 App Bundle で使用できるパーミッションは、以下のリストのものに限られます。
ACCESS_COARSE_LOCATIONACCESS_FINE_LOCATIONACCESS_NETWORK_STATEBILLING– Google Play Billing Library 1.0 以降サポート終了.CAMERAINSTANT_APP_FOREGROUND_SERVICE– Android 8.0(API レベル 26)以降の場合のみINTERNETREAD_PHONE_NUMBERS– Android 8.0(API レベル 26)以降の場合のみRECORD_AUDIOVIBRATEWAKE_LOCK
サポートされない一般的な権限の処理
アプリから削除する必要があるサポートされない一般的な権限のリストと、それぞれについて推奨される移行パスを次に示します。
ACCESS_WIFI_STATE:ACCESS_NETWORK_STATEを使用します。ACCESS_WIFI_STATEと同様の情報が提供されます。BILLING: この権限のサポートは終了しました。Google Play Billing Library を使用してください。これにより、com.android.vending.BILLING権限は不要になります。READ/WRITE_EXTERNAL_STORAGE: Instant Apps は外部ストレージにアクセスできません。代わりに内部ストレージを使用してください。com.google.android.c2dm.permission.RECEIVEとpermission.C2D_MESSAGE: C2DM のサポートは終了しました。Firebase Cloud Messaging(FCM)に移行してください。FCM では、追加の権限は必要ありません。
なお、Instant 対応 App Bundle では次の操作が行えません。
- バックグラウンド サービスを使用する。
- 通知を送信する バックグラウンドで実行しているときに 。
インストール済みのアプリにアクセスする
以下のいずれかを満たさない限り、Instant 版アプリはデバイスにインストール済みのアプリとやり取りできません。開発する際は、この点に注意してください。
- インストール済みのアプリ内の 1 つまたは複数のアクティビティで
android:visibleToInstantApps要素がtrueに設定されている(この要素は Android 8.0(API レベル 26)以降で実行されているアプリで利用可能です)。 - インストール済みのアプリに
CATEGORY_BROWSABLEを含むインテント フィルタが含まれている。 - Instant エクスペリエンスが
ACTION_SEND、ACTION_SENDTO、またはACTION_SEND_MULTIPLEのいずれかのアクションを使用してインテントを送信している。
Instant 版アプリ向けにプロジェクトを設定する
Google Play Instant に対応するには、Instant 対応 App Bundle を慎重に設定する必要があります。以下のセクションでは、その注意事項について説明します。
プロジェクトの依存関係を宣言する
アプリで Google Play Instant API を使用するには、アプリ モジュールの build.gradle 構成ファイルに次の宣言を含めます。
Groovy
implementation "com.google.android.gms:play-services-instantapps:17.0.0"
Kotlin
implementation("com.google.android.gms:play-services-instantapps:17.0.0")
正しいバージョン コードを定義する
Instant 版アプリのバージョン コードは、インストール版アプリのバージョン コードより小さくする必要があります。これは、Google Play Instant 版を使用した後、アプリをデバイスにダウンロードしてインストールすることを、ユーザーに期待しているためです。Android フレームワークは、この移行をアプリのアップデートと見なします。
バージョニング スキームを確実にユーザーの想定と合致させるには、次のいずれかの方法を使用します。
- Google Play Instant 版のバージョン コードを 1 から再開します。
- インストール版 APK のバージョン コードを大きな数値の単位(たとえば 1,000 単位)で増加するように設定して、Instant 版のバージョン番号を増やすための余地を確保します。
Instant App とインストール版アプリを 2 つの別々の Android Studio プロジェクトで開発してもかまいません。ただしその場合、アプリを Google Play で公開するには、次のようにする必要があります。
- 両方の Android Studio プロジェクトで同じパッケージ名を使用します。
- Google Play Console で、両方のバリエーションを同じアプリにアップロードします。
アプリのバージョン設定については、アプリのバージョニングをご覧ください。
ターゲット サンドボックス バージョンを更新する
Instant App の AndroidManifest.xml ファイルは、Google Play Instant がサポートするサンドボックス環境をターゲットとするように更新する必要があります。この更新を行うには、次のコード スニペットに示すように、アプリの
<manifest>要素にandroid:targetSandboxVersion属性を追加します。
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
...
android:targetSandboxVersion="2" ...>
詳細については、
targetSandboxVersion
属性に関するドキュメントをご覧ください。
Instant 対応アプリ モジュールを宣言する
App Bundle が Instant 版に対応していることを宣言するには、次のいずれかの方法を使用します。
既存の App Bundle に含まれるモジュールがベース モジュールのみの場合は、次のようにして App Bundle を Instant 対応にします。
- メニューバーから [View] > [Tool Windows] > [Project] を選択して、[Project] パネルを開きます。
- 通常は「app」という名のベース モジュールを右クリックし、[Refactor] > [Enable Instant Apps Support] を選択します。
- 表示されたダイアログで、プルダウン メニューからベース モジュールを選択します。
- [OK] をクリックします。
Android Studio がモジュールのマニフェストに次の宣言を追加します。
<manifest ... xmlns:dist="http://schemas.android.com/apk/distribution"> <dist:module dist:instant="true" /> ... </manifest>既存の App Bundle に含まれるモジュールが複数ある場合は、 Instant 対応の機能 モジュールを作成します。このプロセスにより、アプリのベース モジュールも Instant 対応になるため、アプリ内で複数の Instant エントリ ポイントをサポートできるようになります。
ログインのサポートを追加する
Instant エクスペリエンスでユーザーにログインを許可する場合は、Instant 対応 App Bundle が Smart Lock for Passwords on Android をサポートしている必要があります。もしくは、「クイックプレイ」ゲームを作成する場合には、Google Play ゲームサービスのログインを使用します。
実行環境をサポートする
Instant 版が実行される SELinux サンドボックスと互換性を持たせるため、Instant 対応 App Bundle を作成する際は次の点に注意してください。
myUid()の値は共有しないでください。 この値は、アプリプロセスのカーネル割り当て UID です。- アプリが Android 8.1(API レベル 27)以前をターゲットとしている場合は、
ネットワーク セキュリティ構成ファイルを作成し、
cleartextTrafficPermittedをfalseに設定します。Instant 版は HTTP トラフィックをサポートしていません。Android 9 以降をターゲットとするアプリの場合、平文のトラフィックはデフォルトで無効になっています。 Instant 版は、Instant 版のキャッシュがクリアされるまで、ユーザーのデバイスにダウンロードされたまま残ります。キャッシュのクリアは次のいずれかの状況で発生します。
- デバイスの空きメモリが不足しているために、Instant 版のキャッシュがガベージ コレクションの対象になる。
- ユーザーがデバイスを再起動する。
いずれかのプロセスが発生した場合、ユーザーが Instant 版を操作するには、再度ダウンロードする必要が生じます。
システムの保存容量が非常に少なくなっている場合、Instant 版のユーザーデータが内部ストレージから削除される場合があります。したがって、ユーザーの進行状況が保持されるように、ユーザーのデータについて、アプリのサーバーと定期的に同期することをおすすめします。
Instant 版ワークフローのロジックを追加する
Instant 版をサポートするように App Bundle を構成したら、下記のセクションで示すロジックを追加します。
アプリが Instant エクスペリエンスを実行しているかどうかを確認する
アプリのロジックの一部が、ユーザーが Instant エクスペリエンスを使用中かどうかに依存している場合は、
isInstantApp()
メソッドを呼び出します。現在実行中のプロセスが Instant 版である場合、このメソッドは true を返します。
インストール メッセージを表示する
アプリまたはゲームの試用版を作成する場合、Google Play Instant では、Instant エクスペリエンスにメッセージを表示して、デバイスに完全版をインストールするようユーザーに促すことができます。このメッセージを表示するには、次のコード スニペットに示すように、InstantApps.showInstallPrompt() メソッドを使用します。
Kotlin
class MyInstantExperienceActivity : AppCompatActivity { // ... private fun showInstallPrompt() { val postInstall = Intent(Intent.ACTION_MAIN) .addCategory(Intent.CATEGORY_DEFAULT) .setPackage(your-installed-experience-package-name) // The request code is passed to startActivityForResult(). InstantApps.showInstallPrompt(this@MyInstantExperienceActivity, postInstall, request-code, /* referrer= */ null) } }
Java
public class MyInstantExperienceActivity extends AppCompatActivity { // ... private void showInstallPrompt() { Intent postInstall = new Intent(Intent.ACTION_MAIN) .addCategory(Intent.CATEGORY_DEFAULT) .setPackage(your-installed-experience-package-name); // The request code is passed to startActivityForResult(). InstantApps.showInstallPrompt(MyInstantExperienceActivity.this, postInstall, request-code, /* referrer= */ null); } }
インストール版にデータを移行する
ユーザーは Instant エクスペリエンスで楽しめたと感じたら、アプリをインストールしようとします。適切なユーザー エクスペリエンスを提供するには、Instant エクスペリエンスから完全版アプリにユーザーのデータを移行できるようにすることが重要です。
ユーザーが Android 8.0(API レベル 26)以降を搭載したデバイスを使用している、
またはアプリで を targetSandboxVersion
に指定している場合、ユーザーのデータは完全版のアプリに自動的に移行されます。それ以外の場合は、データを手動で移行する必要があります。2そのためには、次のいずれかの API を使用します。
- ユーザーが Android 8.0(API レベル 26)以降を搭載したデバイスを使用している場合は、 Cookie API を使用します(サンプルアプリ)。
- ユーザーが Android 7.1 (API レベル 25)以前を搭載したデバイスで Instant 版を操作できる場合は、Storage API のサポートを追加します - サンプルアプリ
App Bundle をビルドする
Android Studio またはコマンドライン インターフェースを使用して、Instant 対応 App Bundle をビルドできます。
Android Studio
Android Studio で、[Build] > [Build Bundle(s) / APK(s)] > [Build Bundle(s)] を選択すると、App Bundle をビルドできます。プロジェクトのビルド方法については、プロジェクトのビルドをご覧ください。
コマンドライン インターフェース
Gradle を使用してコマンドラインから App Bundle をビルドすることもできます 。
64 ビット アーキテクチャのサポート
Google Play で公開するアプリは、64 ビット アーキテクチャをサポートする必要があります。64 ビット版のアプリを追加することで、パフォーマンスを向上させ、64 ビット ハードウェアのみで構成されたデバイスに対応できるようになります。64 ビット サポートの詳細
Instant エクスペリエンスをテストする
Instant 対応 App Bundle を公開する前に、次のいずれかの場所から Instant 版アプリをテストして、機能を検証できます。
- Android Studio を使用してローカル デバイスにインストールする。
- コマンドライン インターフェースを使用してローカル デバイスにインストールする。
- Google Play Console の内部テストトラックに 公開する。
Android Studio
Android Studio を使用してローカルマシンでアプリの Instant 版をテストする手順は次のとおりです。
- テストデバイスにアプリのインストール版がインストールされている場合は、アンインストールします。
- Android Studio で、[Run/Debug Configurations] ダイアログの [General]タブに表示されるインストール オプションの中から、[Deploy as instant app]チェックボックスをオンにします。
- メニューバーで [Run] > [Run] を選択するか、ツールバーの Run(
)をクリックして、アプリの Instant 版をテストするデバイスを選択します。選択したテストデバイス上にアプリの Instant 版が読み込まれます。選択したテストデバイス上にアプリの Instant エクスペリエンスが読み込まれます。
コマンドライン インターフェース
コマンドラインを使用してローカルマシンでアプリの Instant 版をテストする手順は次のとおりです。
- テストデバイスにアプリのインストール版がインストールされている場合は、アンインストールします。
- 次のコマンドを入力することで、テストデバイス上で Instant App をサイドローディングして実行します。
ia run output-from-build-command
内部テストトラック
Google Play ストアやウェブサイトのバナーからアプリの Instant エクスペリエンスをテストするには、Google Play Console の内部テスト トラック にアプリを公開します。
アプリを内部テストトラックに公開する手順は次のとおりです。
- Google Play Console に App Bundle をアップロードするガイドの手順に沿って、App Bundle をアップロードします。
- アップロードしたバンドルを内部テストトラックにリリースする準備を行います。詳細については、リリースの準備と公開の方法に関するサポート記事をご覧ください。
デバイス上で内部テスター アカウントにログインして、次のいずれかのサーフェスから Instant 版アプリを起動します。
- アプリの Play ストア掲載情報から [今すぐ試す] ボタンを押します。
- アプリのウェブサイトのバナーにあるリンクをタップします。
App Bundle を製品版トラックに公開する
APK ベースの Instant App がすべて Instant 対応バンドルに更新されていることを確認してください。Instant 対応 App Bundle を公開する手順は次のとおりです。
- まだ行っていない場合は、リリース鍵を使用して App Bundle に署名し、App Bundle をGoogle Play Console にアップロードします。
- Play Console で、[リリース管理] > [Android Instant Apps] を開いて、[Instant App の製品版] トラックに移動します。
- [Update from Library] を選択して、アップロード済みの Instant 対応 App Bundle を選択します。
Instant 版を公開する場所を選択する
ユーザーがアプリをインストールできる国や地域のサブセットで、アプリの Instant 版をリリースできます。この機能は、特定の国や地域に居住するユーザーにアプリの Instant 版の利用を促す場合に便利です。
参考情報
Instant 版アプリや Android App Bundle の作成方法については、以下のリソースをご覧ください。
- 動画: アプリを Instant にバンドルする
- この Android Dev Summit 2018 セッションは、Android App Bundle に Instant エクスペリエンスを追加する方法について説明しています。
- 動画: Android App Bundle を使用して小さなアプリを公開する
- App Bundle を活用してアプリを迅速に開発し、ユーザー向けに小さな APK を作成する方法について説明しています。
- Codelab: 初めての Android App Bundle
- Android App Bundle を作成して機能を追加するための手順を詳細に説明しています。
- Android App Bundle 形式
bundletoolコマンドライン プログラムを使用して、アプリのコードやリソースから App Bundle を用意する方法について説明しています。