日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

使用 Cuttlefish 虚拟 Android 设备

發布時間:2024/4/15 Android 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用 Cuttlefish 虚拟 Android 设备 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是 Cuttlefish?

cuttlefish?是一種可配置的虛擬 Android 設備,既可以遠程運行(使用第三方云產品,如 Google Cloud Engine),又可以在本地運行(在 Linux x86 機器上)。

Cuttlefish 的目標

  • 使平臺和應用開發者不再依賴于物理硬件來開發和驗證代碼更改。
  • 通過與核心框架保持高度一致,以高保真度為重點來復制真實設備的基于框架的行為。
  • 支持 API 級別 28 之后的所有 API 級別。
  • 在各個 API 級別達到一致的功能水平,與物理硬件上的行為保持一致。
  • 實現規模化:

    • 能夠并行運行多臺設備。
    • 能夠并發執行測試,實現高保真度且入門成本較低。
  • 提供可配置的設備,能夠調整設備類型、RAM、CPU 等。

Cuttlefish 與其他設備的對比情況

Cuttlefish 和 Android 模擬器

Cuttlefish 與?有許多相似之處,但 Cuttlefish 可以保證 Android 框架(無論這是純 AOSP,還是您自己的樹中的自定義實現)實現全保真。在實際應用中,這意味著 Cuttlefish 應該會在操作系統級別響應您的互動,就像使用相同的自定義或純 Android 操作系統源代碼構建的實體手機目標一樣。

Android 模擬器圍繞簡化應用開發的用例構建而成,它包含許多功能鉤子來迎合 Android 應用開發者的用例。如果您要使用您的自定義 Android 框架來構建模擬器,這可能會帶來一些挑戰。如果您需要能夠代表您的自定義平臺/框架代碼或 Android 樹形結構的虛擬設備,那么 Cuttlefish 虛擬設備是理想的選擇。它是用于表示當前 AOSP 開發狀態的規范設備。

Cuttlefish 和物理設備

Cuttlefish 虛擬設備與物理設備之間的主要區別在于硬件抽象層 (HAL) 級別,以及與任何自定義硬件互動的任何軟件。除了硬件專用實現之外,您應該會發現 Cuttlefish 和物理設備表現出在功能上等效的行為。

Cuttlefish 有哪些益處?

您可以像與任何可能用于調試的其他 Android 設備互動一樣與 Cuttlefish 互動。它會通過 adb 將自身注冊為正常設備,您可以像與物理設備互動一樣通過遠程桌面與之互動。Cuttlefish 的用例非常廣泛,涵蓋應用測試、自定義系統構建測試等。

由于 Cuttlefish 力求實現框架全保真,因此可用于對您的框架和/或應用進行功能測試,在測試中沒有無法模擬的物理硬件依賴項。

目前 Cuttlefish 通常如何用于測試?

Cuttlefish 在測試方面的一些常見應用包括:

  • CTS
  • 框架合規性
  • 持續集成測試
  • 自定義測試套件

我是否可以在云端托管 Cuttlefish?

可以,Cuttlefish 本身支持 Google Cloud,并計劃支持其他云平臺。

入門

如需獲得有關基于 AOSP 創建 Cuttlefish 實例的指導,請參閱入門指南。


Cuttlefish:GPU 圖形加速

Cuttlefish 的加速圖形模式會使用主機的物理圖形處理器 (GPU) 進行渲染,具體方法是將客戶機渲染命令傳遞給主機,在主機上運行渲染命令調用,然后將渲染后的結果傳遞回客戶機。

默認情況下,Cuttlefish 設備中的客戶機端渲染(例如界面和視頻播放)由 SwiftShader 處理。SwiftShader 是對 OpenGL API 和 Vulkan API 的軟件實現。由于 SwiftShader 是一種軟件實現,因此它為 Cuttlefish 提供了一種可在任何主機上運行的通用渲染解決方案。

不過,使用 SwiftShader 的性能不及使用正常設備。渲染是一種可大規模并行處理的并行問題,因為像素值是可以單獨計算的。圖形處理器 (GPU) 是通過加速渲染解決此問題的硬件單元。

要求

加速圖形模式要求主機具有以下驅動程序:

  • 支持 EGL 的驅動程序(支持?GL_KHR_surfaceless_context?擴展程序)
  • 支持 OpenGL ES 的驅動程序
  • 支持 Vulkan 的驅動程序

使用加速圖形模式

GfxStream

若要使用 GfxStream 加速圖形模式,請使用?--gpu_mode=gfxstream?標記啟動本地 Cuttlefish 設備。使用此模式時,OpenGL 和 Vulkan API 調用會直接轉到主機。

launch_cvd --gpu_mode=gfxstream

Virgl

