Cómo compilar y ejecutar una app

Android Studio permite configurar proyectos nuevos para implementar en Android Emulator o en un dispositivo conectado con unos pocos clics. Una vez que se instala la app, Instant Run permite implementar cambios de código sin compilar un APK nuevo.

Para compilar y ejecutar la app, selecciona Run > Run en la barra de menú (o haz clic en Run en la barra de herramientas). Si es la primera vez que ejecutas la app, Android Studio te solicitará que selecciones un objetivo de implementación, como se muestra en la figura 1. Selecciona un dispositivo para instalar y ejecuta la app.

Figura 1: En el cuadro de diálogo Select Deployment Target, se muestran los dispositivos disponibles

Si en el cuadro de diálogo se muestra "No USB devices or running emulators detected", deberás configurar y conectar el dispositivo, o lanzar un emulador. Para ello, haz clic en un dispositivo de la lista Available Virtual Devices. Si no se muestran dispositivos virtuales en la lista, haz clic en Create New Virtual Device y sigue el asistente de configuración virtual de dispositivos (consulta Cómo crear y administrar dispositivos virtuales).

Para mostrar el cuadro de diálogo Select Deployment Target, anula la sección de Use same device for future launches o detén la app con Run > Stop app o Stop , y luego iníciala de nuevo.

Nota: También puedes implementar la app en modo de depuración; para ello, haz clic en Debug . La ejecución de tu 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.

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, 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 o 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 módulo, puedes personalizar la configuración de ejecución o depuración, o bien crear una nueva en el proyecto, predeterminada y en los niveles de módulo. Para editar una configuración de ejecución/depuración, selecciona Run > Edit Configurations. Para obtener más información, consulta Cómo crear y ejecutar configuraciones de ejecución o depuración.

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á destinada solo para uso durante el desarrollo, cuando haces clic en Run.

Para cambiar la variante de compilación que usa Android Studio, selecciona Build > Select Build Variant en la barra de menú (o haz clic en Build Variants en la barra de la ventana de herramientas) y, luego, selecciona una variante de compilación del menú desplegable. De manera predeterminada, se configuran proyectos nuevos con dos variantes de compilación: una de depuración y otra de actualización. Debes compilar la variante de actualización a fin de preparar la app para el lanzamiento público.

Para compilar otras variaciones de la app, cada una con funciones o requisitos de dispositivo diferentes, puedes definir variantes de compilación adicionales.

Cómo compilar el proyecto

El botón Run compila e implementa la app en un dispositivo. Sin embargo, a fin de compilar la app para compartirla y subirla a Google Play, deberás usar una de las opciones del menú Build para compilar partes del proyecto o el proyecto completo. Antes de seleccionar cualquiera de las opciones de compilación que se muestran en la tabla 1, asegúrate primero de seleccionar la variante de compilación que quieras usar.

Tabla 1: Opciones de compilación en el menú Build

Elemento de menú Descripción
Make Module Compila todos los archivos de origen en el módulo seleccionado que se modificaron desde la última compilación, así como todos los módulos de los que depende el módulo seleccionado de forma recursiva. La compilación incluye archivos fuente dependientes y las tareas de compilación asociadas. A fin de seleccionar el módulo para compilar, selecciona el nombre del módulo o uno de los archivos en la ventana Project. Este comando no genera un APK.
Make Project Crea todos los módulos.
Clean Project Borra todos los archivos de compilación intermedios o en caché.
Rebuild Project Ejecuta Clean Project para la variante de compilación seleccionada y genera un APK.
Build Bundle(s) / APK(s) > Build APK(s)

Crea un APK de todos los módulos del proyecto actual para la variante seleccionada. Cuando se completa la compilación, se muestra una notificación de confirmación, y se proporciona un vínculo al archivo del APK y un vínculo para analizarlo en el Analizador de APK.

Si la variante de compilación seleccionada es un tipo de compilación de depuración, se firma el APK con una clave de depuración y está listo para instalarse. Si seleccionaste una variante de actualización, de forma predeterminada, no se firmará el APK y deberás hacerlo manualmente. De forma alternativa, puedes seleccionar Build > Generate Signed Bundle / APK en la barra de menú.

