Compila y ejecuta tu app

Para ver el aspecto y el comportamiento de tu app en un dispositivo, debes compilarla y ejecutarla. Android Studio configura proyectos para que puedas implementar tu app en un dispositivo virtual o físico con unos pocos clics.

Esta descripción general se centra en cómo usar Android Studio para compilar y ejecutar tu app para pruebas y depuración. Si deseas obtener información para usar Android Studio al compilar tu app antes de lanzarla para los usuarios, consulta Cómo compilar tu app para el lanzamiento a los usuarios. Puedes obtener información más detallada para administrar y personalizar tu compilación, con o sin Android Studio, en Cómo configurar tu compilación.

Compilación y ejecución básicas

Para compilar y ejecutar la app, sigue estos pasos:

  1. En la barra de herramientas, selecciona la app en el menú de configuración de ejecución.
  2. En el menú del dispositivo de destino, selecciona el dispositivo en el que deseas ejecutar la app.

    Menú del dispositivo de destino

    Si no tienes ningún dispositivo configurado, debes crear un dispositivo virtual de Android para usar Android Emulator o conectar un dispositivo físico.

  3. Haz clic en Run .

Android Studio te advertirá si intentas iniciar el proyecto en un dispositivo que tiene un error o una advertencia asociados. La iconografía y los cambios estilísticos diferencian entre errores (selecciones de dispositivos que dan como resultado una configuración dañada) y advertencias (selecciones del dispositivo que pueden dar como resultado un comportamiento inesperado, pero aún se pueden ejecutar).

Cómo supervisar el proceso de compilación

Para ver los detalles del proceso de compilación, selecciona View > Tool Windows > Build o haz clic en Build , en la barra de ventanas de herramientas. En la ventana de herramientas Build, se muestran las tareas que ejecuta Gradle para compilar tu app, como se muestra en la Figura 1.

Figura 1. La ventana de herramientas Build en Android Studio.
  1. Pestaña Sync: Muestra las tareas que ejecuta Gradle para sincronizarse con los archivos del proyecto. De manera similar a la pestaña Build Output, si encuentras un error de sincronización, selecciona elementos del árbol para obtener más información al respecto. También se muestra un resumen del impacto en descargas para determinar si las descargas de dependencias afectan la compilación de manera negativa.
  2. Pestaña Build Output: Muestra las tareas que ejecuta Gradle en forma de árbol, donde cada nodo representa una fase de compilación o un grupo de dependencias de tareas. Si recibes errores de compilación o de tiempo de compilación, inspecciona el árbol y selecciona un elemento para leer el resultado del error, como se muestra en la Figura 2.
    Figura 2. Inspecciona la pestaña Build Output para ver los mensajes de error.
  3. Pestaña Build Analyzer: Proporciona información del análisis de rendimiento de la compilación sobre tu compilación. Consulta Cómo solucionar problemas de rendimiento de compilación con Build Analyzer para obtener más información.
  4. Restart: Vuelve a realizar la última acción de compilación. Si lo último que ejecutaste fue Build > Make Selected Module, se compilará el módulo actual. Si lo último que ejecutaste fue Build > Make Project, se generarán archivos de compilación intermedios para todos los módulos de tu proyecto.
  5. Filters: Filtra las advertencias, las tareas o ambas acciones que se completaron correctamente. Esto puede facilitar la búsqueda de problemas en el resultado.

Si las variantes de compilación usan variantes de productos, Gradle también invocará tareas para compilar esas variantes de producto. Para ver la lista de todas las tareas de compilación disponibles, haz clic en View > Tool Windows > Gradle o haz clic en Gradle , en la barra de ventanas de herramientas.

Si se produce un error durante el proceso de compilación, Gradle podría recomendar algunas opciones de la línea de comandos que te ayuden a resolver el problema, como --stacktrace o --debug. Para usar opciones de la línea de comandos con el proceso de compilación, haz lo siguiente:

  1. Abre el diálogo Settings o Preferences:
    • En Windows o Linux, selecciona File > Settings en la barra de menú.
    • En macOS, selecciona Android Studio > Preferences en la barra de menú.
  2. Navega hasta Build, Execution, Deployment > Compiler.
  3. En el campo de texto junto a Command-line Options, ingresa las opciones de la línea de comandos.
  4. Haz clic en OK para guardar los cambios y salir.

Gradle aplicará estas opciones de la línea de comandos la próxima vez que intentes compilar la app.

