Cuttlefish: Snapshot und Wiederherstellung

In Android 15 wird beschrieben, wie Sie einen Snapshot erstellen und einen Snapshot eines virtuellen Cuttlefish-Geräts wiederherstellen. Wenn Sie einen Snapshot eines Cuttlefish-Geräts erstellen, können Sie den Status des Geräts in einem Image auf dem Laufwerk speichern. Sie können den Snapshot dann wiederherstellen, um ein Cuttlefish-Gerät in den zuvor gespeicherten Zustand zu versetzen.

Sie können Snapshots in verschiedenen automatisierten oder manuellen Workflows verwenden. Wenn Sie ein Verfahren ausführen, das das Gerät verändert, können Sie einen Snapshot des Geräts erstellen, damit Sie es bei Bedarf in den gewünschten Zustand zurückversetzen können. Wenn Sie beispielsweise Test-Suites ausführen, die den Status des Geräts ändern und möglicherweise Probleme oder Instabilitäten bei den folgenden Tests verursachen können, können Sie einen Screenshot erstellen, damit Sie das Gerät nach einem Test in den gespeicherten Zustand zurückversetzen können. So können nachfolgende Tests ordnungsgemäß ausgeführt werden.

Ein weiterer Beispiel-Workflow, in dem Snapshots nützlich sind, ist das Testen des Verhaltens einer App. Wenn Sie das Verhalten einer App basierend auf einer Reihe von Aktionen testen, können Sie zwischen den Aktionen einen Snapshot erstellen, während die App ausgeführt wird, um diesen Snapshot wiederherzustellen, ohne von vorn beginnen zu müssen. Wenn beispielsweise das Starten eines Spiels sehr lange dauert, können Sie einen Screenshot erstellen, nachdem Sie das Hauptmenü erreicht haben. So können Sie das Gerät in diesen Zustand wiederherstellen und die Startzeit überspringen.

Snapshot eines Cuttlefish-Geräts erstellen

Wenn Sie einen Snapshot eines Geräts erstellen, muss das Cuttlefish-Gerät angehalten werden, damit es sich in einem stabilen Zustand befindet. Wenn das Gerät angehalten wird, werden alle vCPUs und Geräte beendet und alle Puffer senden ihren Status an die VM. Der Snapshot speichert dann den Status der vCPU, des Arbeitsspeichers und des Geräts auf dem Laufwerk im angegebenen Zielordner.

VirtiosFS wird nicht unterstützt und muss beim Erstellen eines Snapshots deaktiviert werden. Wenn Sie VirtioFS deaktivieren möchten, übergeben Sie das Argument --enable_virtiofs=false, wenn Sie cvd create oder cvd start ausführen.

Für Snapshots wird nur der GPU-Modus „SwiftShader“ (guest_swiftshader) unterstützt. Andere Grafikmodi mit Beschleunigung werden nicht unterstützt.

In den folgenden Schritten wird beschrieben, wie Sie ein Cuttlefish-Gerät starten und einen Snapshot erstellen.

  1. Starten Sie ein Gerät und deaktivieren Sie dabei VirtioFS. Sie können das Gerät dann verwenden.

    cvd create --enable_virtiofs=false --gpu_mode=guest_swiftshader
  2. Erstellen Sie einen Snapshot, indem Sie cvd snapshot_take mit den folgenden Flags ausführen:

    • --force: Wenn sich unter dem angegebenen Snapshot-Pfad ein Ordner befindet, wird dieser Ordner mit diesem Flag gelöscht und ein neuer Ordner mit dem Snapshot wird am Snapshot-Pfad erstellt.

    • --auto_suspend: Das Gerät wird vor dem Erstellen des Snapshots angehalten und nach dem Erstellen fortgesetzt.

    • --snapshot_path: Der angegebene Pfad, unter dem ein neuer Ordner mit dem Snapshot erstellt wird.

    cvd snapshot_take --force --auto_suspend \
    --snapshot_path=PATH

Cuttlefish-Gerät wiederherstellen

Wenn Sie einen Cuttlefish-Geräte-Snapshot wiederherstellen, muss die Cuttlefish-Instanz, für die der Snapshot erstellt wurde, angehalten werden. Wenn die Instanz bereits angehalten wurde, sind keine weiteren Maßnahmen erforderlich und der Snapshot kann wiederhergestellt werden.

Wenn Sie einen Snapshot eines Cuttlefish-Geräts wiederherstellen möchten, starten Sie ein Gerät mit cvd create und geben Sie den Pfad zum Snapshot an. Wenn sich die Basisinstanznummer des Cuttlefish-Geräts, auf dem der Snapshot erstellt wurde, von der Basisinstanznummer der aktuellen Cuttlefish-Instanz unterscheidet, geben Sie diese Basisinstanznummer mit dem Flag --base_instance_num an.

cvd create --snapshot_path=PATH \
--base_instance_num=ID

Cuttlefish-Gerät sperren

Sie können ein Cuttlefish-Gerät pausieren, ohne einen Snapshot zu erstellen. Für das Speichern des Status wird kein Speicherplatz belegt. Führen Sie Folgendes aus, um ein Cuttlefish-Gerät zu pausieren:

cvd suspend

Cuttlefish-Gerät fortsetzen

So setzen Sie ein angehaltenes Cuttlefish-Gerät fort:

cvd resume

Funktion „Snapshot/Wiederherstellung“ prüfen

Die Funktion „Snapshot/Restore“ (Snapshot/Wiederherstellen) kann mit dem folgenden Test überprüft werden:

atest SnapshotTest