Únete a ⁠ #Android11: The Beta Launch Show el 3 de junio.

Nuevas funciones de la versión preliminar de Android Studio

Se lanzó Android Studio 3.6 para el canal estable. Descárgala aquí.

Android Studio 4.1 está actualmente en los canales para desarrolladores y Canary, y Android Studio 4.0 se encuentra en Beta.

Para consultar las novedades sobre las versiones, que incluyen la lista de las correcciones destacadas de cada una, también puedes consultar las Actualizaciones de versiones.

Si encuentras un problema mientras usas una versión preliminar de Android Studio, avísanos. Tus informes de errores nos ayudan a mejorar Android Studio.

Android Studio 4.1

En esta sección, se proporciona un resumen de las nuevas funciones y los cambios de Android Studio 4.1.

Inspector de bases de datos

Con Android Studio 4.1 Canary 6 y versiones posteriores, puedes inspeccionar, consultar y modificar las bases de datos de tu app con la nueva herramienta Inspector de bases de datos. Por ejemplo, puedes depurar tu app en ejecución modificando los valores de tu base de datos y probando esos cambios en el dispositivo.

Cómo modificar los valores de la tabla y consultar los cambios en tu app en ejecución

Para comenzar, implementa tu app en un dispositivo con nivel de API 26 o superior, y selecciona View > Tool Windows > Database Inspector en la barra de menú.

Si la ventana Database Inspector no selecciona automáticamente el proceso de tu app, elígelo en el menú desplegable.

Cómo inspeccionar y modificar tablas

En el panel Databases, puedes ver las bases de datos de tu app y expandir un nodo de base de datos para ver sus tablas. Cuando haces doble clic en una tabla, el inspector la abre en una pestaña separada a la derecha, como se muestra en la siguiente captura de pantalla, en la que puedes inspeccionar sus datos, ordenarlos por columnas o incluso modificar los valores mientras se ejecuta tu app en el dispositivo.

Para cambiar el valor de una celda de la tabla, simplemente haz doble clic en la celda, cambia su valor y presiona Intro. Si usas la biblioteca de persistencias Room y observas tus bases de datos (como con LiveData), esos cambios deberían estar visibles en la app en ejecución casi de inmediato. De lo contrario, es posible que debas actualizar la consulta de tu app de la base de datos para ver los cambios.

Cómo inspeccionar, consultar y modificar las bases de datos de tu app

Si tu app actualiza su base de datos y quieres ver esas actualizaciones automáticamente en la ventana del inspector, marca la casilla junto a Live updates. Ten en cuenta que, si bien esta opción está habilitada, la tabla del inspector será de solo lectura, y no podrás modificar sus valores.

De forma alternativa, puedes actualizar manualmente los datos del agente haciendo clic en Refresh Table. De manera similar, si hay cambios en los esquemas de base de datos, haz clic en la opción Refresh Schema del panel Databases.

Cómo consultar una base de datos

Para consultar una base de datos, haz clic en la opción Run SQL del panel Databases. Se abrirá una pestaña New Query a la derecha. Si tu app incluye más de una base de datos, selecciona la que desees consultar mediante el menú desplegable ubicado en la ventana de la pestaña. En el campo de texto, puedes especificar tu consulta de SQLite y hacer clic en Run. El inspector consulta la base de datos de tu app y muestra el resultado, como se indica a continuación.

Cómo consultar una base de datos

Si usas la biblioteca de persistencias Room, Android Studio también proporciona acciones de canal para ayudarte a ejecutar rápidamente búsquedas en tus anotaciones @Query. Mientras se implementa tu app en un dispositivo compatible y el Inspector de bases de datos está abierto en el IDE, haz clic en el botón que aparece junto a una anotación @Query, como se muestra a continuación.

Acción de anotación de consulta de Room

El Inspector de bases de datos abre una pestaña nueva, ejecuta la consulta y muestra los resultados. Si tu consulta incluye parámetros de vinculación con nombre, como :name, Android Studio solicita valores para cada parámetro antes de ejecutar la consulta.

Generador de perfiles de memoria nativos

El Generador de perfiles de memoria de Android Studio ahora incluye la herramienta Generador de perfiles de memoria nativos para apps implementadas en dispositivos físicos que ejecutan Android 10 o versiones posteriores. Con un tamaño de muestra de 32 bytes, el Generador de perfiles de memoria nativos realiza un seguimiento de las asignaciones o desasignaciones de objetos en código nativo para un período específico, y proporciona la siguiente información:

  • Allocations: Es un recuento de objetos asignados a través de malloc() o el operador new durante el período seleccionado.
  • Deallocations: Es un recuento de objetos desasignados mediante free() o el operador delete durante el período seleccionado.
  • Allocations Size: Es el tamaño total en bytes de todas las asignaciones durante el período seleccionado.
  • Deallocations Size: Es el tamaño agregado en bytes de toda la memoria liberada durante el período seleccionado.
  • Total Count: Es el valor de la columna Allocations menos el valor de la columna Deallocations.
  • Remaining Size: Es el valor de la columna Allocations Size menos el valor de Deallocations Size.

