Solución de problemas de Android Emulator

En este artículo se describen los mensajes de advertencia y los problemas más comunes que se producen al configurar y ejecutar Android Emulator. Además, se describen soluciones para resolver estos errores, así como algunas sugerencias para solucionar problemas que le ayudarán a diagnosticar problemas del emulador.

Problemas de implementación en Windows

El emulador puede mostrar algunos mensajes de error al implementar la aplicación. Aquí se explican los errores y las soluciones más comunes.

Errores de implementación

Si se ve un error al instalar el APK en el emulador o al ejecutar Android Debug Bridge (adb), compruebe que Android SDK se pueda conectar con el emulador. Para comprobar la conectividad del emulador, siga estos pasos:

  1. Inicie el emulador desde Android Device Manager (seleccione el dispositivo virtual y haga clic en Iniciar).

  2. Abra un símbolo del sistema y vaya a la carpeta donde está instalado adb. Si Android SDK está instalado en su ubicación predeterminada, adb se encuentra en C:Archivos de programa (x86)\Android\android-sdk\platform-tools\adb.exe; de lo contrario, modifica esta ruta de acceso para la ubicación de Android SDK en el equipo.

  3. Escriba el siguiente comando:

    adb devices
    
  4. Si el emulador es accesible desde Android SDK, el emulador debe aparecer en la lista de dispositivos conectados. Por ejemplo:

    List of devices attached
    emulator-5554   device
    
  5. Si el emulador no aparece en esta lista, inicie Android SDK Manager, aplique todas las actualizaciones e intente iniciar el emulador de nuevo.

Error de acceso MMIO

Si se muestra el mensaje Se ha producido un error de acceso MMIO, reinicie el emulador.

Ausencia de Google Play Services

Si el dispositivo virtual que se ejecuta en el emulador no tiene instalado Google Play Services o Google Play Store, esta condición suele deberse a la creación de un dispositivo virtual sin incluir estos paquetes. Cuando cree un dispositivo virtual (vea Administración de dispositivos virtuales con Android Device Manager), asegúrese de seleccionar una de las opciones siguientes, o las dos:

  • API de Google: incluye Google Play Services en el dispositivo virtual.
  • Google Play Store: incluye Google Play Store en el dispositivo virtual.

Por ejemplo, este dispositivo virtual incluirá Google Play Services y Google Play Store:

Example AVD with Google Play Services and Google Play Store enabled

Nota:

Las imágenes de Google Play Store solo están disponibles para algunos tipos de dispositivos base como Pixel, Pixel 2, Nexus 5 y Nexus 5X.

Problemas de rendimiento

Los problemas de rendimiento se suelen producir por uno de los problemas siguientes:

  • El emulador se ejecuta sin aceleración de hardware.

  • El dispositivo virtual que se ejecuta en el emulador no usa una imagen del sistema basado en x86.

En las secciones siguientes se tratan estos escenarios con más detalle.

La aceleración de hardware no está habilitada

Si la aceleración de hardware no está habilitada, el inicio de un dispositivo virtual desde Device Manager generará un cuadro de diálogo con un mensaje de error en el que se indica que Windows Hypervisor Platform (WHPX) no está correctamente configurado:

Example Device Manager warning

Si se muestra este mensaje de error, vea Problemas de aceleración de hardware a continuación para obtener los pasos que se pueden seguir para comprobar y habilitar la aceleración de hardware.

La aceleración está habilitada, pero el emulador se ejecuta con demasiada lentitud

Una causa común de este problema es que no se está usando una imagen basado en x86 en el dispositivo virtual (AVD). Cuando cree un dispositivo virtual (vea Administración de dispositivos virtuales con Android Device Manager), asegúrese de seleccionar una imagen del sistema basado en x86:

Selecting an x86 system image for a virtual device

Problemas de aceleración de hardware

Si usa Hyper-V o HAXM para la aceleración de hardware, es posible que experimente problemas o conflictos de configuración con otro software del equipo. Puede comprobar que la aceleración de hardware esté habilitada (y qué método de aceleración usa el emulador) si abre un símbolo del sistema y escribe el comando siguiente:

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

Este comando asume que Android SDK está instalado en la ubicación predeterminada de C:\Archivos de programa (x86)\Android\android-sdk; de lo contrario, modifique la ruta de acceso anterior para que sea la ubicación de Android SDK en el equipo.

La aceleración de hardware no está disponible

