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
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
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()
ygetApplicationLocales()
enLocaleManager
, 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:
- 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)
- Usar el teclado para convertir los caracteres hiragana a kanji
- Repetir la búsqueda con caracteres de kanji
- 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.
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.
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ñoles
, el italianoit
, el portuguéspt
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
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:
- Anuncio del blog para desarrolladores de Chrome
- Envío de fuentes de vectores de color COLRv1 en Chrome (video)
- Especificación de la tabla de COLR
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.
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.
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 controles, 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 configurarwindowSplashScreenAnimationDuration
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 se debe exportar 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:
- Usa la clase
ContextCompat
a partir de la versión 1.9.0 o una posterior de la biblioteca principal de AndroidX. - Orienta tu app a Android 13 o versiones posteriores.
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
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.
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 a 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()
ystream()
en las clasesjava.util
Optional
,OptionalDouble
,OptionalInt
yOptionalLong
.Compatibilidad adicional con
SocketOptions
, lo que incluye la reutilización de sockets.Funcionalidad para
NullReader
,NullWriter
,InputStream
,OutputStream
ytransferTo()
Reader
que transfiere caracteres de lectura aWriter
.Funcionalidad adicional para la codificación y decodificación de URL mediante
Charsets
.Funcionalidad
Charset
paraFileReader
,FileWriter
,PrintStream
yPrintWriter
.Nuevas funciones
transferTo()
,readNBytes()
,readAllBytes()
ywriteBytes()
paraByteArrayInput
oOutputStream
yInput
oOutputStream
.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 medianteVarHandle
.
Java y OpenJDK son marcas o marcas registradas de Oracle o sus afiliados.