Generador de perfiles de memoria nativos

Para iniciar una grabación, haz clic en Record native allocations, en la parte superior de la ventana del Generador de perfiles de memoria:

Botón Record native allocations

Cuando esté todo listo para completar la grabación, haz clic en Stop recording.

Cómo usar modelos de TensorFlow Lite

Vincular modelos de AA facilita la importación directa de archivos de modelo .tflite y su uso en tus proyectos. Android Studio genera clases fáciles de usar para que puedas ejecutar tu modelo con menos código y mayor seguridad de tipos.

Modelos compatibles

La implementación Canary actual de la vinculación de modelos de AA admite modelos de clasificación de imágenes y transferencia de estilo, siempre que estén mejorados con metadatos. Con el paso del tiempo, se agregará compatibilidad con otros dominios de problemas, como la detección de objetos, la segmentación de imágenes y la clasificación de texto.

TensorFlow Hub ofrece una amplia variedad de modelos de clasificación de imágenes previamente entrenados. Solo tienes que buscar y descargar los formatos de modelo que mencionan "metadatos". También puedes agregar metadatos a un modelo de TensorFlow Lite, como se describe en Cómo agregar metadatos a un modelo de TensorFlow Lite.

Cómo importar un archivo de modelo

Para importar un archivo de modelo compatible, sigue estos pasos:

  1. Abre el cuadro de diálogo de importación del modelo de TensorFlow Lite del menú de Archivo en File > New > Other > TensorFlow Lite Model.
  2. Selecciona el archivo de modelo .tflite que descargaste o creaste anteriormente.
  3. Haz clic en Finish.

Esta acción importará el archivo del modelo a tu proyecto y lo colocará en la carpeta ml/. Si no existe el directorio, Android Studio lo creará.

Cómo importar un modelo de TensorFlow Lite

Cómo ver metadatos de un modelo

Para ver los detalles de un modelo importado y obtener instrucciones sobre cómo usarlo en tu app, haz doble clic en el archivo del modelo de tu proyecto para abrir la página del visor del modelo, que muestra lo siguiente:

  • Model: Descripción de alto nivel del modelo
  • Tensors: Descripción de los tensores de entrada y salida
  • Sample code: Ejemplo de cómo interactuar con el modelo en tu app

Captura de pantalla del visor de modelos de TensorFlow Lite

Si el modelo no tiene metadatos, esta pantalla solo proporcionará información mínima.

Cómo usar el modelo en tu app

El visor de modelos proporciona un código de muestra para ayudarte a comenzar a usar el modelo en tu app.

A continuación, se muestra un ejemplo con mobilenet_quant_metadata.tflite:

Kotlin

    try {
        val model: MobilenetQuantMetadata = MobilenetQuantMetadata.newInstance(this)

        // Creates a TensorImage instance from Bitmap.
        val tensorImage = TensorImage()
        tensorImage.load(bitmap)

        // Runs model inference and gets result.
        val outputs: MobilenetQuantMetadata.Outputs = model.process(tensorImage)
        val tensorLabel: TensorLabel = outputs.getProbabilityAsTensorLabel()
        val probMap = tensorLabel.mapWithFloatValue

        for ((key, value) in probMap) {
            Log.d(TAG, "label = $key, prob = $value")
        }
    } catch (e: IOException) {
        // Handles exception
    }
    

Java

    try {
        MobilenetQuantMetadata model = MobilenetQuantMetadata.newInstance(this);

        // Creates a TensorImage instance from Bitmap.
        TensorImage tensorImage = new TensorImage();
        tensorImage.load(bitmap);

        // Runs model inference and gets results.
        MobilenetQuantMetadata.Outputs outputs = model.process(tensorImage);
        TensorLabel tensorLabel = outputs.getProbabilityAsTensorLabel();
        Map<String, Float> probMap = tensorLabel.getMapWithFloatValue();

        for (Map.Entry<String, Float> entry : probMap.entrySet()) {
          Log.d(TAG, "label = " + entry.getKey() + ", prob = " + entry.getValue());
        }
    } catch (IOException e) {
       // Handles exception
    }
    

Como se muestra en el ejemplo, Android Studio crea una clase llamada MobilenetQuantMetadata para interactuar con el modelo.

Problemas conocidos y soluciones

  • Actualmente, la compatibilidad con los modelos de TensorFlow Lite para los dominios de problemas que no sean la clasificación de imágenes y la transferencia de estilo es limitada. Si bien la importación debería funcionar correctamente, algunas entradas o salidas de modelos están representadas por TensorBuffers en lugar de tipos compatibles. Para los modelos sin metadatos, todas las entradas y salidas del modelo serán TensorBuffers.
  • Para admitir modelos de TensorFlow Lite de más de 20 MB, anula la propiedad de IntelliJ IDE idea.max.content.load.filesize. Consulta esta página para obtener más detalles.
  • Los modelos que tienen tipos de datos de entrada y salida diferentes de DataType.UINT8 o DataType.FLOAT32 no son compatibles.