Android Studio guarda los APK que compilas en project-name/module-name/build/outputs/apk/.

Build Bundle(s) / APK(s) > Build Bundle(s)

Compila un Android App Bundle de todos los módulos en el proyecto actual de la variante seleccionada. Cuando se completa la compilación, se muestra una notificación de confirmación y se proporciona un vínculo al paquete de aplicación, así como un vínculo para analizarlo en el Analizador de APK.

Si la variante de compilación seleccionada es un tipo de compilación de depuración, se firma el paquete de aplicación con una clave de depuración y puedes usar bundletool para implementar la app desde el paquete de aplicación en un dispositivo conectado. Si seleccionaste una variante de actualización, no se firmará el paquete de aplicación de forma predeterminada y deberás firmarlo manualmente mediante jarsigner. De forma alternativa, puedes seleccionar Build > Generate Signed Bundle / APK de la barra de menú.

Android Studio guarda los APK que compilas en project-name/module-name/build/outputs/bundle/.

Generate Signed Bundle / APK Se muestra un cuadro de diálogo con un asistente para crear una nueva configuración de firma y compilar un paquete de aplicación o un APK. Debes firmar tu app con una clave de actualización antes de subirla a Play Console. Para obtener más información acerca de la firma de app, consulta Cómo firmar tu app.

Nota: El botón Run compila un APK con testOnly="true". Esto significa que solo se puede instalar el APK mediante adb (que usa Android Studio). Si deseas un APK con capacidad de depuración, que los usuarios puedan instalar sin adb, selecciona la variante de depuración y haz clic en Build Bundle(s) / APK(s) > Build APK(s).

Si necesitas obtener información sobre las tareas que ejecuta Gradle para cada comando, abre la ventana Build, como se describe en la siguiente sección. Para obtener más información acerca de Gradle y del proceso de compilación, consulta Cómo configurar tu compilación.

Cómo supervisar el proceso de compilación

Para ver los detalles del proceso de compilación, haz clic en View > Tool Windows > Build (o haz clic en Build , en la barra de la ventana de herramientas). La ventana muestra las tareas que ejecuta Gradle para compilar la app, como se muestra en la figura 2.

Figura 2: Ventana de salida de compilación de Android Studio

  1. Pestaña Build: 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 tiempo de compilación, inspecciona el árbol y selecciona un elemento para leer el resultado del error, como se muestra en la figura 3 de abajo.

    Figura 3: Inspecciona la ventana de salida de compilación para ver los mensajes de error

  2. Pestaña Sync: Muestra las tareas que ejecuta Gradle para sincronización con los archivos del proyecto. De manera similar a la pestaña Build, si encuentras un error de sincronización, selecciona elementos del árbol para obtener más información al respecto.
  3. Restart: Realiza la misma tarea que elegir Build > Make Project mediante la generación de archivos de compilación intermedia para todos los módulos del proyecto.
  4. Toggle view: Activa o desactiva la visualización de la ejecución de tareas como un árbol gráfico y muestra resultados de texto más detallados de Gradle. Esta es el mismo resultado que se muestra en la ventana Gradle Console en Android Studio 3.0 y versiones posteriores.

Si las variantes de compilación usan tipos de productos, Gradle también invoca tareas para compilar esos tipos de productos. Para ver la lista de todas las tareas de compilación disponibles, haz clic en View > Tool Windows > Gradle (o en Gradle , en la barra de la ventana de herramientas).

Si se produce un error durante el proceso de compilación, Gradle puede recomendar algunas opciones de la línea de comandos para ayudarte a resolver el problema, como --stacktrace o --debug. Para usar opciones de la línea de comandos con el proceso de compilación:

  1. Abre el cuadro de diálogo Settings o Preferences:
    • En Windows o Linux, selecciona File > Settings en la barra de menú.
    • En Mac OS X, 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 y salir.

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

