Descripción general de las funciones y API

Android 13 incluye excelentes funciones y API para desarrolladores. En las siguientes secciones, obtendrás información sobre las funciones de tus apps y cómo comenzar a usar las API relacionadas.

Para obtener una lista detallada de las API nuevas, modificadas y quitadas, consulta el informe de diferencias de API. Para obtener detalles sobre las nuevas API, consulta la referencia de la API de Android. Las nuevas API están destacadas para que sea más fácil identificarlas. Además, para conocer las áreas en las que los cambios de la plataforma podrían afectar a tus apps, asegúrate de revisar los cambios en el comportamiento de Android 13 para apps orientadas a Android 13 y para todas las apps.

Productividad y herramientas para desarrolladores

Íconos de apps temáticos

El usuario habilitando los íconos de apps temáticos
Cómo habilitar los íconos de apps temáticos en Android 13

A partir de Android 13, puedes habilitar los íconos de apps temáticos. Con esta función, se ajusta el tono de los íconos de apps en los launchers de Android compatibles para heredar el color del fondo de pantalla y otros temas que eligió el usuario.

Para admitir esta función, tu app debe proporcionar un ícono adaptable y un ícono monocromático de app y señalar a este último desde el elemento <adaptive-icon> en el manifiesto. Si un usuario habilitó el ícono de app temático (es decir, activó el botón de activación Íconos temáticos en la configuración del sistema) y el launcher admite esta función, el sistema usará el color del fondo de pantalla y el tema que eligió el usuario para determinar el color de tono, que luego se aplica al ícono monocromático de app.

La pantalla principal NO muestra el ícono temático de app. En su lugar, muestra el ícono adaptable o estándar de esta en cualquiera de las siguientes situaciones:

  • Si el usuario no habilitó los íconos temáticos de app.
  • Si la app no proporciona un ícono monocromático de esta.
  • Si el launcher no es compatible con los íconos de apps temáticos.

Para obtener más información e instrucciones, consulta Íconos adaptables.

Preferencias de idioma de las apps

Idiomas de las apps en la configuración del sistema

En muchos casos, los usuarios multilingües configuran un idioma para su sistema, como el inglés, pero desean seleccionar otros para apps específicas, como el chino, el hindi o el holandés. Con el fin de ayudar a que las apps brinden una mejor experiencia para estos usuarios, Android 13 presenta las siguientes funciones en las apps que admiten varios idiomas:

  • Configuración del sistema: Una ubicación centralizada en la que los usuarios pueden seleccionar un idioma preferido para cada app.

    La app debe declarar el atributo android:localeConfig en el manifiesto de tu app para indicarle al sistema que admite varios idiomas. Si deseas obtener más información, consulta las instrucciones para crear un archivo de recursos y declararlo en el archivo de manifiesto de tu app.

  • APIs adicionales: Estas APIs públicas, al igual que los métodos setApplicationLocales() y getApplicationLocales() en LocaleManager, permiten que las apps configuren un idioma diferente del idioma del sistema en el tiempo de ejecución.

    Estas APIs se sincronizan automáticamente con la configuración del sistema. Por lo tanto, las apps que las usan para crear selectores de idioma personalizados integrados en la app garantizarán que los usuarios tengan una experiencia del usuario coherente, sin importar dónde seleccionen sus preferencias de idioma. Las APIs públicas también ayudan a reducir la cantidad de código estándar, admiten APKs divididos y copias de seguridad automáticas para apps con el objetivo de almacenar los parámetros de configuración de idiomas del usuario en el nivel de app.

    Para ofrecer retrocompatibilidad con versiones anteriores de Android, las APIs equivalentes también están disponibles en AndroidX. Recomendamos usar las APIs que se agregan en Appcompat 1.6.0-beta01 o versiones posteriores.

Estos cambios no afectan a las apps que no admiten varios idiomas.

Mejora en la compatibilidad de idioma y texto

Android 13 incluye varias funciones y mejoras de idioma y texto que te ayudan a brindar una experiencia más refinada, que se describe en las siguientes secciones:

Separación silábica más rápida