Esta función aún está en desarrollo, por lo que debes enviar comentarios o informar errores.

Compatibilidad con Jetpack Compose

Jetpack Compose Toolkit brinda un enfoque moderno para crear la IU de tu app. El kit de herramientas también incluye todos los beneficios de Kotlin, como ayudarte a escribir código idiomático y conciso que sea completamente interoperable con Java.

Para obtener la mejor experiencia de desarrollo con Jetpack Compose, debes usar la versión más reciente de Android Studio 4.1. Esto se debe a que, cuando utilizas Android Studio para desarrollar una app con Jetpack Compose, puedes beneficiarte de las funciones del editor inteligente, como las plantillas para proyectos nuevos y la capacidad de obtener de inmediato una versión de vista previa de la IU de Compose.

Para obtener más información y comenzar, consulta la descripción general de Jetpack Compose.

Aserciones en compilaciones de depuración

Las aserciones de tu código Java ahora están habilitadas cuando implementas la versión de depuración de tu app. Debido a que el entorno de ejecución de Android no admite la habilitación de aserciones durante el tiempo de ejecución (es decir, pasar el equivalente de la marca -ea/-enableassertions a una VM de Java), anteriormente no tenían efecto.

Ahora, cuando compilas e implementas la versión de depuración de tu app con el complemento de Gradle para Android 4.1.0-alpha01 y versiones posteriores, el compilador integrado (D8) reescribe el código para habilitar las aserciones durante el tiempo de compilación, de modo que siempre tengas las comprobaciones activadas.

Problemas conocidos de la Versión de vista previa 4.1

En esta sección, se describen los problemas conocidos de Android Studio Versión de vista previa 4.1.

Parches que no funcionan en 4.1 Canary 2

Los parches para Android Studio 4.1 Canary están rotos. Para actualizar a una versión más reciente de Android Studio 4.1, cierra Android Studio y, luego, descarga e instala el paquete más reciente.

Este problema se solucionó en Android Studio 4.1 Canary 3.

Errores de tiempo de espera en el Generador de perfiles de CPU

Es posible que se generen errores del tipo "Recording failed to stop" en el Generador de perfiles de CPU de Android Studio cuando selecciones las opciones de configuración Sample Java Methods o Trace Java Methods. A menudo, son errores de tiempo de espera, especialmente si ves el siguiente mensaje de error en el archivo idea.log:

Wait for ART trace file timed out

Los errores de tiempo de espera tienden a afectar más a los métodos de seguimiento que a los métodos de muestreo, así como a las grabaciones más largas en comparación con las más cortas. Como solución temporal, puede ser útil probar grabaciones más cortas para ver si desaparece el error.

Si tienes problemas de tiempo de espera con el generador de perfiles, informa un error que incluya la marca o el modelo de tus dispositivos y cualquier entrada relevante de idea.log y logcat.

Errores de control de versiones de Git en el IDE

Las operaciones que requieren autenticación en el control de versiones de Git están dañadas en el IDE de Android Studio 4.1 Canary 1.

Para solucionar este problema, actualiza a Android Studio 4.1 Canary 2.

Android Studio 4.0

En esta sección, se proporciona un resumen de las nuevas funciones y los cambios de Android Studio 4.0.

Actualizaciones de la IU del Generador de perfiles de CPU

Actualizaciones de la IU del registro del sistema

En función de tus comentarios, se revisó la IU del Generador de perfiles de CPU para ofrecer un flujo de trabajo más intuitivo. Entre los cambios destacados se incluyen los siguientes:

  • Los registros de CPU ahora están separados del cronograma principal del generador de perfiles para permitir un análisis más sencillo. Los datos registrados se organizan en grupos en el lado izquierdo de la ventana Profiler. Puedes mover grupos hacia arriba o abajo a fin de reorganizar la lista. Para ello, haz clic en el ícono de opciones Ícono de opciones en el generador de perfiles en la esquina superior derecha de la ventana o arrastra y suelta elementos individuales dentro de un grupo.
  • Para facilitar el análisis en paralelo, puedes ver toda la actividad de subprocesos en el cronograma de la actividad de subprocesos (incluidos métodos, funciones y eventos).
  • Las pestañas de los análisis Flame Chart, Top Down y Bottom Up ahora se encuentran en la columna del lado derecho. En el grupo de subprocesos, los subprocesos se expanden automáticamente para los registros de seguimiento del sistema y se contraen de forma predeterminada para otros tipos de registro. Haz doble clic en los nombres de subprocesos para expandirlos o contraerlos.
  • También se mejoró la IU del registro del sistema, como se muestra en la captura de pantalla anterior. Ahora, por ejemplo, los eventos se colorean de forma única para facilitar la diferenciación.