Acerca de Instant Run

En Android Studio 2.3 o versiones posteriores, Instant Run reduce considerablemente el tiempo que lleva actualizar el APK con los cambios de código y recursos. Después de implementar la app en un dispositivo de destino que ejecuta Android 5.0 (nivel de API 21) o una versión posterior, puedes hacer clic en Apply Changes para implementar determinados cambios de código y recursos en la app en ejecución, sin compilar un APK nuevo y, en algunos casos, incluso sin reiniciar la actividad actual. Los botones Run y Debug siempre están disponibles si deseas implementar los cambios y forzar el reinicio de la app. Sin embargo, es posible que cuando uses el botón Apply Changes , proporciones un flujo de trabajo más rápido para la mayoría de los cambios incrementales.

Sugerencia: También puedes presionar Ctrl + F10 (o Ctrl + Cmd + R en Mac) para aplicar los cambios con Instant Run.

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

  • Compilas un APK de la app mediante una variante de compilación de depuración. Aún no se admite Instant Run cuando se implementa desde un paquete de aplicación.
  • Usas el complemento de Android para Gradle versión 2.3.0 o una versión posterior.
  • Configuras minSdkVersion en 15 o en un valor mayor en el archivo build.gradle de nivel de módulo de la app.
  • Implementas la app en un dispositivo de destino que ejecuta Android 5.0 (API nivel 21) o versiones posteriores.

Para obtener más información sobre cómo habilitar Instant Run, consulta la sección sobre cómo configurar un proyecto.

Instant Run implementa los cambios mediante un intercambio directo, intercambio con reinicio o intercambio indirecto. El tipo de reemplazo que lleva a cabo depende del tipo de cambio que se aplica. Cuando haces clic en Apply Changes después de realizar un cambio de código o recurso en la app en ejecución, Instant Run determina automáticamente la mejor manera de implementar el cambio en el dispositivo de destino, como se describe en la siguiente tabla.

Al hacer clic en Run (o en Debug ) se fuerza una acción de intercambio indirecto y se reinicia la app. Si realizas un cambio en el manifiesto de la app o en un recurso al que hace referencia el manifiesto, Android Studio siempre implementa los cambios con una reinstalación completa del APK.

Cambio en el código Comportamiento al aplicar los cambios
  • Cambio del código de implementación de un método existente

Realiza un intercambio directo: Este es el tipo de reemplazo más rápido y permite visualizar los cambios mucho más rápido. La aplicación continúa ejecutándose y se usa un método auxiliar con la implementación nueva la próxima vez que se llama al método.

En los intercambios directos, no se vuelven a inicializar objetos en la app en ejecución. Antes de que se muestren ciertas actualizaciones, es posible que debas reiniciar la actividad actual seleccionando Run > Restart Activity, o que debas reiniciar la app haciendo clic en Run (o Debug ). De forma predeterminada, Android Studio reinicia automáticamente la actividad actual después de realizar un intercambio directo. Si no deseas obtener ese comportamiento, puedes inhabilitar los reinicios automáticos de las actividades.

  • Cambio o eliminación de un recurso existente
Lleva a cabo un intercambio directo: Este intercambio es muy rápido también, pero Instant Run debe reiniciar la actividad actual cuando aplica los recursos cambiados en la app. La app continúa ejecutándose, pero es posible que observes un leve parpadeo en la pantalla mientras se reinicia la actividad, lo que es normal.
Cambios estructurales en el código, por ejemplo:
  • Adición, eliminación o cambio de:
    • una anotación
    • un campo de instancia
    • un campo estático
    • una firma de método estático
    • una firma de método de instancia
  • Cambio de la clase primaria de la que se hereda la clase actual
  • Cambio de la lista de interfaces implementadas
  • Cambio del inicializador estático de una clase
  • Reordenamiento de los elementos de diseño que usan ID de recursos dinámicos

