Android Emulator 疑難排解

本文描述設定及執行 Android Emulator 時所發生的最常見警告訊息和問題。 此外,還會描述這些錯誤的解決方式,以及可協助您診斷模擬器問題的各種疑難排解祕訣。

Windows 上的部署問題

當您部署應用程式時,模擬器可能會顯示一些錯誤訊息。 以下說明最常見的錯誤及解決方式。

部署錯誤

如果您看到有關無法在模擬器上安裝 APK 或無法執行 Android Debug Bridge (adb) 的錯誤,請確認 Android SDK 可連線至您的模擬器。 若要確認模擬器連線,請使用下列步驟:

  1. Android Device Manager啟動模擬器 (選取您的虛擬裝置並按一下 [啟動])。

  2. 開啟命令提示字元,然後移至安裝 adb 的資料夾。 如果 Android SDK 安裝在其預設位置, 則 adb 位於 C:\Program Files (x86)\Android\android-sdk\platform-tools\adb.exe;如果沒有,請修改此路徑作為計算機上的 Android SDK 位置。

  3. 輸入以下命令:

    adb devices
    
  4. 如果可從 Android SDK 存取模擬器,模擬器應該會顯示在連接的裝置清單中。 例如:

    List of devices attached
    emulator-5554   device
    
  5. 如果模擬器未出現在此清單中,請啟動 [Android SDK 管理員]、套用所有更新,然後重新嘗試啟動模擬器。

MMIO 存取錯誤

若顯示 [發生 MMIO 存取錯誤] 訊息,請重新啟動模擬器。

遺漏 Google Play Services

若您在模擬器中執行的虛擬裝置未安裝 Google Play Services 或 Google Play 商店,則這種情況通常是由於建立的虛擬裝置未包含這些套件所造成。 當您建立虛擬裝置時 (請參閱使用 Android Device Manager 管理虛擬裝置),請務必選取下列其中一或兩個選項:

  • Google API – 在虛擬設備中包含Google Play服務。
  • Google Play 商店 – 在虛擬設備中包含 Google Play 商店。

例如,此虛擬裝置將會包含 Google Play Services 和 Google Play 商店:

Example AVD with Google Play Services and Google Play Store enabled

注意

Google Play 商店影像僅適用於某些基底裝置類型,例如 Pixel、Pixel 2、Nexus 5 和 Nexus 5X。

效能問題

效能問題通常是由於下列其中一個問題所造成:

  • 模擬器正在執行但未使用硬體加速。

  • 在模擬器中執行的虛擬裝置未使用 x86 型系統映像。

下列各節會更詳細地說明這些案例。

未啟用硬體加速

如果未啟用硬體加速,從 Device Manager 啟動虛擬裝置將會產生包含錯誤訊息的對話方塊,指出未正確設定 Windows Hypervisor 平台 (WHPX):

Example Device Manager warning

如果未顯示此錯誤訊息,請參閱下面的硬體加速問題,以了解您可以採取哪些步驟來確認及啟用硬體加速。

已啟用加速但模擬器執行速度太慢

此問題的常見原因是未在您的虛擬裝置 (AVD) 中使用 x86 型映像。 當您建立虛擬裝置時 (請參閱使用 Android Device Manager 管理虛擬裝置),請務必選取 x86 型系統映像:

Selecting an x86 system image for a virtual device

硬體加速問題

無論您使用 Hyper-V 或 HAXM 進行硬體加速,都可能會在電腦上遇到設定問題或與其他軟體衝突。 您可以開啟命令提示字元並輸入下列命令,來確認是否已啟用硬體加速 (以及模擬器使用哪種加速方法):

"C:\Program Files (x86)\Android\android-sdk\emulator\emulator-check.exe" accel

此命令假設Android SDK 安裝在 C:\Program Files (x86)\Android\android-sdk 的預設位置;如果不是,請修改電腦上 Android SDK 位置的上述路徑。

硬體加速無法使用

如果 Hyper-V 可供使用,則會從 emulator-check.exe accel 命令傳回類似下列範例的訊息:

HAXM is not installed, but Windows Hypervisor Platform is available.

如果 HAXM 可供使用,則會傳回類似下列範例的訊息:

HAXM version 6.2.1 (4) is installed and usable.

如果硬體加速無法使用,則會顯示類似下列範例的訊息 (如果模擬器找不到 Hyper-V,則會尋找 HAXM):

HAXM is not installed on this machine

如果硬體加速無法使用,請參閱使用 Hyper-V 加速,以了解如何在您的電腦上啟用硬體加速。