Si Hyper-V está disponible, el comando emulator-check.exe accel devolverá un mensaje similar al ejemplo siguiente:

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

Si HAXM está disponible, se devolverá un mensaje similar al ejemplo siguiente:

HAXM version 6.2.1 (4) is installed and usable.

Si la aceleración de hardware no está disponible, se mostrará un mensaje similar al ejemplo siguiente (el emulador busca HAXM si no puede encontrar Hyper-V):

HAXM is not installed on this machine

Si la aceleración de hardware no está disponible, vea Aceleración con Hyper-V para obtener información sobre cómo habilitar la aceleración de hardware en el equipo.

Configuración del BIOS incorrecta

Si el BIOS no se ha configurado correctamente para admitir la aceleración de hardware, se mostrará un mensaje similar al siguiente ejemplo al ejecutar el comando emulator-check.exe accel:

VT feature disabled in BIOS/UEFI

Para corregir este problema, reinicie en el BIOS del equipo y habilite las opciones siguientes:

  • Tecnología de virtualización (puede tener otra etiqueta según el fabricante de la placa base).
  • Prevención de ejecución de datos forzada mediante hardware.

Si la aceleración de hardware está habilitada y el BIOS está configurado correctamente, el emulador se debería ejecutar de forma correcta con aceleración de hardware. Pero pueden seguir surgiendo problemas debido a errores específicos de Hyper-V y HAXM, como se explica a continuación.

Problemas de Hyper-V

En algunos casos, habilitar tanto Hyper-V como Windows Hypervisor Platform en el cuadro de diálogo Activar o desactivar las características de Windows puede que no habilite Hyper-V correctamente. Para comprobar que Hyper-V está habilitado, siga estos pasos:

  1. En el cuadro de búsqueda de Windows, escriba powershell.

  2. Haga clic con el botón derecho en Windows PowerShell en los resultados de la búsqueda y seleccione Ejecutar como administrador.

  3. En la consola de PowerShell, escriba el comando siguiente:

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

    Si Hyper-V no está habilitado, se mostrará un mensaje similar al ejemplo siguiente para indicar que el estado de Hyper-V es Deshabilitado:

    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. En la consola de PowerShell, escriba el comando siguiente:

    Get-WindowsOptionalFeature -FeatureName HypervisorPlatform -Online
    

    Si Hypervisor no está habilitado, se mostrará un mensaje similar al ejemplo siguiente para indicar que el estado de HypervisorPlatform es Deshabilitado:

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

Si Hyper-V o HypervisorPlatform no están habilitados, use los comandos de PowerShell siguientes para habilitarlos:

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

Cuando se completen estos comandos, reinicie.

Para obtener más información sobre cómo habilitar Hyper-V (incluidas las técnicas para habilitar Hyper-V mediante la herramienta de Administración y mantenimiento de imágenes de implementación), vea Instalar Hyper-V.

Problemas de HAXM

Normalmente los problemas de HAXM son consecuencia de conflictos con otras tecnologías de virtualización, configuraciones incorrectas o un controlador HAXM que no está actualizado.

No se está ejecutando el proceso de HAXM

Si HAXM está instalado, puede comprobar que el proceso de HAXM se está ejecutando si abre un símbolo del sistema y escribe el comando siguiente:

sc query intelhaxm

Si el proceso de HAXM se está ejecutando, el resultado debería ser similar al siguiente:

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

Si STATE no está establecido en RUNNING, vea How to Use the Intel Hardware Accelerated Execution Manager (Cómo usar Intel Hardware Accelerated Execution Manager) para resolver el problema.

Conflictos de virtualización de HAXM

HAXM puede entrar en conflicto con otras tecnologías que usan la virtualización, como Hyper-V y Windows Device Guard, y cierto software antivirus:

  • Hyper-V: si usa una versión de Windows anterior a la actualización de abril de 2018 de Windows 10 (compilación 1803) e Hyper-V está habilitado, siga los pasos indicados en Deshabilitar Hyper-V para poder habilitar HAXM.

  • Device Guard: Device Guard y Credential Guard pueden impedir que se deshabilite Hyper-V en máquinas con Windows. Para deshabilitar Device Guard y Credential Guard, consulte Deshabilitación de Device Guard.

  • Software antivirus: si está ejecutando software antivirus que usa la virtualización asistida por hardware (por ejemplo, Avast), deshabilite o desinstale este software, reinicie el equipo e intente iniciar de nuevo Android Emulator.