Funciones avanzadas de compilación y ejecución

La forma predeterminada de compilar y ejecutar tu app en Android Studio debería ser suficiente para probar una app simple. Sin embargo, puedes usar estas funciones de compilación y ejecución para casos de uso más avanzados:

  • Para implementar la app en modo de depuración, haz clic en Debug . La ejecución de la app en el modo de depuración te permite configurar puntos de interrupción en el código, examinar variables y evaluar expresiones en el tiempo de ejecución, así como ejecutar herramientas de depuración. Para obtener más información, consulta Cómo depurar tu app.

  • Si tienes una app más grande y compleja, usa Apply Changes en lugar de hacer clic en Run . Esto ahorra tiempo, ya que evitas reiniciar la app cada vez que desees implementar un cambio. Para obtener más información sobre Apply Changes, consulta la sección Cómo implementar de forma incremental con Apply Changes.

  • Si usas Jetpack Compose, Ediciones en vivo es una función experimental que te permite actualizar elementos componibles en tiempo real sin volver a hacer clic en Run . Esto te permite enfocarte en escribir código de IU con una interrupción mínima. Para obtener más información, consulta la sección Ediciones en vivo (experimental).

  • Si tienes una app con múltiples variantes de compilación o versiones, puedes elegir qué variante de compilación implementar mediante la ventana de herramientas de variantes de compilación. Aprende sobre la ejecución de una variante de compilación específica en la sección Cómo cambiar la variante de compilación.

  • Si quieres ajustar las opciones de instalación, inicio y prueba de la app, puedes cambiar la configuración de ejecución y depuración. Para obtener más información sobre cómo crear configuraciones personalizadas de ejecución y depuración, consulta la sección Cómo crear configuraciones de ejecución y depuración.

  • Te recomendamos usar Android Studio para tus necesidades de desarrollo, pero también puedes implementar tu app en un dispositivo virtual o físico desde la línea de comandos. Para obtener más información, consulta Cómo compilar tu app desde la línea de comandos.

Cómo implementar de forma incremental con Apply Changes

En Android Studio 3.5 y versiones posteriores, Apply Changes te permite enviar cambios de código y recursos a la app en ejecución sin reiniciarla y, en algunos casos, sin reiniciar la actividad actual. Esta flexibilidad te permite controlar qué partes de tu app se reinician cuando quieres implementar y probar pequeños cambios incrementales y, al mismo tiempo, preservar el estado actual del dispositivo.

Apply Changes utiliza funciones de la implementación de JVMTI para Android que son compatibles con dispositivos que ejecutan Android 8.0 (nivel de API 26) o versiones posteriores. Para obtener más información sobre el funcionamiento de Apply Changes, consulta el artículo Android Studio Project Marble: Apply Changes (en inglés).

Requisitos

La acción de Apply Changes solo está disponible si se cumplen las siguientes condiciones:

  • Si compilas un APK de la app mediante una variante de compilación de depuración.
  • Si implementas la app en un emulador o un dispositivo de destino que ejecuta Android 8.0 (nivel de API 26) o versiones posteriores.

Cómo usar Apply Changes

Utiliza las siguientes opciones cuando desees implementar los cambios en un dispositivo compatible:

Apply Changes and Restart Activity Ícono de Apply Changes and Restart Activity: Intenta aplicar los cambios de recursos y de código reiniciando la actividad, pero sin reiniciar la app. Por lo general, puedes usar esta opción cuando modificas un código en el cuerpo de un método o cuando modificas un recurso existente.

También puedes realizar esta acción presionando Ctrl + Alt + F10 (Ctrl + Cmd + Mayúsculas + R en macOS).

Apply Change Changes Ícono de Apply Code Changes: Intenta aplicar solo los cambios de código sin reiniciar nada. Por lo general, puedes usar esta opción cuando modificas el código en el cuerpo de un método, pero no has modificado ningún recurso. Si modificaste el código y los recursos, entonces usa Apply Changes and Restart Activity.

Para realizar esta acción, también puedes presionar Ctrl + F10 (Ctrl + Cmd + R en macOS).

Run : Implementa todos los cambios y reinicia la app. Usa esta opción cuando los cambios que hayas realizado no se puedan aplicar mediante ninguna de las opciones de Apply Changes. Para obtener más información sobre los tipos de cambios que requieren reiniciar la app, consulta Limitaciones de Apply Changes.