Esta función aún está en desarrollo. Por lo tanto, sigue enviando comentarios.

Se quitó la función de procesamiento de anotaciones independiente

Se quitó la posibilidad de separar el procesamiento de anotaciones en una tarea exclusiva. Esta opción se usa para mantener la compilación incremental de Java cuando se usan procesadores de anotaciones no incrementales en proyectos solo de Java. Se habilitó mediante la configuración de android.enableSeparateAnnotationProcessing en true en el archivo gradle.properties, que ya no funciona.

En su lugar, debes migrar al uso de procesadores de anotaciones incrementales para mejorar el rendimiento de la compilación.

Ventana "Build Speed"

Cuando usas Android Studio 4.0 Canary 3 con el complemento de Gradle para Android 4.0.0-alpha03 y versiones posteriores, la ventana Build Speed te ayuda a comprender y diagnosticar problemas con el proceso de compilación, como optimizaciones inhabilitadas y tareas mal configuradas. Cuando usas Android Studio 4.0 Canary 3 y versiones posteriores, y el complemento de Gradle para Android 4.0.0-alpha03 o versiones posteriores, puedes abrir la ventana Build Speed de la siguiente manera:

  1. Si aún no lo hiciste, selecciona la opción Build > Make Project en la barra de menú.
  2. En la barra de menú, selecciona View > Tool Windows > Build.
  3. En la ventana Build, abre la ventana Build Speed de una de las siguientes maneras:
    • Una vez que Android Studio termine de crear el proyecto, haz clic en la pestaña Build Speed.
    • Después de que Android Studio termine de compilar el proyecto, haz clic en el vínculo que se encuentra en el lado derecho de la ventana Build Output.

En el lado izquierdo, la ventana Build Speed organiza posibles problemas de compilación en un árbol. Puedes explorar y hacer clic en cada problema para analizar los detalles en el panel de la derecha. Cuando Android Studio analiza tu compilación, procesa el conjunto de tareas que determinaron la duración de la compilación y proporciona una visualización para ayudarte a comprender el impacto de cada una de esas tareas. Para obtener más detalles sobre las advertencias, expande el nodo Warnings.

Gráfico de Build Speed

¿Qué tareas determinan la duración de la compilación?

Gradle determina la ejecución de tareas por las interdependencias entre tareas, la estructura del proyecto y la carga de la CPU, y ejecuta las tareas de forma secuencial o en paralelo. Para una compilación determinada, la ventana Build Speed destaca el conjunto de tareas ejecutadas de manera secuencial que determinaron la duración de la compilación actual. Resolver las ineficiencias en esas tareas destacadas es la mejor forma de reducir el tiempo de compilación general.

Ten en cuenta que es posible que veas un conjunto de tareas diferente que determine la duración de la compilación para cada compilación que ejecutes. Por ejemplo, si realizas cambios en la configuración de la compilación, ejecutas una compilación con un conjunto diferente de tareas (como una compilación incremental) o ejecutas una compilación con diferentes restricciones (por ejemplo, una carga de CPU más alta), es posible que, en la ventana "Build Speed", se destaque un conjunto diferente con las tareas que más afectaron la duración de la compilación. Debido a esta variabilidad, te recomendamos que utilices la ventana Build Speed en varias compilaciones para reducir la duración de la compilación de forma constante.

Inspector de diseño en vivo

Depura el diseño con un Inspector de diseño en vivo actualizado que proporcione estadísticas completas y en tiempo real sobre la IU de la app mientras se implementa en un dispositivo.

Para abrir una ventana del Inspector de diseño, ve a View > Tools Windows > Layout Inspector. Además de muchas de las mismas funciones del Inspector de diseño existente, el Inspector de diseño en vivo también incluye lo siguiente:

  • Jerarquía de diseño dinámica Se actualiza a medida que cambian las vistas en el dispositivo.

Jerarquía de diseño dinámica

  • Pila de resolución de valores de propiedad: Investiga dónde se origina un valor de propiedad de recurso en el código fuente y navega a su ubicación siguiendo los hipervínculos en el panel de propiedades.

Pila de resolución de valores de propiedad

  • 3D view:: Consulta la jerarquía de vistas de tu app durante el tiempo de ejecución con una visualización 3D avanzada. Para usar esta función, en la ventana del Inspector de diseño en vivo, haz clic en el diseño y rótalo.

Inspector de diseño: vista 3D

Solo puedes usar el Inspector de diseño en vivo cuando implementas tu app en dispositivos con API nivel 29 o versiones posteriores. También debes habilitar la función. Para ello, navega a File > Settings > Experimental y marca la casilla que aparece junto a Enable Live Layout Inspector.

Multi Preview

Multi Preview es una herramienta visual que permite obtener una vista previa simultánea de los diseños en dispositivos y configuraciones diferentes, lo que puede ayudar a detectar posibles problemas.