La separación silábica facilita la lectura del texto ajustado y permite que tu IU sea más adaptable. A partir de Android 13, el rendimiento de la separación silábica se optimiza en hasta un 200% para que puedas habilitarlo en tu TextView sin casi afectar el rendimiento del procesamiento. Para habilitar la separación silábica más rápida, usa las nuevas frecuencias fullFast o normalFast en setHyphenationFrequency().

APIs de conversión de texto

Las personas que hablan idiomas como el japonés y el chino usan métodos de entrada de escritura fonética, que suelen ralentizar la búsqueda y las funciones como el autocompletado. En Android 13, las apps pueden llamar a la nueva API de Text Conversion para que los usuarios encuentren lo que buscan con mayor rapidez y facilidad. Antes, por ejemplo, la búsqueda requería que un usuario japonés siguiera estos pasos:

  1. Ingresar el hiragana como la pronunciación fonética de su término de búsqueda (como un lugar o el nombre de una app)
  2. Usar el teclado para convertir los caracteres hiragana a kanji
  3. Repetir la búsqueda con caracteres de kanji
  4. Por último, obtener los resultados de la búsqueda

Con la nueva API de conversión de texto, los usuarios que usen el idioma japonés pueden escribir en hiragana y ver en vivo y en directo los resultados de la búsqueda en kanji y omitir los pasos 2 y 3.

Alturas de líneas mejoradas para alfabetos que no son latinos

Android 13 mejora la visualización de alfabetos no latinos (como tamil, birmano, telugu y tibetano) mediante el uso de una altura de línea adaptada para cada idioma. Las nuevas alturas de líneas evitan que se recorten y mejoran la posición de los caracteres. Tu app puede aprovechar estas mejoras solo con la orientación a Android 13. Asegúrate de probar tus apps cuando uses el nuevo interlineado, ya que los cambios podrían afectar tu IU en idiomas que no sean latinos.

Alturas de líneas recortadas en Android 12 (arriba) que ahora están mejor posicionadas y no se recortan en Android 13 (abajo)

Ajuste de texto en japonés mejorado

A partir de Android 13, los TextViews pueden ajustar texto por Bunsetsu (la unidad más pequeña de palabras que suena natural) o frases, en lugar de caracteres, para aplicaciones en japonés más pulidas y legibles. Puedes aprovechar esta unión si usas android:lineBreakWordStyle="phrase" con TextViews.

Ajuste de texto en japonés con estilo de frase habilitado (abajo) y sin él (arriba)

Actualizaciones de la biblioteca Unicode

Android 13 agrega las mejoras, correcciones y cambios más recientes que se incluyen en Unicode ICU 70, Unicode CLDR 40 y Unicode 14.0.

A continuación, se muestran algunos cambios notables:

  • Para el inglés (Canadá) en‑CA y el inglés (República de Filipinas) en‑PH, se usan los recursos de traducción del inglés (Estados Unidos) en cuando no se encuentran disponibles los recursos de traducción del inglés (Reino Unido) en‑GB.
  • Se introdujo la categoría plural many para el español es, el italiano it, el portugués pt y el portugués (Portugal) pt‑PT. De forma similar al francés en CLDR v38, se usa para grandes cantidades.

Fuentes de vectores de color

Emoji de vector de COLRv1 (izquierda) y emoji de mapa de bits (derecha)

A partir de Android 13, el sistema incluye compatibilidad con renderización para las fuentes de COLR versión 1 (COLRv1) y actualiza los emojis del sistema al formato COLRv1. COLRv1 es un formato de fuente muy compacto que se procesa de forma rápida y nítida en cualquier tamaño.

En el caso de la mayoría de las apps, el sistema maneja todo y COLRv1 simplemente funciona. Sin embargo, si tu app implementa su propia renderización de texto y usa las fuentes del sistema, te recomendamos probar la renderización de emojis.

Para obtener más información sobre COLRv1, consulta los siguientes recursos:

API de posición de la Configuración rápida

La Configuración rápida del panel de notificaciones les permite a los usuarios cambiar la configuración o realizar acciones rápidas sin salir del contexto de una app. En el caso de las apps que brindan tarjetas personalizadas, permitimos que los usuarios descubran y agreguen tarjetas a la Configuración rápida con mayor facilidad. Con una nueva API de posición de tarjetas, tu app ahora puede solicitarle al usuario que agregue, de forma directa, tu tarjeta personalizado al conjunto de tarjetas activas de Configuración rápida. Un nuevo diálogo del sistema permite al usuario agregar la tarjeta en un solo paso, sin salir de tu app, en lugar de tener que ir a la Configuración rápida para agregar la tarjeta.

