Cuttlefish:快照與還原

Android 15 介紹了如何擷取 Cuttlefish 虛擬裝置的快照,以及還原快照。擷取 Cuttlefish 裝置的快照,即可將裝置狀態儲存在磁碟上的圖片中。接著,您可以還原快照,讓 Cuttlefish 裝置回到先前儲存的狀態。

您可以在各種自動或手動工作流程中使用快照。執行會修改裝置的程序時,您可以拍攝裝置快照,確保您可以將裝置還原至特定狀態。舉例來說,如果在執行會修改裝置狀態的測試套件,且可能會導致下列測試出現問題或異常情況,您可以拍攝快照,以便在測試後將裝置還原至已儲存的狀態,確保後續測試能順暢執行。

另一個實用的工作流程範例就是,快照在測試應用程式的行為時。根據一組動作測試應用程式的行為時,您可以在應用程式執行期間拍攝不同動作之間的快照,這樣就不必從頭開始還原,就能還原至該快照。舉例來說,如果啟動遊戲需要很長的時間,您可以在開啟主選單後拍攝快照,這樣就能直接將裝置還原到該狀態,略過啟動時間。

拍攝 Cuttlefish 裝置的快照

擷取裝置快照時,必須暫停 Cuttlefish 裝置,確保 Cuttlefish 裝置處於穩定狀態。裝置暫停時,所有 vCPU 和裝置都會停止,且所有緩衝區都會將其狀態推送至 VM。接著,快照會將 vCPU 的狀態、記憶體和裝置狀態儲存到磁碟指定的目的地資料夾。

系統不支援 VirtiosFS,因此在擷取快照時必須停用該功能。如要停用 VirtioFS,請在執行 cvd createcvd start 時傳遞引數 --enable_virtiofs=false

快照僅支援 SwiftShader (guest_swiftshader) GPU 模式。不支援其他加速圖形模式

以下步驟說明啟動 Cuttlefish 裝置及拍攝快照的程序。

  1. 啟動裝置,同時停用 VirtioFS。您即可使用該裝置。

    cvd create --enable_virtiofs=false --gpu_mode=guest_swiftshader
  2. 使用下列標記執行 cvd snapshot_take,即可取得快照:

    • --force:如果指定的快照路徑中已有資料夾,這個標記可確保刪除現有資料夾,並在包含快照的快照路徑中建立新資料夾

    • --auto_suspend:在拍攝快照前暫停裝置,並在拍攝快照後恢復裝置。

    • --snapshot_path:使用快照建立新資料夾的指定路徑。

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

還原 Cuttlefish 裝置

還原 Cuttlefish 裝置快照時,必須停止用於擷取快照的 Cuttlefish 例項。如果執行個體已經停止,則不需要採取進一步行動,可以還原快照。

如要還原 Cuttlefish 裝置的快照,請使用 cvd create 啟動裝置,並加入快照路徑。如果擷取快照的 Cuttlefish 裝置的基礎執行個體編號與目前 Cuttlefish 執行個體的基礎例項編號不同,請使用 --base_instance_num 旗標傳遞該基礎例項編號。

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

暫停 Cuttlefish 裝置

您可以暫停 Cuttlefish 裝置,而不需要拍攝快照 (不會使用磁碟空間儲存狀態)。如要暫停 Cuttlefish 裝置,請執行:

cvd suspend

重新啟用 Cuttlefish 裝置

如要重新啟用已暫停的 Cuttlefish 裝置,請執行以下指令:

cvd resume

驗證快照/還原功能

執行下列測試來驗證快照/還原功能:

atest SnapshotTest