Para acceder a esta función, haz clic en la pestaña Multi Preview ubicada en la esquina superior derecha de la ventana del IDE:

Pestaña Multi Preview

Puedes seleccionar entre dos conjuntos de configuración diferentes: dispositivos Pixel y configuraciones regionales del proyecto. Para alternar entre esos conjuntos de configuración, selecciónalos en el menú desplegable ubicado en la parte superior de la ventana Multi Preview:

Demostración de Multi Preview

Simplificación de la biblioteca de Java 8 en D8 y R8

Ahora, Android Studio admite la utilización de varias API de Java 8 sin necesidad de un nivel de API mínimo para tu app.

Mediante un proceso llamado desugaring, el compilador DEX, D8, de Android Studio 3.0 y versiones posteriores ya proporcionaba compatibilidad sustancial con funciones del lenguaje Java 8 (como expresiones lambda, métodos de interfaz predeterminados, la prueba con recursos, etc.). En Android Studio 4.0, se amplió el motor de desugaring para poder usar desugar en las API del lenguaje Java. Esto significa que ahora puedes incluir API de lenguaje estándar que solo estaban disponibles en las versiones recientes de Android (como java.util.streams) en apps que admiten versiones anteriores de Android.

El siguiente conjunto de API es compatible con esta versión:

  • Flujos secuenciales (java.util.stream)
  • Un subconjunto de java.time
  • java.util.function
  • Adiciones recientes a java.util.{Map,Collection,Comparator}
  • Opcionales (java.util.Optional, java.util.OptionalInt y java.util.OptionalDouble) y algunas otras clases nuevas que son útiles para las API anteriores
  • Algunas adiciones a java.util.concurrent.atomic (métodos nuevos en AtomicInteger, AtomicLong y AtomicReference)
  • ConcurrentHashMap (con correcciones de errores para Android 5.0)

Para admitir estas API de lenguaje, D8 compila un archivo DEX de biblioteca independiente que contiene una implementación de las API faltantes y lo incluye en tu app. El proceso de simplificación reescribe el código de tu app para usar esa biblioteca durante el tiempo de ejecución.

Para agregar compatibilidad con estas API de lenguaje, incluye lo siguiente en el archivo build.gradle de tu módulo:

android {
      defaultConfig {
        // Required when setting minSdkVersion to 20 or lower
        multiDexEnabled true
      }

      compileOptions {
        // Flag to enable support for the new language APIs
        coreLibraryDesugaringEnabled true
        // Sets Java compatibility to Java 8
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
      }
    }

    dependencies {
      coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.5'
    }
    

Avísanos si tienes problemas o si requieres compatibilidad con otras API. Para ello, registra errores en nuestro seguimiento de errores.

Compatibilidad con archivos de secuencias de comandos DSL de Kotlin

El complemento de Gradle para Android ahora es compatible con los archivos de la secuencia de comandos de compilación DSL de Kotlin (*.kts). Cuando se usan con Android Studio, algunas funciones del IDE, como el diálogo de estructura de proyecto y las correcciones rápidas de las secuencias de comandos de compilación, ahora también son compatibles con la lectura y la escritura en archivos de secuencias de comandos de compilación de Kotlin.

Funciones del editor inteligente para reglas de ProGuard

Android Studio ahora ofrece funciones de editor inteligente cuando abres archivos de reglas de ProGuard, como resaltado de sintaxis, compleción de código y comprobación de errores. El editor también se integra con tu proyecto de Android Studio para proporcionar la compleción total de símbolos para todos los métodos, clases y campos, además de navegación y refactorización rápidas.

Funciones del editor inteligente cuando se editan archivos de reglas de ProGuard

Motion Editor nuevo

Ahora, Android Studio incluye un editor de diseño visual para el tipo de diseño MotionLayout, lo que facilita la creación y la vista previa de animaciones.

Motion Editor proporciona una interfaz simple para usar elementos de la biblioteca de MotionLayout que funciona como base para la animación en las apps para Android. En las versiones anteriores, la creación y alteración de esos elementos requería la edición manual de restricciones en los archivos de recursos XML. Ahora, Motion Editor puede generar el XML por ti, con compatibilidad con estados de inicio y fin, fotogramas clave, transiciones y cronogramas.

Para comenzar a utilizar Motion Editor, haz lo siguiente:

  1. Crea un atributo ConstraintLayout.
  2. Haz clic con el botón derecho en la vista previa en el editor de diseño.
  3. Haz clic en Convert to MotionLayout, como se muestra a continuación.

Después de que Android Studio convierta el RestraintLayout a MotionLayout, también se agregará un archivo de Motion Scene al directorio que contiene el archivo XML.

El MotionLayout se convierte en el diseño raíz y aparece en la IU de Motion Editor. El diseño ya incluye un ConstraintSet inicial, un ConstraintSet final y una transición de principio a fin.

Puedes usar el gráfico de resumen para elegir un ConstraintSet o una Transition y seleccionar componentes en el panel de selección.