Configuración del BIOS incorrecta

Si está usando HAXM en un equipo con Windows, HAXM no funcionará a menos que la tecnología de virtualización (Intel VT-x) esté habilitada en el BIOS. Si VT-x está deshabilitada, obtendrá un error similar al siguiente al intentar iniciar Android Emulator:

This computer meets the requirements for HAXM, but Intel Virtualization Technology (VT-x) is not turned on. (Este equipo cumple los requisitos de HAXM, pero Intel Virtualization Technology (VT-x) no está activada.)

Para corregir este error, arranque el equipo en el BIOS, habilite VT-x y SLAT (traducción de direcciones de segundo nivel) y, después, reinicie el equipo en Windows.

Deshabilitar Hyper-V

Si usa una versión de Windows anterior a la actualización de abril de 2018 de Windows 10 (compilación 1803) y Hyper-V está habilitado, debe deshabilitar Hyper-V y reiniciar el equipo para instalar y usar HAXM. Si usa la actualización de abril de 2018 de Windows 10 (compilación 1803) o una versión posterior, Android Emulator versión 27.2.7 o posterior puede usar Hyper-V en lugar de HAXM para la aceleración de hardware, por lo que no es necesario deshabilitar Hyper-V.

Puede deshabilitar Hyper-V desde el Panel de control mediante estos pasos:

  1. Escriba características de windows en el cuadro de búsqueda de Windows y seleccione Activar o desactivar las características de Windows en los resultados de búsqueda.

  2. Desactive Hyper-V:

    Disabling Hyper-V in the Windows Features dialog

  3. Reinicie el equipo.

Como alternativa, puede usar el comando de PowerShell siguiente para deshabilitar el hipervisor Hyper-V:

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

HAXM de Intel y Microsoft Hyper-V no pueden estar activos al mismo tiempo. Desafortunadamente, no existe ninguna manera de alternar entre Hyper-V y HAXM sin reiniciar el equipo.

En algunos casos, si Device Guard y Credential Guard están habilitados, con los pasos anteriores no se deshabilitará Hyper-V correctamente. Si no puede deshabilitar Hyper-V (o parece estar deshabilitado pero sigue habiendo errores en la instalación de HAXM), siga los pasos de la sección siguiente para deshabilitar Device Guard y Credential Guard.

Deshabilitación de Device Guard

Device Guard y Credential Guard pueden evitar que se deshabilite Hyper-V en equipos Windows. Esta situación suele ser un problema para los equipos unidos a un dominio que se configuran y se controlan mediante una organización propietaria. En Windows 10, siga estos pasos para comprobar si se está ejecutando Device Guard:

  1. Escriba información del sistema en el cuadro de búsqueda de Windows y seleccione Información del sistema en los resultados de la búsqueda.

  2. En Resumen del sistema, compruebe si está presente Seguridad basada en la virtualización de Device Guard y si su estado es En ejecución:

    Device Guard is present and running

Si Device Guard está habilitado, siga estos pasos para deshabilitarlo:

  1. Asegúrese de que Hyper-V esté deshabilitado (en Activar o desactivar las características de Windows) como se explica en la sección anterior.

  2. En el cuadro de búsqueda de Windows, escriba gpedit.msc y seleccione el resultado de búsqueda Editar directiva de grupo. Estos pasos inician el Editor de directivas de grupo local.

  3. En el Editor de directivas de grupo local, vaya a Configuración del equipo > Plantillas administrativas > Sistema > Device Guard:

    Device Guard in Local Group Policy Editor

  4. Cambie Activar la seguridad basada en la virtualización a Deshabilitado (como se ha indicado arriba) y salga del Editor de directivas de grupo local.

  5. En el cuadro de búsqueda de Windows, escriba cmd. Si aparece Símbolo del sistema en los resultados de búsqueda, haga clic con el botón derecho en Símbolo del sistema y seleccione Ejecutar como administrador.

  6. Copie y pegue los siguientes comandos en la ventana del símbolo del sistema (si la unidad Z: se está usando, seleccione una letra de unidad no usada en su lugar):

    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. Reinicie el equipo. En la pantalla de arranque, debería ver un mensaje similar al siguiente:

    ¿Quiere deshabilitar Credential Guard?

    Pulse la tecla indicada para deshabilitar Credential Guard como se pide.

  8. Una vez reiniciado el equipo, compruebe de nuevo que Hyper-V está deshabilitado (como se ha explicado en los pasos anteriores).