Diálogo en el que se le pregunta al usuario si desea agregar una tarjeta a la Configuración rápida.

Vista previa del portapapeles

A partir de Android 13, el sistema muestra una confirmación visual estándar cuando se agrega contenido al portapapeles. La nueva confirmación hace lo siguiente:

  • Confirma que el contenido se copió de forma correcta.
  • Proporciona una vista previa del contenido copiado.

Esta función estandariza las varias notificaciones que muestran las apps después de copiar y les ofrece a los usuarios más control sobre su portapapeles. Para obtener información adicional, visita la página de la función de copiar y pegar.

Widget de copiar y pegar
Se muestra la nueva IU cuando el contenido entra al portapapeles.

Gesto de retroceso predictivo

Android 13 introduce un gesto de retroceso predictivo para dispositivos Android, como teléfonos, pantallas grandes y dispositivos plegables. Para admitir esta función, deberás actualizar la app.

A fin de consultar la documentación detallada, visita Cómo actualizar la app para admitir un gesto de retroceso predictivo. También puedes probar nuestro codelab.

Audio Bluetooth de bajo consumo

El audio de bajo consumo (LE) es una compilación de audio inalámbrico que reemplaza a la versión clásica de Bluetooth y habilita determinados casos de uso y topologías de conexión. Permitirá a los usuarios compartir y transmitir audio a amigos y familiares o suscribirse a transmisiones públicas de información, entretenimiento o accesibilidad. Se diseñó para garantizar que los usuarios puedan recibir audio de alta fidelidad sin sacrificar la duración de la batería y cambiar sin problemas entre diferentes casos de uso que no son posibles con Bluetooth Classic. A partir de Android 13, el sistema incluye compatibilidad integrada con audio de bajo consumo, por lo que los desarrolladores reciben estas capacidades sin cargo en dispositivos compatibles.

MIDI 2.0

A partir de Android 13, el sistema incluye compatibilidad con el estándar MIDI 2.0, incluida la capacidad de conectar hardware MIDI 2.0 a través de USB. Este estándar ofrece funciones como una mayor resolución para controladores, mejor compatibilidad con la entonación no occidental y un rendimiento más expresivo mediante controladores por nota.

Mejoras en la eficiencia de la pantalla de presentación

Android 13 mejora la eficiencia de las pantallas de presentación animadas en la API de pantalla de presentación:

  • El sistema infiere la duración de la animación directamente a partir de AnimatedVectorDrawable. Antes de Android 13, era necesario configurar windowSplashScreenAnimationDuration en forma directa.

  • Usa el nuevo atributo windowSplashScreenBehavior para tener más control sobre si tu app siempre muestra el ícono en la pantalla de presentación de Android 13 y versiones posteriores.

Para ver la documentación detallada, consulta Pantallas de presentación.

Optimizaciones de ART

En Android 13 (nivel de API 33) y versiones posteriores, ART permite cambiar de código nativo y viceversa mucho más rápido, con llamadas a JNI hasta 2.5 veces más rápidas. También se volvió a trabajar en el procesamiento de referencias del tiempo de ejecución para que no sea bloqueante, lo que reduce aún más el bloqueo. Además, puedes usar la API pública de Reference.refersTo() para recuperar objetos inaccesibles antes y notarás que el intérprete ahora es más rápido gracias a las búsquedas de clases y métodos optimizadas. ART también realiza más verificaciones de código de bytes durante la instalación, lo que evita el costo de la verificación durante el tiempo de ejecución y mantiene los tiempos de inicio de la app rápidos.

Privacidad y seguridad

Exportación más segura de receptores registrados en el contexto

Para que los receptores de tiempo de ejecución sean más seguros, Android 13 introduce la capacidad de que tu app especifique si un receptor de emisión registrado debe exportarse y ser visible para otras apps en el dispositivo. En versiones anteriores de Android, cualquier app del dispositivo podía enviar una transmisión sin protección a un receptor registrado dinámicamente, a menos que ese receptor estuviera protegido por un permiso de firma.