Luego, puedes editar las restricciones y los atributos del ConstraintSet inicial o final de la misma forma en que editarías un ConstraintLayout.

Si deseas compilar más elementos en tu gráfico, puedes usar los íconos de creación para agregar rápidamente un ConstraintSet, una Transition o gestos OnClick/OnSwipe.

Para agregar un fotograma clave, primero haz clic en la flecha de Transition:

Luego, en el panel de cronograma de Transition, haz clic en la esquina superior derecha y selecciona KeyPosition:

Con esta acción, se abre un cuadro de diálogo en el que puedes establecer atributos para el fotograma clave.

También puedes agregar controladores OnClick y OnSwipe a "Transition" en el panel de atributos.

Con esta acción, se abre un cuadro de diálogo en el que puedes establecer atributos del clic, como los componentes de destino y la dirección de arrastre.

Motion Editor admite la vista previa de animaciones en la superficie de diseño. Cuando se selecciona una animación, haz clic en Play  sobre el cronograma para obtener una vista previa de la animación.

Novedades del complemento de Gradle para Android 4.0.0

En esta sección, se describen las funciones nuevas y los cambios de comportamiento incluidos en el complemento de Gradle para Android 4.0.0.

Opciones nuevas para habilitar o inhabilitar las funciones de compilación

El complemento de Gradle para Android 4.0.0-alpha05 presenta una forma nueva de controlar las funciones de compilación que deseas habilitar o inhabilitar, como la vinculación de vista, la vinculación de datos y Jetpack Compose. De forma predeterminada, se inhabilitarán las funciones nuevas que se agreguen. Luego, puedes usar el bloque buildFeatures para habilitar solamente las funciones que desees, lo que ayuda a optimizar el rendimiento de la compilación del proyecto. Puedes configurar las opciones de cada módulo en el archivo build.gradle de nivel del módulo de la siguiente manera:

    android {
        // The default value for each feature is shown below. You can change the value to
        // override the default behavior.
        buildFeatures {
            // Determines whether to generate a BuildConfig class.
            buildConfig = true
            // Determines whether to support View Binding.
            // Note that the viewBinding.enabled property is now deprecated.
            viewBinding = false
            // Determines whether to support Data Binding.
            // Note that the dataBinding.enabled property is now deprecated.
            dataBinding = false
            // Determines whether to generate binder classes for your AIDL files.
            aidl = true
            // Determines whether to support RenderScript.
            renderScript = true
            // Determines whether to support injecting custom variables into the module's R class.
            resValues = true
            // Determines whether to support shader AOT compilation.
            shaders = true
        }
    }
    

También puedes especificar la configuración predeterminada para estas funciones en todos los módulos de un proyecto incluyendo uno o más de los siguientes elementos en el archivo gradle.properties de tu proyecto, como se muestra a continuación. Ten en cuenta que puedes usar el bloque buildFeatures del archivo build.gradle a nivel del módulo para anular la configuración predeterminada de todo el proyecto.

android.defaults.buildfeatures.buildconfig=true
    android.defaults.buildfeatures.aidl=true
    android.defaults.buildfeatures.renderscript=true
    android.defaults.buildfeatures.resvalues=true
    android.defaults.buildfeatures.shaders=true
    

Dependencias entre funciones

En las versiones anteriores del complemento de Gradle para Android, todos los módulos de funciones dinámicas podían depender únicamente del módulo base de la app. Cuando usas el complemento de Gradle para Android 4.0.0, puedes incluir un módulo de funciones que depende de otro módulo de funciones. Es decir, una función :video puede depender de la función :camera, que depende del módulo base, como se muestra en la siguiente figura.

Dependencias entre funciones

La función dinámica :video depende de la función :camera, que depende del módulo base :app.

Esto significa que, cuando la app solicita descargar un módulo de funciones dinámicas, también descarga otros módulos de funciones de los que depende. Después de crear módulos de funciones dinámicas para tu app, puedes declarar una dependencia entre funciones del archivo build.gradle del módulo. Por ejemplo, el módulo :video declara que depende de :camera de la siguiente manera:

// In the build.gradle file of the ':video' module.
    dependencies {
        // All dynamic feature modules must declare a dependency
        // on the base module.
        implementation project(':app')
        // Declares that this module also depends on the 'camera'
        // dynamic feature module.
        implementation project(':camera')
        ...
    }
    

Además, debes habilitar la función de dependencia entre funciones en Android Studio (para admitir la función al editar la configuración de ejecución). Para ello, haz clic en Help > Edit Custom VM Options en la barra de menú y agrega lo siguiente:

-Drundebug.feature.on.feature=true
    

Se quitaron los complementos de Gradle para Android "instantapp" y "feature"

En el complemento de Gradle para Android 3.6.0, el complemento de funciones (com.android.feature) y el complemento de la app instantánea (com.android.instantapp) dejaron de estar disponibles y fueron reemplazados por el complemento de funciones dinámicas (com.android.dynamic-feature) para compilar y empaquetar las apps instantáneas mediante Android App Bundle.