若要使用 Virgl 加速圖形模式,請使用?--gpu_mode=drm_virgl?標記啟動本地 Cuttlefish 設備。

launch_cvd --gpu_mode=drm_virgl

使用 Virgl 加速圖形模式時,OpenGL API 調用會轉換為中間表示形式(請參閱?Gallium3D)。系統會將相應中間表示形式傳遞給主機,并且主機上的?virglrenderer?庫會將此中間表示形式重新轉換為 OpenGL API 調用。

注意:此模式不支持 Vulkan。


Cuttlefish:多租戶與 powerwashing

借助 Cuttlefish 多租戶功能,您的主機可以通過一次啟動調用來啟動多個虛擬客戶機設備。

這多個 Cuttlefish 虛擬機可以共用一些主機磁盤資源,從而節省磁盤空間。每個虛擬機都會獲得一個覆蓋 Android 分區(例如?super、userdata、boot)的不重復的磁盤疊加層。對客戶機磁盤的任何修改都將放置在客戶機專用的磁盤疊加層中,從而為每個 Cuttlefish 虛擬機提供其磁盤分區的寫入時復制視圖。當每個虛擬設備向其磁盤視圖寫入更多數據時,主機磁盤上的疊加層文件大小會增加,因為它們會捕獲原始狀態和當前狀態之間的增量。

疊加層文件可以重置,以將 Cuttlefish 磁盤恢復為其原始狀態。此過程稱為“PowerPowering”。

實例號

Cuttlefish 設備會在與其“實例號”相關聯的主機上創建并消耗資源。例如,對于實例號為?1?的 Cuttlefish 設備,其?adb?連接會通過位于端口?6520?的 TCP 服務器端套接字進行公開。當啟動多個實例時,它會在端口?6520?處為第一個設備創建 TCP 服務器端套接字,為第二個設備創建?6521,并遞增每個其他設備的端口號。

修改支持的實例的數量上限

必須為 Cuttlefish 虛擬機預先分配主機端資源(例如 TAP 網絡設備)。默認情況下,cuttlefish-common?Debian 軟件包會為?1?到?10?號實例預配資源。

如需進行更改,請在?/etc/default/cuttlefish-common?中修改?num_cvd_accounts,并通過執行以下命令來重啟?cuttlefish-common?服務:

sudo systemctl restart cuttlefish-common

控制多租戶實例

本部分介紹了如何啟動、停止設備以及對設備執行 powerwash 操作。這適用于單租戶和多租戶?launch_cvd?調用。

啟動

如需同時啟動多個 Cuttlefish 設備,請使用?--num_instances=N?標記,其中?N?為要啟動的設備數量。默認情況下,將會從實例號為?1?的設備開始啟動。

launch_cvd --num_instances=N

如需更改起始實例號,請執行以下某項操作:

  • 添加?--base_instance_num=N?標記,并將?N?作為第一個實例號。

    launch_cvd --base_instance_num=N
  • 使用與?vsoc-NN?匹配的用戶帳號啟動 Cuttlefish,其中?NN?為兩位數形式的基礎實例號。例如,如需使用用戶帳號?vsoc-01?啟動 Cuttlefish,請運行以下命令:

    launch_cvd --base_instance_num=1

停止

注意:在多設備環境中使用時,停止程序會同時應用于所有設備。

如需停止上次?launch_cvd?調用啟動的所有設備,請運行以下命令:

stop_cvd

powerwashing

注意:“powerwashing”發生在您重啟虛擬設備時。在單設備環境或多設備環境中使用時,powerwashing 會同時應用于所有設備。

如需在原始狀態(構建后的狀態)下啟動設備,請使用?launch_cvd?命令添加?--resume=false?標記。

// Launch and interact with your devices launch_cvd --num_devices=N --daemon // Stop all your devices stop_cvd // Restart devices in their original states launch_cvd --daemon --num_devices=N --resume=false

Cuttlefish:WebRTC 流式傳輸

借助 WebRTC 流式傳輸功能,用戶可通過瀏覽器遠程控制 Cuttlefish 虛擬設備,而無需在客戶端計算機上安裝任何其他軟件。WebRTC 流式傳輸功能的其他優勢包括:

  • 編碼效率高于 VNC
  • 瀏覽器內 ADB
  • 可擴展協議(攝像頭數據流、麥克風、傳感器數據都可以通過 WebRTC 實現)

使用 WebRTC