Esta configuración de exportación está disponible en las apps que realizan al menos una de las siguientes acciones:

Selector de fotos

Android 13 (nivel de API 33) y versiones posteriores incluyen una experiencia de selector de fotos. Cuando la app inicia el selector de fotos, los usuarios seleccionan imágenes y videos específicos para compartir con la app, por ejemplo, fotos de perfil, en lugar de brindarle acceso a la app para ver toda la biblioteca multimedia. Esta es la forma recomendada de acceder a las fotos y los videos del usuario.

El selector de fotos les ofrece mayor privacidad a los usuarios, ya que tu app no necesita declarar ningún permiso de tiempo de ejecución. Además, el selector de fotos proporciona una IU estandarizada e integrada para las apps, lo que crea una experiencia del usuario más coherente.

Nuevo permiso de tiempo de ejecución para dispositivos de Wi-Fi cercanos

Android 13 (nivel de API 33) introduce un nuevo permiso de tiempo de ejecución en el grupo de permisos NEARBY_DEVICES para apps que administran las conexiones de un dispositivo a puntos de acceso cercanos a través de Wi-Fi. Estas apps deben declarar el permiso nuevo, NEARBY_WIFI_DEVICES, cuando llaman a varias APIs de Wi-Fi. Además, siempre que las apps no obtengan una ubicación física de las API de Wi-Fi, no necesitan declarar el permiso ACCESS_FINE_LOCATION cuando se orientan a Android 13 o versiones posteriores.

Más información sobre el permiso para dispositivos de Wi-Fi cercanos.

Nuevo permiso para usar alarmas exactas

Si la app se orienta a Android 13 o versiones posteriores, puedes usar el permiso USE_EXACT_ALARM, que se otorga automáticamente a tu app. Sin embargo, para que tu app pueda usar este permiso, debe cumplir al menos con uno de los siguientes criterios:

  • La app es una alarma o un temporizador.
  • La app es un calendario que muestra notificaciones de los próximos eventos.

Si la app establece alarmas exactas, pero no cumple con ninguno de los casos que se muestran en la lista anterior, en su lugar, declara el permiso SCHEDULE_EXACT_ALARM, y prepárate para la situación en la que el usuario deniega el acceso a tu app.

Reducción de permisos para desarrolladores

A partir de Android 13, tu app puede revocar el acceso a los permisos de tiempo de ejecución sin usar. Esta API permite que tu app realice tareas que mejoren la privacidad, como las siguientes:

  • Quitar permisos sin usar
  • Cumplir con las prácticas recomendadas para permisos, lo que mejora la confianza de los usuarios Te recomendamos que consideres mostrarles a los usuarios un diálogo en el que se incluyan los permisos que revocaste de forma proactiva.

Esquema de firma de APK v3.1

Android 13 agrega compatibilidad con el esquema de firma de APK v3.1, que mejora el esquema de firma de APK v3 existente. Este esquema aborda algunos de los problemas conocidos con el esquema de firma de APK v3 en relación con la rotación. En particular, el esquema de firma v3.1 admite la orientación de versiones del SDK, lo que permite que la rotación se oriente a una versión posterior de la plataforma.

El esquema de firma v3.1 usa un ID de bloque que no se reconoce en 12L ni versiones anteriores. Por lo tanto, la plataforma aplica el siguiente comportamiento del firmante:

  • Los dispositivos que ejecutan Android 13 o versiones posteriores usan el firmante rotado en el bloque v3.1.
  • Los dispositivos que ejecutan versiones anteriores de Android ignoran el firmante rotado y, en su lugar, usan el original en el bloque v3.0.

Las apps que aún no rotaron su clave de firma no requieren ninguna acción adicional. Cada vez que estas apps elijan rotar, el sistema aplicará el esquema de firma v3.1 de forma predeterminada.

Las apps que ya rotaron y quieren seguir usando su clave de firma rotada en el bloque de firma v3.0 deben actualizar la invocación apksigner:

apksigner sign --ks keystore.jks |
  --key key.pk8 --cert cert.x509.pem
  --rotation-min-sdk-version API_LEVEL
  [signer_options] app-name.apk