Si Hyper-V aún no está deshabilitado, es posible que las directivas del equipo unido a dominio eviten que se deshabiliten Device Guard o Credential Guard. En este caso, puede solicitar una exención al administrador del dominio que le permita no usar Credential Guard. Como alternativa, puede usar un equipo que no esté unido a un dominio si tiene que utilizar HAXM.

Otras sugerencias para la de solución de problemas

Las sugerencias siguientes suelen ser útiles para diagnosticar problemas de Android Emulator.

Inicio de Android Emulator desde la línea de comandos

Si el emulador no se está ejecutando, puede iniciarlo desde la línea de comandos (en lugar de desde dentro de Visual Studio) para ver su salida. Normalmente, las imágenes de AVD de Android Emulator se almacenan en la siguiente ubicación (reemplace nombre_de_usuario con el nombre de usuario de Windows):

C:\Users\nombreUsuario\.android\avd

Puede iniciar el emulador con una imagen de AVD desde esta ubicación si pasa el nombre de la carpeta del AVD. Por ejemplo, este comando inicia un AVD denominado Pixel_API_27:

"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

En este ejemplo se asume que Android SDK está instalado en la ubicación predeterminada de C:\Archivos de programa (x86)\Android\android-sdk; de lo contrario, modifique la ruta de acceso anterior para que sea la ubicación de Android SDK en el equipo.

Al ejecutar este comando, generará varias líneas de salida mientras se inicia el emulador. En concreto, se imprimirán líneas como las del ejemplo siguiente si la aceleración de hardware está habilitada y funciona correctamente (en este ejemplo, se usa HAXM para la aceleración de hardware):

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

Visualización de registros de Device Manager

A menudo, se pueden ver los registros de Device Manager para diagnosticar problemas del emulador. Estos registros se escriben en la ubicación siguiente:

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

Puede ver cada archivo DeviceManager.log con un editor de texto como Bloc de notas. En la entrada de registro de ejemplo siguiente se indica que no se encontró HAXM en el equipo:

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

Problemas de implementación en macOS

El emulador puede mostrar algunos mensajes de error al implementar la aplicación. A continuación se explican los errores y las soluciones más comunes.

Errores de implementación

Si se ve un error al instalar el APK en el emulador o al ejecutar Android Debug Bridge (adb), compruebe que Android SDK se pueda conectar con el emulador. Para comprobar la conectividad, siga estos pasos:

  1. Inicie el emulador desde Android Device Manager (seleccione el dispositivo virtual y haga clic en Iniciar).

  2. Abra un símbolo del sistema y vaya a la carpeta donde está instalado adb. Si Android SDK está instalado en su ubicación predeterminada, adb se encuentra en ~/Library/Developer/Xamarin/android-sdk-macosx/platform-tools/adb; de lo contrario, modifique esta ruta de acceso para la ubicación de Android SDK en el equipo.

  3. Escriba el siguiente comando:

    adb devices
    
  4. Si el emulador es accesible desde Android SDK, el emulador debe aparecer en la lista de dispositivos conectados. Por ejemplo:

    List of devices attached
    emulator-5554   device
    
  5. Si el emulador no aparece en esta lista, inicie Android SDK Manager, aplique todas las actualizaciones e intente iniciar el emulador de nuevo.

Error de acceso MMIO

Si se muestra Se ha producido un error de acceso MMIO, reinicie el emulador.

Ausencia de Google Play Services

Si el dispositivo virtual que se ejecuta en el emulador no tiene instalado Google Play Services o Google Play Store, esta condición suele deberse a la creación de un dispositivo virtual sin incluir estos paquetes. Cuando cree un dispositivo virtual (vea Administración de dispositivos virtuales con Android Device Manager), asegúrese de seleccionar una de las opciones siguientes, o las dos:

  • API de Google: incluye Google Play Services en el dispositivo virtual.
  • Google Play Store: incluye Google Play Store en el dispositivo virtual.

Por ejemplo, este dispositivo virtual incluirá Google Play Services y Google Play Store:

Example AVD with Google Play Services and Google Play Store enabled

Nota:

Las imágenes de Google Play Store solo están disponibles para algunos tipos de dispositivos base como Pixel, Pixel 2, Nexus 5 y Nexus 5X.

Problemas de rendimiento

Los problemas de rendimiento se suelen producir por uno de los problemas siguientes:

  • El emulador se ejecuta sin aceleración de hardware.

  • El dispositivo virtual que se ejecuta en el emulador no usa una imagen del sistema basado en x86.