不正確的 BIOS 設定

如果未正確設定 BIOS 支援硬體加速,當您執行 emulator-check.exe accel 命令時,則會顯示類似下列範例的訊息:

VT feature disabled in BIOS/UEFI

若要修正此問題,請讓您的電腦重新開機進入 BIOS 並啟用下列選項:

  • 虛擬化技術 (視主機板製造商而定,可能會有不同的標籤)。
  • 硬體強制執行的資料執行防止。

如果已啟用硬體加速並正確設定 BIOS,模擬器應該會使用硬體加速順利執行。 不過,由於 Hyper-V 和 HAXM 的特定問題,可能仍會造成問題,如下所述。

Hyper-V 問題

在某些情況下,在 [開啟或關閉 Windows 功能] 對話方塊中同時啟用 Hyper-VWindows Hypervisor 平台可能會無法適當地啟用 Hyper-V。 若要確認是否已啟用 Hyper-V,請使用下列步驟:

  1. 在 Windows 搜尋方塊中,輸入 powershell

  2. 以滑鼠右鍵按一下搜尋結果中的 Windows PowerShell,然後選取 [以系統管理員身分執行]

  3. 在 PowerShell 主控台中,輸入下列命令:

    Get-WindowsOptionalFeature -FeatureName Microsoft-Hyper-V-All -Online
    

    如果未啟用 Hyper-V,則會顯示類似下列範例的訊息,指出 Hyper-V 的狀態為 [已停用]

    FeatureName      : Microsoft-Hyper-V-All
    DisplayName      : Hyper-V
    Description      : Provides services and management tools for creating and running virtual machines and their resources.
    RestartRequired  : Possible
    State            : Disabled
    CustomProperties :
    
  4. 在 PowerShell 主控台中,輸入下列命令:

    Get-WindowsOptionalFeature -FeatureName HypervisorPlatform -Online
    

    如果未啟用 Hypervisor,則會顯示類似下列範例的訊息,指出 Hypervisor 平台的狀態為 [已停用]

    FeatureName      : HypervisorPlatform
    DisplayName      : Windows Hypervisor Platform
    Description      : Enables virtualization software to run on the Windows hypervisor
    RestartRequired  : Possible
    State            : Disabled
    CustomProperties :
    

如果未啟用 Hyper-V 及/或 Hypervisor 平台,請使用下列 PowerShell 命令予以啟用:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
Enable-WindowsOptionalFeature -Online -FeatureName HypervisorPlatform -All

這些命令完成之後,請重新開機。

如需啟用 Hyper-V 的詳細資訊 (包括使用部署映像服務與管理工具啟用 Hyper-V 的技術),請參閱安裝 Hyper-V

HAXM 問題

HAXM 問題通常是與其他虛擬化技術發生衝突、設定不正確或 HAXM 驅動程式過期所導致的結果。

HAXM 處理序未執行

如果已安裝 HAXM,您可以開啟命令提示字元並輸入下列命令,來確認 HAXM 處理序是否正在執行:

sc query intelhaxm

如果 HAXM 處理序正在執行,您應該會看到類似下列結果的輸出:

SERVICE_NAME: intelhaxm
    TYPE               : 1  KERNEL_DRIVER
    STATE              : 4  RUNNING
                            (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
    WIN32_EXIT_CODE    : 0  (0x0)
    SERVICE_EXIT_CODE  : 0  (0x0)
    CHECKPOINT         : 0x0
    WAIT_HINT          : 0x0

如果 STATE 不是設定為 RUNNING,請參閱 How to Use the Intel Hardware Accelerated Execution Manager (如何使用 Intel Hardware Accelerated Execution Manager) 來解決問題。

HAXM 虛擬化衝突

HAXM 可能與其他使用虛擬化的技術發生衝突,例如 Hyper-V、Windows Device Guard 及某些防毒軟體:

  • Hyper-V – 如果您在 Windows 10 2018 年 4 月更新之前使用 Windows 版本(組建 1803)和啟用 Hyper-V,請遵循停用 Hyper-V 中的步驟啟用 HAXM。

  • Device Guard – Device Guard 和 Credential Guard 可防止 Windows 計算機上停用 Hyper-V。 若要停用 Device Guard 和 Credential Guard,請參閱停用 Device Guard

  • 防病毒軟體 – 如果您正在執行使用硬體輔助虛擬化的防病毒軟體(例如 Avast),請停用或卸載此軟體、重新啟動,然後重試 Android 模擬器。

不正確的 BIOS 設定

如果您在 Windows PC 上使用 HAXM,除非在 BIOS 中啟用虛擬化技術 (Intel VT-x),否則 HAXM 將無法運作。 如果已停用 VT-x,則當您嘗試啟動 Android Emulator 時,會收到類似下列錯誤:

此電腦符合 HAXM 的要求,但未開啟 Intel 虛擬化技術 (VT-x)。

若要修正此錯誤,請讓電腦開機進入 BIOS,同時啟用 VT-x 和 SLAT (第二層位址轉譯),然後讓電腦重新啟動回到 Windows。

停用 Hyper-V

如果您使用的是 Windows 10 2018 4 月更新 (1803 組建) 以前的 Windows 版本,而且啟用了 HYPER-V,您必須停用 HYPER-V 並重新啟動電腦,才能安裝及使用 HAXM。 如果您使用 Windows 10 2018 4 月更新 (1803 組建) 或更新版本,Android Emulator 27.2.7 版或更新版本可以使用 HYPER-V (不是 HAXM) 為硬體加速,因此沒有必要停用 HYPER-V。

您可以遵循下列步驟從控制台停用 Hyper-V:

  1. 在 Windows 搜尋方塊中輸入 Windows 功能,然後在搜尋結果中選取 [開啟或關閉 Windows 功能]

  2. 取消核取 [Hyper-V]

    Disabling Hyper-V in the Windows Features dialog

  3. 重新啟動電腦。

或者,您可以使用下列 PowerShell 命令來停用 Hyper-V Hypervisor:

Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Hypervisor

Intel HAXM 和 Microsoft Hyper-V 不可同時啟動。 不幸的是,不重新啟動電腦就沒有辦法在 Hyper-V 和 HAXM 之間進行切換。

如果已啟用 Device Guard 和 Credential Guard,在某些情況下使用上述步驟將無法成功停用 Hyper-V。 如果您無法停用 Hyper-V (或是在停用後仍然無法安裝 HAXM),請使用下一節的步驟來停用 Device Guard 和 Credential Guard。

停用 Device Guard

Device Guard 和 Credential Guard 可能會防止在 Windows 電腦上停用 Hyper-V。 此情況通常會發生在已加入網域且由組織進行設定和控制的電腦上。 在 Windows 10 上,使用下列步驟來查看 Device Guard 是否正在執行:

  1. 在 Windows 搜尋方塊中輸入系統資訊,然後在搜尋結果中選取 [系統資訊]

  2. 在 [系統摘要] 中,查看 [Device Guard 虛擬化型安全性] 是否存在且處於 [執行中] 狀態:

    Device Guard is present and running

如果已啟用 Device Guard,請使用下列步驟來停用它:

  1. 確認 [Hyper-V] 已停用 (位於 [開啟或關閉 Windows 功能] 下方),如上一節所述。

  2. 在 Windows 的搜尋方塊中,輸入 gpedit.msc,然後選取 [編輯群組原則] 搜尋結果。 這些步驟會啟動 [本機群組原則編輯器]

  3. 在 [本地組原則編輯器] 中,流覽至 [計算機設定>] 管理員 原則範本>系統>裝置防護

    Device Guard in Local Group Policy Editor

  4. 將 [開啟虛擬化型安全性] 變更為 [已停用] (如上所示),然後結束 [本機群組原則編輯器]

  5. 在 Windows 搜尋方塊中,輸入 cmd。 當 [命令提示字元] 在搜尋結果中出現時,以滑鼠右鍵按一下 [命令提示字元],然後選取 [以系統管理員身分執行]

  6. 複製下列命令,並將之貼入命令提示字元視窗 (如果磁碟機 Z: 正在使用中,請改為挑選未使用的磁碟機代號):

    mountvol Z: /s
    copy %WINDIR%\System32\SecConfig.efi Z:\EFI\Microsoft\Boot\SecConfig.efi /Y
    bcdedit /create {0cb3b571-2f2e-4343-a879-d86a476d7215} /d "DebugTool" /application osloader
    bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} path "\EFI\Microsoft\Boot\SecConfig.efi"
    bcdedit /set {bootmgr} bootsequence {0cb3b571-2f2e-4343-a879-d86a476d7215}
    bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} loadoptions DISABLE-LSA-ISO,DISABLE-VBS
    bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} device partition=Z:
    mountvol Z: /d
    
  7. Restart your computer. 在開機畫面上,您應該會看到類似下列訊息的提示:

    Do you want to disable Credential Guard? \(是否要停用 Credential Guard?\)

    出現提示時,請按下指定的按鍵來停用 Credential Guard。

  8. 重新啟動電腦之後,再次檢查以確定 Hyper-V 已停用 (如先前步驟中所述)。