… donde API_LEVEL es 32 o menor.

Mejores informes de errores en Keystore y KeyMint

En el caso de las apps que generan claves, Keystore y KeyMint ahora proporcionan indicadores de error más detallados y precisos. Agregamos una jerarquía de clases de excepciones en java.security.ProviderException, con excepciones específicas de Android que incluyen códigos de error de Keystore y KeyMint y si se puede reintentar el error. También puedes modificar los métodos para la generación y el uso de claves (firma, encriptación) a fin de arrojar las excepciones nuevas. Las mejoras en los informes de errores no se limitan a la generación de claves y ahora deberían brindarte lo que necesitas para reintentar la generación de claves.

Compatibilidad con tablets y pantallas grandes

Android 13 se basa en las optimizaciones para tablets que se introdujeron en Android 12 y en la actualización de funciones de 12L, lo que incluye las optimizaciones para la IU del sistema, mejor organización de tareas múltiples y modos de compatibilidad mejorados. Como parte de la prueba, asegúrate de que las apps luzcan lo mejor posible en tablets y otros dispositivos con pantalla grande.

Para obtener más información sobre las novedades y lo que puedes probar, consulta la página Compatibilidad con tablets y dispositivos con pantalla grande.

Gráficos

Sombreadores programables

Un sombreador animado AGSL, adaptado de este sombreador GLSL.

A partir de Android 13, el sistema incluye compatibilidad con objetos RuntimeShader programables, con comportamiento definido mediante Android Graphics Shading Language (AGSL). AGSL comparte gran parte de la sintaxis con GLSL, pero funciona dentro del motor de renderización de Android para personalizar la pintura en el lienzo de Android y filtrar el contenido de View. Android usa estos sombreadores de forma interna para implementar efectos de ondas, desenfoque y sobredesplazamiento de estiramiento. Android 13 y versiones posteriores te permiten crear efectos avanzados similares para tu app.

Mejoras de Choreographer

Android 13 incorpora métodos de API pública para Choreographer y ASurfaceControl que proporcionan a las apps más información sobre los cronogramas de marcos posibles y agrega más contexto a SurfaceFlinger sobre el ciclo de vida del marco. Al igual que antes, las apps pueden publicar una devolución de llamada en Choreographer y recibir información de cronograma de marcos. En Android 13 (nivel de API 33), Choreographer muestra varios tiempos de presentación posibles y sus correspondientes plazos de marcos. Las apps pueden elegir la hora de presentación y, luego, notificar a SurfaceFlinger sobre la elección. SurfaceFlinger luego no intenta aplicar transacciones ni bloquear los búferes antes del tiempo de presentación deseado.

Si tu app usa los nuevos métodos Choreographer y SurfaceControl, puedes ver el ciclo de vida de los marcos de la app en un registro de Perfetto.

Cámara

Captura de video en HDR

A partir de Android 13, las APIs de Camera2 admiten la captura de video de alto rango dinámico (HDR), que te permite obtener una vista previa y grabar contenido de video en HDR con la cámara. En comparación con el rango dinámico estándar (SDR), HDR ofrece un rango de colores más amplio y aumenta el rango dinámico del componente de luminancia (de los 100 cd/m2 actuales a miles de cd/m2). Esto da como resultado una calidad de video que se ajusta más a la vida real, con colores más nítidos, reflejos más brillantes y sombras más oscuras.

Para obtener más información sobre la captura de video en HDR, consulta la documentación sobre captura de video en HDR.

Contenido multimedia

Sonido espacial

El audio espacial es una experiencia de audio envolvente que hace que el contenido multimedia suene más realista para los usuarios. Consulta nuestra documentación sobre audio espacial para obtener detalles sobre cómo realizar la integración con esta función.

Enrutamiento de audio anticipado

Para ayudar a las apps multimedia a identificar cómo se enrutará su audio, Android 13 incorpora las APIs de enrutamiento de audio en la clase AudioManager. La API de getAudioDevicesForAttributes() te permite recuperar una lista de dispositivos que pueden usarse para reproducir el audio especificado, y la API de getDirectProfilesForAttributes() te ayuda a comprender si la transmisión de audio se puede reproducir directamente. Usa estas APIs nuevas a fin de determinar el mejor AudioFormat para usar en tu pista de audio.