En el complemento de Gradle para Android 4.0.0-alpha01 y versiones posteriores, estos complementos obsoletos se quitaron por completo. Por lo tanto, para usar el complemento de Gradle para Android más reciente, debes migrar tu app instantánea a fin de que sea compatible con Android App Bundle. Al migrar tus apps instantáneas, puedes aprovechar los beneficios de los paquetes de aplicaciones y simplificar el diseño modular de tu app.

Metadatos de dependencias

Cuando compilas tu app con el complemento de Gradle para Android 4.0.0-beta02 y versiones posteriores, el complemento incluye metadatos que describen las dependencias que se compilan en tu app. Cuando subes tu app, Play Console inspecciona esos metadatos para brindarte los siguientes beneficios:

  • Recibir alertas de problemas conocidos con SDK y dependencias
  • Recibir comentarios prácticos para resolver esos problemas

Los datos se comprimen, se encriptan con una clave de firma de Google Play y se almacenan en el bloque de firma de tu app de lanzamiento. Sin embargo, puedes inspeccionar los metadatos por tu cuenta desde los archivos de compilación intermedios locales que se encuentran en el directorio <project>/<module>/build/outputs/sdk-dependencies/release/sdkDependency.txt.

Si prefieres no compartir esa información, puedes incluir lo siguiente en el archivo build.gradle de tu módulo:

android {
        dependenciesInfo {
            // Disables dependency metadata when building APKs.
            includeInApk = false
            // Disables dependency metadata when building Android App Bundles.
            includeInBundle = false
        }
    }
    

Plantillas dinámicas de Kotlin para Android

Android Studio ahora incluye plantillas dinámicas para las clases de Kotlin. Por ejemplo, puedes escribir toast y presionar la tecla Tab para insertar un aviso rápidamente. Para obtener una lista completa de las plantillas dinámicas disponibles, haz clic en File > Settings en la barra de menú (o Android Studio > Preferences en macOS) y ve a Editor > Live Templates.

Nuevas plantillas de fragmentos y asistente de fragmentos

Hay un nuevo asistente de fragmento de Android y nuevas plantillas de fragmento disponibles cuando navegas a File > New > Fragment > Gallery o haces clic en Create new destination en el editor de navegación.

El asistente de galería de fragmentos.

El asistente de galería de fragmentos.

Cómo importar bibliotecas nativas desde dependencias de AAR

A partir del complemento de Gradle para Android 4.0 Canary 9, puedes importar bibliotecas C/C ++ desde las dependencias AAR de tu app. Cuando sigues los pasos de configuración que se describen a continuación, Gradle hace que estas bibliotecas nativas estén disponibles automáticamente para que se puedan usar con tu sistema de compilación nativo externo, como CMake. Ten en cuenta que Gradle solo pone esas bibliotecas a disposición de tu compilación; igualmente debes configurar tus secuencias de comandos de compilación para usarlas.

Las bibliotecas se exportan con el formato de paquete Prefab.

Cada dependencia puede exponer como máximo un paquete Prefab, que comprenda uno o más módulos. Un módulo de Prefab es una biblioteca única, que puede ser una biblioteca compartida, estática o solo de encabezado.

Por lo general, el nombre del paquete coincide con el del artefacto de Maven, y el nombre del módulo con el de la biblioteca, aunque no siempre es así. Debido a que necesitas conocer el nombre del paquete y del módulo de las bibliotecas, es posible que debas consultar la documentación de la dependencia para determinar cuáles son esos nombres.

Cómo configurar un sistema de compilación nativo externo

Para ver los pasos que debes seguir, haz clic en el sistema de compilación nativo externo que tienes pensado usar.

Las dependencias nativas incluidas en un AAR se exponen a tu proyecto CMake mediante CMAKE_FIND_ROOT_PATH. Gradle establecerá automáticamente ese valor cuando se invoque CMake, por lo que si tu compilación modifica esa variable, asegúrate de adjuntarla en lugar de asignarla.

Cada dependencia expone un paquete de archivo de configuración a tu compilación de CMake, que importas con el comando find_package. Ese comando busca paquetes de archivos de configuración que coincidan con el nombre y la versión del paquete específico, y expone los destinos que define para su uso en tu compilación. Por ejemplo, si tu aplicación define libapp.so y usa curl, debes incluir lo siguiente en tu archivo CMakeLists.txt:

add_library(app SHARED app.cpp)

    # Add these two lines.
    find_package(curl REQUIRED CONFIG)
    target_link_libraries(app curl::curl)
    

Ahora puedes especificar #include "curl/curl.h" en app.cpp. Cuando compilas un proyecto, tu sistema de compilación nativo externo vincula automáticamente libapp.so con libcurl.so y los paquetes libcurl.so del APK o paquete de aplicación.

Problemas conocidos de la Versión de vista previa 4.0