如果 Hyper-V 仍未停用,您已加入網域之電腦的原則可能正在阻止您停用 Device Guard 或 Credential Guard。 在此情況下,您可以要求網域管理員給予特例,讓您能夠選擇不使用 Credential Guard。 或者,如果您必須使用 HAXM,您可以使用未加入網域的電腦。

其他疑難排解祕訣

下列建議在診斷 Android Emulator 問題方面通常很有幫助。

從命令列啟動模擬器

如果模擬器並未執行,您可以從命令列將它啟動 (而不是從 Visual Studio 中) 來檢視其輸出。 一般而言,Android Emulator AVD 映像會儲存在下列位置 (請以您的 Windows 使用者名稱取代 username):

C:\Users\username\.android\avd

您可以傳入 AVD 的資料夾名稱來使用此位置的 AVD 映像啟動模擬器。 例如,此命令會啟動名為 Pixel_API_27 的 AVD:

"C:\Program Files (x86)\Android\android-sdk\emulator\emulator.exe" -partition-size 512 -no-boot-anim -verbose -feature WindowsHypervisorPlatform -avd Pixel_API_27 -prop monodroid.avdname=Pixel_API_27

此範例假設 Android SDK 安裝在 C:\Program Files (x86)\Android\android-sdk 的預設位置;如果不是,請修改計算機上 Android SDK 位置的上述路徑。

當您執行此命令時,它會在模擬器啟動時產生多行輸出。 具體而言,如果硬體加速已啟用並正常運作 (在此範例中使用 HAXM 進行硬體加速),則會列印類似下列範例的程式碼行:

emulator: CPU Acceleration: working
emulator: CPU Acceleration status: HAXM version 6.2.1 (4) is installed and usable.

檢視 Device Manager 記錄

通常,您可以檢視 Device Manager 記錄來診斷模擬器問題。 這些記錄會寫入下列位置:

C:\Users\username\AppData\Local\Xamarin\Logs\16.0

您可以使用文字編輯器 (例如 [記事本]) 來檢視每個 DeviceManager.log 檔案。 下列範例記錄項目指出在電腦上找不到 HAXM:

Component Intel x86 Emulator Accelerator (HAXM installer) r6.2.1 [Extra: (Intel Corporation)] not present on the system

macOS 上的部署問題

當您部署應用程式時,模擬器可能會顯示一些錯誤訊息。 以下說明最常見的錯誤及解決方式。

部署錯誤

如果您看到有關無法在模擬器上安裝 APK 或無法執行 Android Debug Bridge (adb) 的錯誤,請確認 Android SDK 可連線至您的模擬器。 若要確認連線,請使用下列步驟:

  1. Android Device Manager啟動模擬器 (選取您的虛擬裝置並按一下 [啟動])。

  2. 開啟命令提示字元,然後移至安裝 adb 的資料夾。 如果 Android SDK 安裝在其預設位置,則 adb 會位於 ~/Library/Developer/Xamarin/android-sdk-macosx/platform-tools/adb;如果不是,請將此路徑修改為您電腦上的 Android SDK 位置。

  3. 輸入以下命令:

    adb devices
    
  4. 如果可從 Android SDK 存取模擬器,模擬器應該會顯示在連接的裝置清單中。 例如:

    List of devices attached
    emulator-5554   device
    
  5. 如果模擬器未出現在此清單中,請啟動 [Android SDK 管理員]、套用所有更新,然後重新嘗試啟動模擬器。

MMIO 存取錯誤

如果顯示 [發生 MMIO 存取錯誤],請重新啟動模擬器。

遺漏 Google Play Services

如果您在模擬器中執行的虛擬裝置未安裝 Google Play Services 或 Google Play 商店,這種情況通常是由於建立的虛擬裝置未包含這些套件所造成。 當您建立虛擬裝置時 (請參閱使用 Android Device Manager 管理虛擬裝置),請務必選取下列其中一或兩項:

  • Google API – 在虛擬設備中包含Google Play服務。
  • Google Play 商店 – 在虛擬設備中包含 Google Play 商店。

例如,此虛擬裝置將會包含 Google Play Services 和 Google Play 商店:

Example AVD with Google Play Services and Google Play Store enabled

注意