Cómo habilitar la ejecución de resguardo para Apply Changes

Cuando haces clic en Apply Changes and Restart Activity o Apply Code Changes, Android Studio compila un nuevo APK y determina si se pueden aplicar los cambios. Cuando no se pueden aplicar los cambios debido a que se produciría un error en Apply Changes, Android Studio te solicita que vuelvas a ejecutar Ícono Run la app.

Sin embargo, si no quieres recibir la solicitud cada vez que ocurra esto, puedes configurar Android Studio para que vuelva a ejecutar automáticamente la app cuando no se puedan aplicar los cambios. Para habilitar este comportamiento, haz lo siguiente:

  1. Abre el diálogo Settings o Preferences:

    • En Windows o Linux, selecciona File > Settings en la barra de menú.
    • En macOS, selecciona Android Studio > Preferences en la barra de menú.
  2. Ve a Build, Execution, Deployment > Deployment.

  3. Selecciona las casillas de verificación para habilitar el resguardo de ejecución automático para cualquiera de las acciones de Apply Changes.

  4. Haz clic en OK.

Cambios que dependen de la plataforma

Algunas funciones de Apply Changes dependen de versiones específicas de la plataforma de Android. Para aplicar estos tipos de cambios, tu app debe implementarse en un dispositivo que ejecute esa versión de Android (o una versión posterior). Por ejemplo, para agregar un método, se requiere Android 11 o una versión posterior.

Limitaciones de Apply Changes

Apply Changes está diseñado para acelerar el proceso de implementación de la app. Sin embargo, existen algunas limitaciones respecto de cuándo se puede usar.

Cambios de código que requieren reiniciar la app

Algunos cambios de código y recursos no se pueden aplicar hasta que se reinicie la app, incluidos los siguientes:

  • Agregar o quitar un campo
  • Quitar un método
  • Cambiar las firmas de métodos
  • Cambiar modificadores de métodos o clases
  • Cambiar la herencia de clase
  • Cambiar los valores de enumeraciones
  • Agregar o quitar un recurso
  • Cambiar el manifiesto de la app
  • Cambiar las bibliotecas nativas (archivos .so)
Bibliotecas y complementos

Algunas bibliotecas y complementos realizan cambios automáticamente en los archivos de manifiesto de la app o en los recursos a los que se hace referencia en el manifiesto. Estas actualizaciones automáticas pueden interferir en Apply Changes de las siguientes maneras:

  • Si una biblioteca o un complemento realiza cambios en el manifiesto de la app, no podrás usar Apply Changes. Debes reiniciar la app para ver los cambios.
  • Si una biblioteca o un complemento realiza cambios en los archivos de recursos de la app, no podrás usar la opción Apply Code Changes Ícono de Apply Code Changes. Debes usar Apply Changes and Restart Activity Ícono de Apply Changes and Restart Activity (o reiniciar la app) para ver los cambios.

Si deseas evitar estas limitaciones, inhabilita todas las actualizaciones automáticas para tus variantes de compilación de depuración.

Por ejemplo, Firebase Crashlytics actualiza los recursos de la app con un ID de compilación único durante cada compilación, lo que evita usar Apply Code Changes Ícono de Apply Code Changes y requiere que reinicies la actividad de la app para ver los cambios. Inhabilita este comportamiento para usar Apply Code Changes junto a Crashlytics con las compilaciones de depuración.

Código que hace referencia directamente al contenido en un APK instalado

Si el código hace referencia directamente al contenido del APK de la app instalado en el dispositivo, ese código puede causar fallas o comportamientos incorrectos después de hacer clic en Apply Code Changes Ícono de Apply Code Changes. Ese comportamiento se produce porque al hacer clic en Apply Code Changes, se reemplaza el APK subyacente del dispositivo durante la instalación. En esos casos, puedes hacer clic en Apply Changes and Restart Activity Ícono de Apply Changes and Restart Activity o en Run Ícono Run.

Si experimentas algún otro problema al usar Apply Changes, informa un error.

Ediciones en vivo

Ediciones en vivo es una función experimental de Android Studio que te permite actualizar elementos componibles en emuladores y dispositivos físicos, en tiempo real. Esta funcionalidad minimiza los cambios de contexto entre la escritura y la compilación tu app, lo que te permite enfocarte en escribir código más tiempo sin interrupciones.

Más información sobre Ediciones en vivo

Cómo cambiar la variante de compilación