Lleva a cabo un intercambio indirecto: Este intercambio es un poco más lento porque, aunque no se requiere un APK, Instant Run debe reiniciar la app completa cuando implementa cambios de código estructural.

  • Cambio del manifiesto de la app
  • Cambio de los recursos a los que hace referencia el manifiesto de la app
  • Cambio de un elemento de la IU del sistema Android, como un widget o una notificación

Cuando realizas cambios en el manifiesto de la app o en los recursos a los que hace referencia el manifiesto, si haces clic en Apply Changes , se vuelve a implementar la compilación completa de la app con esos cambios. Esto se debe a que cierta información de la app, como el nombre, los recursos de ícono de la app y los filtros de intent, se determina a partir del manifiesto cuando se instala el APK en el dispositivo.

Si el proceso de compilación actualiza automáticamente cualquier parte del manifiesto de la app, como la iteración automática de versionCode o versionName, no podrás beneficiarte del rendimiento completo de Instant Run. Al usar Instant Run, debes inhabilitar las actualizaciones automáticas de cualquier parte del manifiesto de la app en las variantes de la compilación de depuración.

Al actualizar un elemento de la IU del sistema Android, como un widget o una notificación, debes hacer clic en Run (o Debug ).

Nota: Si necesitas reiniciar la app después de una falla, no la lances desde el dispositivo de destino. Si reinicias la app desde el dispositivo de destino, no se aplicará ninguno de los cambios que hayas hecho en el código que sean posteriores al último intercambio indirecto o a la última compilación incremental. Para lanzar la app con todos los cambios recientes, haz clic en Run (o Debug ) desde Android Studio.

Cómo inhabilitar el reinicio automático de las actividades

Cuando realizas un intercambio directo, la app continúa ejecutándose, pero Android Studio reinicia automáticamente la actividad actual. Para inhabilitar esta configuración predeterminada:

  1. Abre el cuadro de diálogo Settings o Preferences:
    • En Windows o Linux, selecciona File > Settings en la barra de menú.
    • En Mac OS X, selecciona Android Studio > Preferences en la barra de menú.
  2. Navega hasta Build, Execution, Deployment > Instant Run.
  3. Desmarca la casilla junto a Restart activity on code changes.

Si se inhabilita el reinicio automático de actividades, puedes iniciar manualmente la actividad actual de la barra de menú. Para ello, selecciona Run >Restart Activity.

Cómo configurar el proyecto para Instant Run

Android Studio habilita Instant Run de forma predeterminada para proyectos compilados con un complemento de Android para Gradle 2.3.0 y versiones posteriores.

Para actualizar un proyecto existente con la última versión del complemento:

  1. Abre el cuadro de diálogo Settings o Preferences.
  2. Navega hasta Build, Execution, Deployment > Instant Run y haz clic en Update Project, como se muestra en la figura 4.

    Si no aparece la opción para actualizar el proyecto, significa que ya está actualizado con la última versión del complemento de Android para Gradle. Asegúrate de que esté marcada la casilla junto a Enable Instant Run.

    Figura 4: Actualización del complemento de Android para Gradle para un proyecto existente

Para comenzar a usar Instant Run, también debes cambiar la variante de compilación a una versión de depuración de la app e implementarla en un dispositivo de destino que ejecute Android 5.0 (nivel de API 21) o una versión posterior. Para obtener información sobre otras técnicas que aceleran la compilación, consulta Cómo optimizar la velocidad de compilación.

Cómo excluir el proyecto de Windows Defender

En los sistemas Windows, Windows Defender puede ocasionar demoras mientras usas Instant Run. Si usas Windows Defender, debes excluir la carpeta del proyecto de Android Studio de los análisis de software malicioso.

Cómo mejorar los tiempos de compilación con Crashlytics

Si la versión del complemento para Fabric Gradle es anterior a la versión 1.21.6, es posible que Crashlytics extienda los tiempos de compilación. Para mejorar el rendimiento de compilación mientras desarrollas la app, puedes actualizar el complemento a la versión más reciente o inhabilitar Crashlytics para la variante de compilación de depuración.

Limitaciones de Instant Run