En esta sección, se describen los problemas conocidos de Android Studio Versión de vista previa 4.0.

Build Analyzer inhabilitado en Beta 4

Build Analyzer está inhabilitado en Android Studio 4.0 Beta 4. Volverá a estar disponible en la versión Beta 5.

Errores de tiempo de espera en el Generador de perfiles de CPU

Es posible que se generen errores del tipo "Recording failed to stop" en el Generador de perfiles de CPU de Android Studio cuando selecciones las opciones de configuración Sample Java Methods o Trace Java Methods. A menudo, son errores de tiempo de espera, especialmente si ves el siguiente mensaje de error en el archivo idea.log:

Wait for ART trace file timed out

Los errores de tiempo de espera tienden a afectar más a los métodos de seguimiento que a los métodos de muestreo, así como a las grabaciones más largas en comparación con las más cortas. Como solución temporal, puede ser útil probar grabaciones más cortas para ver si desaparece el error.

Si tienes problemas de tiempo de espera con el generador de perfiles, informa un error que incluya la marca o el modelo de tus dispositivos y cualquier entrada relevante de idea.log y logcat.

Los parches no funcionan en la versión 4.0 Beta 2

Los parches para Android Studio 4.0 Beta 2 están rotos. Para actualizar a una versión más reciente de Android Studio 4.0, cierra Android Studio y, luego, descarga e instala el paquete más reciente.

Se solucionó este problema en la versión Beta 3 de Android Studio 4.0.

Errores de control de versiones de Git en el IDE

Las operaciones que requieren autenticación en el control de versiones de Git están dañadas en el IDE de Android Studio 4.0 Beta 1.

Para solucionar este problema, actualiza a Android Studio 4.0 Beta 2 o versiones posteriores.

Botones faltantes de la barra de herramientas de ejecución, depuración y perfil

Si personalizaste el grupo de botones de acción Run/Debug (por ejemplo, al modificar las opciones de Appearance & Behavior > Menus and Toolbars en las ventanas Settings o Preferences), esos botones de acción quizá desaparezcan de la barra de herramientas después de reiniciar el IDE. Este es un problema conocido de la versión de IntelliJ en la que se basa Android Studio 4.0 (consulta el problema IDEA-228450).

Para resolverlo, revierte las personalizaciones que hayas realizado a esos botones de la siguiente manera:

  1. Selecciona File > Settings (o Android Studio > Preferences en macOS).
  2. A la izquierda de la ventana, navega a Appearance & Behavior > Menus and Toolbars.
  3. En la parte derecha de la ventana, navega a Main Toolbar > Toolbar Run Actions y selecciona Run/Debug.
  4. Cerca de la parte superior de la ventana, haz clic en Revert y selecciona Restore Run/Debug.
  5. Haz clic en OK. Ahora deberían aparecer los botones faltantes en la barra de herramientas.

Parches no disponibles para Canary 5

No hay parches disponibles de Android Studio 4.0 Canary 5 para versiones anteriores de Android Studio 4.0 Canary. Para instalar Android Studio 4.0 Canary 5, descárgalo desde la página de descargas de Android Studio.

Inspector de diseño en vivo y generador de perfiles en Canary 5

A partir de Android Studio 4.0 Canary 5, el Inspector de diseño en vivo y los generadores de perfiles no funcionan correctamente en Windows, lo cual provoca el siguiente mensaje de error:

    transfer error: couldn't create file: Read-only file system.
    

Para solucionar este problema, actualiza a Android Studio 4.0 Canary 7 o versiones posteriores.

Falta el repositorio Maven de Kotlin

Si usas Android Studio 4.0 Canary 4 o versiones anteriores, es posible que veas el siguiente mensaje de error:

Application build has failed with an error (Could not find org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.60-eap-25)
    

Para solucionar este problema, actualiza a Android Studio 4.0 Canary 5 o versiones posteriores.

IllegalStateException cuando se implementa una app con dependencias nativas

Si tu app incluye dependencias nativas y tiene androidParallelJsonGen=true (la opción predeterminada), verás una excepción IllegalStateException cuando la implementes desde Android Studio. Para solucionar este problema, establece android.enableParallelJsonGen=false en el archivo gradle.properties de tu proyecto. Consulta el problema 149575364 para obtener más detalles.

Problemas que incluyen dependencias nativas

Actualmente, el complemento de Gradle para Android usa una versión anterior de Prefab con algunos problemas conocidos:

  • Las rutas de acceso a las bibliotecas tienen un escape incorrecto en Windows.
  • El complemento de CMake exporta las bibliotecas estáticas de forma incorrecta.
  • Es posible que las combinaciones de STL válidas se rechacen de forma incorrecta.

La versión más reciente de Prefab tiene correcciones para esos problemas. Para usar la versión más reciente de Prefab, configura android.prefabVersion como 1.0.0-alpha6 o más en el archivo gradle.properties de tu proyecto.