スナップショットは、Android Virtual Device(AVD)の保存されたイメージであり、OS 設定、アプリの状態、ユーザーデータなど、デバイスが保存された時点の全体的な状態を保持します。スナップショットを読み込むことで、保存されたシステム状態に戻せるため、仮想デバイス上のオペレーティング システムとアプリの再起動を待つ時間を削減でき、テストを再開したい特定の状態にアプリを戻す手間が省けます。スナップショットを読み込んで仮想デバイスを起動することは、実機を電源オフの状態から起動するのではなく、スリープ状態から起動する場合に似ています。
AVD ごとに、1 つのクイックブート スナップショットを作成でき、一般的なスナップショットは無制限に作成できます。
スナップショットを活用する最も簡単な方法は、クイックブート スナップショットを使用することです。デフォルトでは、各 AVD は終了時にクイックブート スナップショットを自動的に保存し、起動時にクイックブート スナップショットから読み込むように設定されています。
AVD を初めて起動するときは、コールドブートを行う必要があります(デバイスの電源を入れるのと同じです)。クイックブートが有効になっている場合、初回以降の起動時にはすべて指定のスナップショットから読み込みが行われ、システムはそのスナップショットに保存された状態に復元されます。
クイックブート スナップショットを使用すると、AVD はコールドブートよりも最大 10 倍速く起動できます。そのため、AVD の初回起動後に(可能であれば)クイックブートを使用することをおすすめします。
スナップショットは、そのスナップショットを保存したときのシステム イメージ、AVD 構成、エミュレータ機能に対して有効です。これらの領域のいずれかを変更すると、影響を受ける AVD のすべてのスナップショットが無効になります。Android Emulator、システム イメージ、または AVD 設定を更新すると、AVD の保存済み状態がリセットされるため、次回 AVD を起動するときはコールドブートを行う必要があります。
スナップショットの保存、読み込み、管理のコントロールのほとんどは、[Snapshots] ペインの [Snapshots] タブと [Settings] タブにあります。Android Studio のツール ウィンドウでエミュレータを実行している場合は、エミュレータ ツールバーに [Snapshots] ペインボタンが表示されます。Android Studio の外部で、スタンドアロン ウィンドウでエミュレータを実行している場合は、[Extended controls] ウィンドウに [Snapshots] ペインが表示されます。
コマンドラインからエミュレータを起動するときにも、クイックブート オプションを操作できます。
クイックブート スナップショットを保存する
閉じるときエミュレータが自動的にスナップショットを保存するかどうかを指定できます。この動作を制御するには、次の手順で処理します。
- スナップショットの設定を開きます。Android Studio にエミュレータが埋め込まれている場合は、ツールバーの [Snapshots] をクリックします。エミュレータが別のウィンドウに表示されている場合は、[Extended controls] ウィンドウを開きます。
- コントロールの [Snapshots] カテゴリで、[Settings] タブに移動します。
[Auto-save current state to Quickboot] メニューから、次のいずれかのオプションを選択します。
Yes: エミュレータを閉じるときは常に AVD スナップショットを保存しますこれがデフォルトです。
No: エミュレータを閉じるときに AVD スナップショットを保存しません。
この選択は、開いている AVD にのみ適用されます。ADB がオフラインのとき(AVD の起動中など)にスナップショットを保存することはできません。
一般的なスナップショットを保存する
クイックブート スナップショットは AVD ごとに 1 つしか保存できないのに対して、一般的なスナップショットは AVD ごとに複数保存できます。
一般的なスナップショットを保存するには、[Snapshots] ペインを開き、右下隅にある [Take snapshot] ボタンをクリックします。
選択したスナップショットの名前と説明を編集するには、ペインの下部にある編集ボタン をクリックします。
スナップショットを削除する
スナップショットを手動で削除するには、[Snapshots] ペインを開き、スナップショットを選択して、ペインの下部にある削除ボタン をクリックします。
また、AVD 設定やエミュレータのバージョンが変更されたときなどに、無効になったスナップショットを自動的に削除するかどうかも指定できます。デフォルトでは、エミュレータは無効なスナップショットを削除するかどうかを確認します。この設定は、[Snapshots] ペインにある [Settings] タブの [Delete invalid snapshots] メニューで変更できます。
スナップショットを読み込む
必要なときにスナップショットを読み込むには、エミュレータの [Snapshots] ペインを開き、[Snapshots] カテゴリを選択し、スナップショットを選択して、ペインの下部にある読み込みボタン をクリックします。
Android Studio 3.2 以降では、デバイス設定ごとに、[Virtual Device Configuration] ダイアログの詳細設定に [Boot option] コントロールが表示されます。このコントロールを使用して、AVD の起動時に読み込むスナップショットを指定できます。
クイックブートを無効にする
AVD が常にコールドブートを実行するようにクイックブートを無効にする手順は次のとおりです。
- [Tools] > [Device Manager] を選択し、AVD 編集アイコン をクリックします。
- [Show Advanced Settings] をクリックし、[Emulated Performance] までスクロールします。
- [Cold boot] を選択します。
一度だけのコールドブート
クイックブートを完全に無効にする代わりに、[Device Manager] で AVD のメニューから [Cold Boot] をクリックしてコールドブートできます。
スナップショットの要件とトラブルシューティング
- スナップショットは、Android 4.0.4(API レベル 15)以前では機能しません。
- スナップショットは、Android 8.0(API レベル 26)の ARM システム イメージでは機能しません。
- エミュレータがスナップショットからの起動に失敗した場合は、デバイス マネージャーで AVD の [コールドブート] を選択し、バグレポートを送信します。
- ソフトウェア レンダリングが有効になっている場合、スナップショットの信頼性は低下します。スナップショットが機能しない場合は、デバイス マネージャーで AVD 編集アイコン をクリックし、[Graphics] を [Hardware] または [Automatic] に変更します。
- スナップショットの読み込みまたは保存は、メモリを集中的に使用する操作です。読み込みまたは保存操作の開始時に十分な RAM を確保できない場合、オペレーティング システムは RAM の内容をハードディスクにスワップすることがあり、操作が大幅に遅くなる可能性があります。スナップショットの読み込みや保存が非常に遅い場合は、RAM を解放するとこうした操作を高速化できることがあります。作業上重要でないアプリケーションを閉じると、簡単に RAM を解放できます。