De forma predeterminada, Android Studio compila la versión de depuración de la app, que está diseñada solo para uso durante el desarrollo, cuando haces clic en Run Botón de la IU.

Para cambiar la variante de compilación que usa Android Studio, realiza una de las siguientes acciones:

  • Selecciona Build > Select Build Variant en el menú.
  • Selecciona View > Tool Windows > Build Variants en el menú.
  • Haz clic en la pestaña Build Variants en la barra de ventanas de herramientas.

Para los proyectos sin código nativo/C++, el panel Build Variants tiene dos columnas: Module y Active Build Variant. El valor de Active Build Variant del módulo determina la variante de compilación que el IDE implementa en el dispositivo y que se puede ver en el editor.

Figura 9: El panel Build Variants especifica dos columnas para los proyectos que no tienen código nativo/C++.

Para alternar entre variantes, haz clic en la celda Active Build Variant de un módulo y elige la variante que desees en la lista.

Para los proyectos con código nativo/C++, el panel Build Variants tiene tres columnas:

  • Module (Módulo)
  • Active Build Variant (Variante de compilación activa)
  • Active ABI (ABI activa)

El valor Active Build Variant del módulo determina la variante de compilación que el IDE implementa en el dispositivo y que se puede ver en el editor. En el caso de los módulos nativos, el valor Active ABI determina la ABI que usa el editor, pero no afecta lo que se implementa.

Figura 10: El panel Build Variants agrega la columna Active ABI para los proyectos con código nativo/C++.

Para cambiar la variante de compilación o ABI, haz clic en la celda de la columna Active Build Variant o Active ABI, y elige la variante o la ABI que desees de la lista. Después de cambiar la selección, el IDE sincronizará el proyecto automáticamente. Si modificas cualquiera de las columnas de una app o un módulo de biblioteca, se aplicará el cambio a todas las filas dependientes.

De forma predeterminada, los proyectos nuevos se configuran con dos variantes de compilación: una de actualización y otra de depuración. Debes compilar la variante de actualización a fin de preparar la app para la versión pública. Para definir otras variaciones de la app con diferentes funciones o requisitos de dispositivo, puedes definir variantes de compilación adicionales.

Conflictos en el diálogo de variantes de compilación de Android Studio

Es posible que veas mensajes de error en el diálogo Build Variants de Android Studio que indican conflictos entre variantes de compilación, como las siguientes:

Ventana de variante de compilación que muestra errores de conflicto de variantes

Este error no indica un problema de compilación con Gradle. Indica que el IDE de Android Studio no puede resolver símbolos entre las variantes de los módulos seleccionados.

Por ejemplo, si tienes un módulo M1 que depende de la variante v1 del módulo M2, pero M2 tiene la variante v2 seleccionada en el IDE, tienes símbolos sin resolver en el IDE. Supongamos que M1 depende de una clase que solo está disponible en v1. Cuando se selecciona v2, el IDE no conoce esa clase. Por lo tanto, no resuelve el nombre de la clase y muestra errores en el código del módulo M1.

Estos mensajes de error aparecen porque el IDE no puede cargar un código para múltiples variantes a la vez. Sin embargo, en términos de la compilación de tu app, la variante seleccionada en este diálogo no tendrá efecto porque Gradle compila tu app con el código fuente especificado en tus filtros predeterminados de compilación de Gradle, no en función de lo que se carga en la actualidad en el IDE.

Cómo cambiar la configuración de ejecución o depuración

Cuando ejecutas la app por primera vez, Android Studio usa una configuración de ejecución predeterminada. La configuración de ejecución especifica si se debe implementar la app desde un APK o desde un Android App Bundle, y también especifica el módulo para ejecutar, el paquete para implementar, la actividad para iniciar, el dispositivo de destino, la configuración del emulador, las opciones de logcat y otros elementos.

La configuración de ejecución y depuración predeterminada compila un APK, lanza la actividad del proyecto predeterminado y usa el cuadro de diálogo Select Deployment Target para seleccionar dispositivos de destino. Si la configuración predeterminada no se adapta al proyecto o al módulo, puedes personalizar la configuración de ejecución y depuración, o bien crear una nueva, en los niveles del proyecto, de la configuración predeterminada y del módulo.

Para editar una configuración de ejecución y depuración, selecciona Run > Edit configurations. Para obtener más información, consulta Cómo crear y editar configuraciones de ejecución y depuración.