Instant Run está diseñado para acelerar el proceso de compilación e implementación en la mayoría de las situaciones. Sin embargo, hay algunos aspectos del uso de Instant Run que podrían afectar el comportamiento y la compatibilidad de la app. Si experimentas algún otro problema mientras usas Instant Run, habilita el registro adicional e informa un error.

Cómo implementar la app en varios dispositivos

Instant Run usa diferentes técnicas para realizar intercambios directos, con reinicio e indirectos que son específicos del nivel de API del dispositivo de destino. Por este motivo, cuando se implementa una app en varios dispositivos al mismo tiempo, Android Studio desactiva Instant Run temporalmente.

Cómo usar Multidex en una app

Si minSdkVersion está configurado en 21 o en un valor mayor, Instant Run configura automáticamente la app para multidex. Dado que Instant Run solo funciona con la versión de depuración de la app, es posible que debas configurar la app para multidex cuando implementes la variante de compilación.

Cómo ejecutar pruebas instrumentadas y generadores de perfiles de rendimiento

Las pruebas instrumentadas cargan el APK de depuración y un APK de prueba en el mismo proceso del dispositivo de prueba. Esto permite controlar los métodos para anular el ciclo de vida normal de la app y realizar pruebas. Durante la ejecución o la depuración de pruebas instrumentadas, Android Studio no inyecta los métodos adicionales requeridos para Instant Run y desactiva la función.

Cuando generas perfiles para una app, debes inhabilitar Instant Run. El impacto en el rendimiento es leve cuando se usa Instant Run y un poco mayor cuando se anulan los métodos con un intercambio directo. Este impacto en el rendimiento puede interferir con la información proporcionada por las herramientas de generación de perfiles de rendimiento. Además, los métodos auxiliares generados con cada intercambio directo pueden suponer complicaciones para los seguimientos de pila.

Cómo usar complementos de terceros

Android Studio inhabilita de manera temporal la biblioteca de cobertura de código Java (JaCoCo) y ProGuard cuando se usa Instant Run. Debido a que Instant Run solo funciona con compilaciones de depuración, esto no afecta la compilación de actualización.

Es posible que determinados complementos de terceros que realizan mejoras de códigos de bytes ocasionen problemas con respecto a la manera en la que Instant Run instrumenta la app. Si experimentas estos problemas, pero deseas continuar usando Instant Run, deberás inhabilitar esos complementos para la variante de compilación de depuración. Además, para mejorar la compatibilidad con complementos de terceros, puedes informar un error.

Cómo aplicar cambios en apps de varios procesos

Instant Run solo instrumenta los procesos principales de la app a fin de realizar intercambios directos y con reinicio. Cuando se aplican cambios de código en otros procesos de la app (por ejemplo, en la implementación de un método o recurso existente), Instant Run realiza un intercambio indirecto.

Cómo lanzar la app en un perfil de trabajo

Si ejecutas la app con Instant Run y la abres con un perfil de trabajo (u otro perfil secundario), esta se detendrá porque solo se puede acceder a los archivos DEX instrumentados usados por Instant Run desde el espacio del usuario del perfil principal.

Si deseas continuar usando Instant Run, evita abrir la app con el perfil de trabajo y asegúrate de que la configuración de ejecución no use la marca --user user_id.

Si necesitas usar la app con el perfil de trabajo, te recomendamos crear una nueva configuración de ejecución que incluya la marca --user user_id y donde se especifique el ID de usuario del perfil de trabajo. Para ver el ID de usuario del perfil de trabajo, ejecuta adb shell pm list users desde la línea de comandos. Si usas la marca --user, Android Studio inhabilita Instant Run solo para esa implementación; Instant Run funcionará de nuevo cuando cambies a una configuración sin la marca --user.

Cómo inhabilitar Instant Run

Para inhabilitar Instant Run:

  1. Abre el cuadro de diálogo Settings o Preferences.
  2. Navega hasta Build, Execution, Deployment > Instant Run.
  3. Desmarca la casilla junto a Enable Instant Run.