Google Play 商店影像僅適用於某些基底裝置類型,例如 Pixel、Pixel 2、Nexus 5 和 Nexus 5X。

效能問題

效能問題通常是由於下列其中一個問題所造成:

  • 模擬器正在執行但未使用硬體加速。

  • 在模擬器中執行的虛擬裝置未使用 x86 型系統映像。

下列各節會更詳細地說明這些案例。

未啟用硬體加速

如果未啟用硬體加速,當您將應用程式部署至 Android Emulator 時,則會快顯包含訊息的對話方塊,例如 [裝置會在未加速狀態下執行]。 如果您不確定電腦上是否已啟用硬體加速 (或您想要了解哪個技術提供加速),請參閱下面的硬體加速問題,以了解您可以採取哪些步驟來確認及啟用硬體加速。

已啟用加速但模擬器執行速度太慢

此問題的常見原因是未在虛擬裝置中使用 x86 型映像。 當您建立虛擬裝置時 (請參閱使用 Android Device Manager 管理虛擬裝置),請務必選取 x86 型系統映像:

Selecting an x86 system image for a virtual device

硬體加速問題

無論您使用 Hypervisor 架構或 HAXM 進行模擬器的硬體加速,都可能會遇到由於安裝問題或 macOS 版本已過期所造成的問題。 下列各節可協助您解決此問題。

Hypervisor 架構問題

如果您在新版 Mac 上使用 macOS 10.10 或更新版本,Android Emulator 會自動使用 Hypervisor 架構進行硬體加速。 不過,某些舊版 Mac 或執行 macOS 10.10 以前版本的 Mac 可能不會提供 Hypervisor 架構支援。

若要判斷您的 Mac 是否支援 Hypervisor 架構,請開啟終端機並輸入下列命令:

sysctl kern.hv_support

如果您的 Mac 支援 Hypervisor 架構,上述命令將會傳回下列結果:

kern.hv_support: 1

如果您的 Mac 上沒有 Hypervisor 架構可用,您可以遵循使用 HAXM 加速中的步驟執行,以改用 HAXM 進行加速。

HAXM 問題

如果 Android Emulator 未正確啟動,此問題通常是由於 HAXM 的相關問題所造成。 HAXM 問題通常是與其他虛擬化技術發生衝突、設定不正確或 HAXM 驅動程式過期所導致的結果。 請使用安裝 HAXM中所述的步驟,來嘗試重新安裝 HAXM 驅動程式。

其他疑難排解祕訣

下列建議在診斷 Android Emulator 問題方面通常很有幫助。

從命令列啟動模擬器

如果模擬器並未執行,您可以從命令列將它啟動 (而不是從 Visual Studio for Mac 中) 來檢視其輸出。 一般而言,Android Emulator AVD 映像會儲存在下列位置:

~/.android/avd

您可以傳入 AVD 的資料夾名稱來使用此位置的 AVD 映像啟動模擬器。 例如,此命令會啟動名為 Pixel_2_API_28 的 AVD:

~/Library/Developer/Xamarin/android-sdk-macosx/emulator/emulator -partition-size 512 -no-boot-anim -verbose -feature WindowsHypervisorPlatform -avd Pixel_2_API_28 -prop monodroid.avdname=Pixel_2_API_28

如果 Android SDK 安裝在其預設位置,則模擬器會位於 ~/Library/Developer/Xamarin/android-sdk-macosx/emulator 目錄;如果不是,請將此路徑修改為您電腦上的 Android SDK 位置。

當您執行此命令時,它會在模擬器啟動時產生多行輸出。 具體而言,如果硬體加速已啟用並正常運作 (在此範例中使用 Hypervisor 架構進行硬體加速),則會列印類似下列範例的程式碼行:

emulator: CPU Acceleration: working
emulator: CPU Acceleration status: Hypervisor.Framework OS X Version 10.13

命名意圖額外項目的問題

當您在Android執行設定中設定意圖額外專案時,僅支援 A-Z、a-z、'_'、'-' 和數位。 此外,所有索引鍵值都必須是唯一的。

檢視 Device Manager 記錄

通常,您可以檢視 Device Manager 記錄來診斷模擬器問題。 這些記錄會寫入下列位置:

~/Library/Logs/XamarinDeviceManager

您可以按兩下 Android Devices.log 檔案以在主控台應用程式中開啟它來檢視每個檔案。 下列範例記錄項目指出找不到 HAXM:

Component Intel x86 Emulator Accelerator (HAXM installer) r6.2.1 [Extra: (Intel Corporation)] not present on the system