如需在瀏覽器中使用 WebRTC 并與您的 Cuttlefish 設備互動,請執行以下操作:

  • 如需使用 WebRTC 啟動設備,請在?launch_cvd?調用中添加?--start_webrtc=true?標記。

    launch_cvd --start_webrtc=true

  • 如需查看您可以連接的所有設備的列表,請讓瀏覽器指向?<https://localhost:8443>。

  • 端口使用情況

    WebRTC 除使用?TCP:8443?之外,還會使用其他端口建立連接并運行。 如果從與執行 Cuttlefish 的計算機不同的計算機進行連接,則必須在防火墻中允許這些端口。所需端口的列表如下:

    • TCP:15550
    • UDP:15550
    • UDP:15551
    • UDP:15552
    • UDP:15553
    • UDP:15554
    • UDP:15555
    • UDP:15556
    • UDP:15557
    • UDP:15558

    Cuttlefish:運行穩定版 CTS

    本頁介紹了如何運行兼容性測試套件 (CTS),以便根據 AOSP 源代碼評估虛擬設備。

    構建 Cuttlefish

    在運行 CTS 之前,請先構建要使用 CTS 測試的虛擬設備。對于 AOSP Cuttlefish,請執行以下操作:

    source build/envsetup.sh lunch aosp_cf_x86_64_phone-userdebug make -j

    構建 CTS

    CTS 是獨立于設備工件構建的。如需構建 CTS,請按照以下說明操作。

    從構建 Cuttlefish 所在樹的根目錄中,運行以下命令:

    source build/envsetup.sh m -j cts WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY=false TARGET_PRODUCT=aosp_x86_64

    啟動多租戶 Cuttlefish 實例

    注意:如需詳細了解如何啟動多臺 Cuttlefish 設備,請參閱?Cuttlefish 多租戶與 powerwashing。

    從構建 Cuttlefish 所在樹的根目錄中,運行以下命令:

    source build/envsetup.sh lunch aosp_cf_x86_64_phone-userdebug launch_cvd --num_instances=8 --daemon

    啟動實例時,請驗證每臺設備是否都可以訪問?adb。

    adb devices

    輸出應類似于以下示例輸出:

    List of devices attached 127.0.0.1:6520 ?device 127.0.0.1:6521 ?device 127.0.0.1:6522 ?device 127.0.0.1:6523 ?device 127.0.0.1:6524 ?device 127.0.0.1:6525 ?device 127.0.0.1:6526 ?device 127.0.0.1:6527 ?device

    在 Cuttlefish 實例中啟用 Wi-Fi

    如果未啟用 Wi-Fi,部分 CTS 測試會失敗。如需在本地托管的所有 Cuttlefish 設備上啟用 Wi-Fi,請按照以下說明操作。

    從構建 Cuttlefish 所在樹的根目錄中,運行以下命令:

    for SERIAL in adb devices | grep -E '127.+device$ | cut -f1'; do adb -s ${SERIAL} install -r -g tools/tradefederation/core/res/apks/wifiutil/WifiUtil.apk adb -s ${SERIAL} shell su root svc wifi enable adb -s ${SERIAL} shell am instrument -e method "connectToNetwork" -e scan_ssid "false" -e ssid "VirtWifi" -w com.android.tradefed.utils.wifi/.WifiUtil done

    運行 CTS 穩定版子集

    并非在 Cuttlefish 上進行的所有 CTS 都會通過,因為某些測試更多是針對實體設備量身定制的。如需使用?cts-virtual-device-stable?測試計劃(用于跟蹤在虛擬平臺上運行穩定的最新功能)運行 CTS,請按照以下說明操作。

    從構建 Cuttlefish 所在樹的根目錄中,運行以下命令:

    source build/envsetup.sh lunch aosp_cf_x86_64_phone-userdebug cts-tradefed run cts-virtual-device-stable --no-enable-parameterized-modules --max-testcase-run-count 2 --retry-strategy RETRY_ANY_FAILURE --reboot-at-last-retry --shard-count 8

    預計運行該測試需要 20 到 25 分鐘時間,并顯示類似如下的總結:

    =============== Summary =============== Total Run time: 22m 8s 184/184 modules completed Total Tests ? ? ? : 92483 PASSED ? ? ? ? ? ?: 92363 FAILED ? ? ? ? ? ?: 0 IGNORED ? ? ? ? ? : 71 ASSUMPTION_FAILURE: 49 Shard 0 used: [127.0.0.1:6522] Shard 1 used: [127.0.0.1:6525] Shard 2 used: [127.0.0.1:6524] Shard 3 used: [127.0.0.1:6521] Shard 4 used: [127.0.0.1:6520] Shard 5 used: [127.0.0.1:6527] Shard 6 used: [127.0.0.1:6526] Shard 7 used: [127.0.0.1:6523] ============== End of Results ==============

    清理

    測試完成后,請停止虛擬設備。

    從構建 Cuttlefish 所在樹的根目錄中,運行以下命令:

    source build/envsetup.sh lunch aosp_cf_x86_64_phone-userdebug stop_cvd

    總結

    以上是生活随笔為你收集整理的使用 Cuttlefish 虚拟 Android 设备的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。