Accesibilidad

Audiodescripción

Android 13 (nivel de API 33) introduce una nueva preferencia de accesibilidad para todo el sistema que les permite a los usuarios habilitar audiodescripciones en todas las apps. Una audiodescripción es una pista adicional de narración que consiste en un narrador que habla en toda la presentación y describe lo que sucede en la pantalla durante las pausas naturales del audio. Las apps pueden seguir la preferencia del usuario por pistas de audiodescripción mediante la consulta con isAudioDescriptionRequested(), como se muestra en el siguiente fragmento de código:

Kotlin

private lateinit var accessibilityManager: AccessibilityManager

// In onCreate():
accessibilityManager = getSystemService(AccessibilityManager::class.java)

// Where your media player is initialized
if (accessibilityManager.isAudioDescriptionRequested) {
    // User has requested to enable audio descriptions
}

Java

private AccessibilityManager accessibilityManager;

// In onCreate():
accessibilityManager = getSystemService(AccessibilityManager.class);

// Where your media player is initialized
if(accessibilityManager.isAudioDescriptionRequested()) {
    // User has requested to enable audio descriptions
}

Las apps pueden supervisar el cambio de preferencias del usuario si se agrega un objeto de escucha a AccessbilityManager:

Kotlin

private val listener =
    AccessibilityManager.AudioDescriptionRequestedChangeListener { enabled ->
        // Preference changed; reflect its state in your media player
    }

override fun onStart() {
    super.onStart()

    accessibilityManager.addAudioDescriptionRequestedChangeListener(mainExecutor, listener)
}

override fun onStop() {
    super.onStop()

    accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener)
}

Java

private AccessibilityManager.AudioDescriptionRequestedChangeListener listener = enabled -> {
    // Preference changed; reflect its state in your media player
};

@Override
protected void onStart() {
    super.onStart();

    accessibilityManager.addAudioDescriptionRequestedChangeListener(getMainExecutor(), listener);
}

@Override
protected void onStop() {
    super.onStop();

    accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener);
}

Funcionalidad principal

Actualizaciones de OpenJDK 11

Android 13 inicia la tarea de actualización de las bibliotecas principales de Android a fin de alinearlas con la versión de OpenJDK 11 con LTS, con actualizaciones de biblioteca y compatibilidad con el lenguaje Java 11 para desarrolladores de aplicaciones y plataformas. Los cambios principales de la biblioteca que se introducen en Android 13 también estarán disponibles para dispositivos con Android 12 mediante una actualización del sistema de Google Play al módulo de línea principal del ART.

Android 13 incluye los siguientes cambios en las bibliotecas principales:

  • Compatibilidad con la palabra clave var para variables locales y como lambdas de parámetros.
  • Métodos nuevos en la clase String:

    • isBlank()
    • lines()
    • repeat()
    • strip()
    • stripLeading()
    • stripTrailing()
  • Compatibilidad con Collection.toArray(IntFunction) para facilitar la adaptación de una colección a un array.

  • Compatibilidad con ifPresentOrElse(), isEmpty(), orElseThrow() y stream() en las clases java.util Optional, OptionalDouble, OptionalInt y OptionalLong.

  • Compatibilidad adicional con SocketOptions, lo que incluye la reutilización de sockets.

  • Funcionalidad para NullReader, NullWriter, InputStream, OutputStream y transferTo() Reader que transfiere caracteres de lectura a Writer.

  • Funcionalidad adicional para la codificación y decodificación de URL mediante Charsets.

  • Funcionalidad Charset para FileReader, FileWriter, PrintStream y PrintWriter.

  • Nuevas funciones transferTo(), readNBytes(), readAllBytes() y writeBytes() para ByteArrayInput o OutputStream y Input o OutputStream.

  • Compatibilidad del entorno de ejecución y del compilador para java.lang.invoke.VarHandle.

  • Actualización interna de java.util.concurrent para la API de OpenJDK 11 mediante VarHandle.

Java y OpenJDK son marcas o marcas registradas de Oracle o sus afiliados.