En las secciones siguientes se tratan estos escenarios con más detalle.

La aceleración de hardware no está habilitada

Si la aceleración de hardware no está habilitada, es posible que aparezca un cuadro de diálogo con un mensaje como el dispositivo se ejecutará sin aceleración al implementar la aplicación en Android Emulator. Si no está seguro de si la aceleración de hardware está habilitada en el equipo (o le gustaría saber qué tecnología proporciona la aceleración), vea Problemas de aceleración de hardware a continuación para conocer los pasos que puede seguir para comprobar y habilitar la aceleración de hardware.

La aceleración está habilitada, pero el emulador se ejecuta con demasiada lentitud

Una causa común de este problema es que no se está usando una imagen basada en x86 en el dispositivo virtual. Cuando cree un dispositivo virtual (vea Administración de dispositivos virtuales con Android Device Manager), asegúrese de seleccionar una imagen del sistema basada en x86:

Selecting an x86 system image for a virtual device

Problemas de aceleración de hardware

Con independencia de que use Hypervisor Framework o HAXM para la aceleración de hardware del emulador, es posible que experimente problemas causados por problemas de instalación o una versión obsoleta de macOS. Las secciones siguientes pueden ayudarle a resolver este problema.

Problemas de Hypervisor Framework

Si usa macOS 10.10 o una versión posterior en un equipo Mac más reciente, Android Emulator usará automáticamente Hypervisor Framework para la aceleración de hardware. Pero es posible que algunos equipos Mac más antiguos o que ejecuten una versión de macOS anterior a 10.10 no proporcionen compatibilidad con Hypervisor Framework.

Para determinar si el equipo Mac es compatible con Hypervisor Framework, abra una ventana de Terminal y escriba el comando siguiente:

sysctl kern.hv_support

Si el equipo Mac es compatible con Hypervisor Framework, el comando anterior devolverá el resultado siguiente:

kern.hv_support: 1

Si Hypervisor Framework no está disponible en el equipo Mac, puede seguir los pasos descritos en Aceleración con HAXM para usar HAXM para la aceleración en su lugar.

Problemas de HAXM

Si Android Emulator no se inicia correctamente, esto suele deberse a problemas relacionados con HAXM. Normalmente los problemas de HAXM son consecuencia de conflictos con otras tecnologías de virtualización, configuraciones incorrectas o un controlador HAXM que no está actualizado. Intente volver a instalar el controlador HAXM mediante los pasos detallados en Instalación de HAXM.

Otras sugerencias para la de solución de problemas

Las sugerencias siguientes suelen ser útiles para diagnosticar problemas de Android Emulator.

Inicio de Android Emulator desde la línea de comandos

Si el emulador no se está ejecutando, puede iniciarlo desde la línea de comandos (en lugar de desde dentro de Visual Studio para Mac) para ver su salida. Normalmente, las imágenes de AVD de Android Emulator se almacenan en la ubicación siguiente:

~/.android/avd

Puede iniciar el emulador con una imagen de AVD desde esta ubicación si pasa el nombre de la carpeta del AVD. Por ejemplo, este comando inicia un AVD denominado Pixel_2_API_28:

~/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

Si Android SDK está instalado en su ubicación predeterminada, el emulador se encuentra en el directorio ~/Library/Developer/Xamarin/android-sdk-macosx/emulator; de lo contrario, modifique esta ruta de acceso para la ubicación de Android SDK en el equipo Mac.

Al ejecutar este comando, generará varias líneas de salida mientras se inicia el emulador. En concreto, se imprimirán líneas como las del ejemplo siguiente si la aceleración de hardware está habilitada y funciona correctamente (en este ejemplo, se usa Hypervisor Framework para la aceleración de hardware):

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

Problemas con los extras de intención de nomenclatura

Al establecer extras de intención en la configuración de ejecución de Android, solo se admiten A-Z, a-z, "_", "-" y números. Además, todos los valores de clave deben ser únicos.

Visualización de registros de Device Manager

A menudo, se pueden ver los registros de Device Manager para diagnosticar problemas del emulador. Estos registros se escriben en la ubicación siguiente:

~/Library/Logs/XamarinDeviceManager

Puede ver los archivos Android Devices.log si hace doble clic para abrirlos en la aplicación de consola. La entrada de registro de ejemplo siguiente indica que no se encontró HAXM:

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