Novedades de productos

Tercera versión beta de Android 17

Lectura de 5 min
Matthew McCullough
Vicepresidente de Administración de Productos, Desarrollador de Android

Android 17 alcanzó oficialmente la estabilidad de la plataforma hoy con la versión beta 3. Eso significa que la superficie de la API está bloqueada. Puedes realizar pruebas de compatibilidad finales y enviar tus apps orientadas a Android 17 a Play Store. Además, la versión beta 3 incluye una gran cantidad de funciones nuevas para ayudarte a compilar aplicaciones mejores, más seguras y altamente integradas.

Prepara tus apps, bibliotecas, herramientas y motores de juegos

Si desarrollas un SDK, una biblioteca, una herramienta o un motor de juegos, es aún más importante preparar las actualizaciones necesarias ahora para evitar que los desarrolladores de apps y juegos descendentes se bloqueen por problemas de compatibilidad y permitirles orientarse a las funciones más recientes del SDK. Informa a tus desarrolladores descendentes si se necesitan actualizaciones para admitir completamente Android 17.

large_Android17Timeline01.png

Las pruebas implican instalar tu app de producción o una app de prueba que use tu biblioteca o motor con Google Play o por otros medios en un dispositivo o emulador que ejecute Android 17 Beta 3. Revisa todos los flujos de tu app y busca problemas funcionales o de IU. Revisa los cambios de comportamiento para enfocar tus pruebas. Cada versión de Android contiene cambios en la plataforma que mejoran la privacidad, la seguridad y la experiencia general del usuario, y estos cambios pueden afectar tus apps. Estos son algunos cambios en los que debes enfocarte:

  • Cambio de tamaño en pantallas grandes: Una vez que te orientes a Android 17, ya no podrás inhabilitar el mantenimiento de las restricciones de orientación, cambio de tamaño y relación de aspecto en pantallas grandes.
  • Carga de código dinámico: Si tu app se orienta a Android 17 o versiones posteriores, la protección de carga de código dinámico (DCL) más segura que se introdujo en Android 14 para archivos DEX y JAR ahora se extiende a las bibliotecas nativas. Todos los archivos nativos cargados con System.load() deben marcarse como de solo lectura. De lo contrario, el sistema arrojará UnsatisfiedLinkError.
  • Habilita CT de forma predeterminada: La transparencia de certificados (CT) está habilitada de forma predeterminada. (En Android 16, CT está disponible, pero las apps debían habilitarla).
  • Protecciones de red local: Las apps que se orientan a Android 17 o versiones posteriores tienen bloqueado el acceso a la red local de forma predeterminada. Si es posible, cambia a usar selectores que preserven la privacidad y usa el nuevo ACCESS_LOCAL_NETWORK para obtener acceso amplio y persistente.

Mejoras en la cámara y el contenido multimedia

Opciones de personalización del selector de fotos

Android ahora te permite adaptar la presentación visual del selector de fotos para complementar mejor la interfaz de usuario de tu app. Si aprovechas la nueva API de PhotoPickerUiCustomizationParams, puedes modificar la relación de aspecto de la vista de cuadrícula del cuadrado estándar de 1:1 a una pantalla vertical de 9:16. Esta flexibilidad se extiende al intent ACTION_PICK_IMAGES y al selector de fotos incorporado, lo que te permite mantener una estética cohesiva cuando los usuarios interactúan con el contenido multimedia.

large_(Default)11aspectratio.png

Todo esto forma parte de nuestro esfuerzo para ayudar a que el selector de fotos de Android que preserva la privacidad se ajuste sin problemas a la experiencia de tu app. Obtén más información para incorporar el selector de fotos directamente en tu app para obtener la experiencia más nativa.

val params = PhotoPickerUiCustomizationParams.Builder()
.setAspectRatio(PhotoPickerUiCustomizationParams.ASPECT_RATIO_PORTRAIT_9_16)
.build()
val intent = Intent(MediaStore.ACTION_PICK_IMAGES).apply {
putExtra(MediaStore.EXTRA_PICK_IMAGES_UI_CUSTOMIZATION_PARAMS, params)
}
startActivityForResult(intent, REQUEST_CODE)

Compatibilidad con el formato de imagen RAW14: Android 17 introduce compatibilidad con el formato de imagen RAW14, el estándar de la industria de facto para la fotografía digital de alta gama, a través de la nueva constante ImageFormat.RAW14. RAW14 es un formato de un solo canal de 14 bits por píxel que usa un diseño densamente empaquetado en el que cada cuatro píxeles consecutivos se empaquetan en siete bytes.

Extensiones de cámara definidas por el proveedor: Android 17 agrega extensiones definidas por el proveedor para permitir que los socios de hardware definan e implementen modos de extensión de cámara personalizados para brindarte acceso a las mejores y más recientes funciones de la cámara, como "Super Resolution" o mejoras de vanguardia basadas en IA. Puedes consultar estos modos con la API de isExtensionSupported(int).

APIs de tipo de dispositivo de cámara: Las nuevas APIs de Android 17 te permiten consultar el tipo de dispositivo subyacente para identificar si una cámara es hardware integrado, una cámara web USB externa o una cámara virtual.

Compatibilidad con audífonos Bluetooth LE Audio

Android ahora incluye una categoría de dispositivo específica para audífonos Bluetooth de bajo consumo (BLE) Audio. Con la incorporación de la constante AudioDeviceInfo.TYPE_BLE_HEARING_AID, tu app ahora puede distinguir los audífonos de los auriculares normales.

val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
val devices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)
val isHearingAidConnected = devices.any { it.type == AudioDeviceInfo.TYPE_BLE_HEARING_AID }

Enrutamiento de audio detallado para audífonos

Android 17 permite a los usuarios administrar de forma independiente dónde se reproducen sonidos específicos del sistema. Pueden elegir enrutar notificaciones, tonos de llamada y alarmas a audífonos conectados o al altavoz integrado del dispositivo.

Codificador de software HE-AAC extendido

Android 17 introduce un codificador de software HE-AAC extendido proporcionado por el sistema. Este codificador admite tasas de bits bajas y altas con codificación unificada de voz y audio. Puedes acceder a este codificador a través de la API de MediaCodec con el nombre c2.android.xheaac.encoder o consultando el tipo de MIME audio/mp4a-latm.

val encoder = MediaCodec.createByCodecName("c2.android.xheaac.encoder")
val format = MediaFormat.createAudioFormat(MediaFormat.MIMETYPE_AUDIO_AAC, 48000, 1)
format.setInteger(MediaFormat.KEY_BIT_RATE, 24000)
format.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectXHE)
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)

Mejoras de rendimiento y batería

Reduce los wakelocks con compatibilidad con el objeto de escucha para alarmas de allow-while-idle

Android 17 introduce una nueva variante de AlarmManager.setExactAndAllowWhileIdle que acepta un OnAlarmListener en lugar de un PendingIntent. Este nuevo mecanismo basado en devolución de llamada es ideal para las apps que actualmente dependen de wakelocks continuos para realizar tareas periódicas, como las apps de mensajería que mantienen conexiones de sockets.

val alarmManager = getSystemService(AlarmManager::class.java)
val listener = AlarmManager.OnAlarmListener {
// Do work here
}
alarmManager.setExactAndAllowWhileIdle(
AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 60000,
listener,
null
)

Actualizaciones de privacidad

Botón de ubicación proporcionado por el sistema

localcafe.jpg

Android presenta un botón de ubicación renderizado por el sistema que podrás incorporar directamente en el diseño de tu app con una biblioteca de Android Jetpack. Cuando un usuario presiona este botón del sistema, tu app obtiene acceso a la ubicación precisa solo para la sesión actual. Para implementar esto, debes declarar el permiso USE_LOCATION_BUTTON.

Configuración de visibilidad de contraseña discreta para teclados táctiles y físicos

Esta función divide el parámetro de configuración del sistema "Mostrar contraseñas" existente en dos preferencias de usuario distintas: una para las entradas táctiles y otra para las entradas de teclado físico (hardware). Los caracteres ingresados a través de teclados físicos ahora se ocultan de inmediato de forma predeterminada.

val isPhysical = event.source and InputDevice.SOURCE_KEYBOARD == InputDevice.SOURCE_KEYBOARD
val shouldShow = android.text.ShowSecretsSetting.shouldShowPassword(context, isPhysical)

Seguridad

Carga de código dinámico de solo lectura forzada

Para mejorar la seguridad contra los ataques de inyección de código, Android ahora exige que las bibliotecas nativas cargadas de forma dinámica sean de solo lectura. Si tu app se orienta a Android 17 o versiones posteriores, todos los archivos nativos cargados con System.load() deben marcarse como de solo lectura de antemano.

val libraryFile = File(context.filesDir, "my_native_lib.so")
// Mark the file as read-only before loading to comply with Android 17+ security requirements
libraryFile.setReadOnly()
System.load(libraryFile.absolutePath)

Firma de APK híbrida de criptografía poscuántica (PQC)

Para prepararse para los avances futuros en la computación cuántica, Android introduce compatibilidad con la criptografía poscuántica (PQC) a través del nuevo esquema de firma de APK v3.2. Este esquema utiliza un enfoque híbrido, que combina una firma clásica con una firma ML-DSA.

Experiencia del usuario y IU del sistema

Mejor compatibilidad con widgets en pantallas externas

Esta función mejora la coherencia visual de los widgets de la app cuando se muestran en pantallas externas o conectadas con diferentes densidades de píxeles con unidades DP o SP.

val options = appWidgetManager.getAppWidgetOptions(appWidgetId)
val displayId = options.getInt(AppWidgetManager.OPTION_APPWIDGET_DISPLAY_ID)
val remoteViews = RemoteViews(context.packageName, R.layout.widget_layout)
remoteViews.setViewPadding(
R.id.container,
16f, 8f, 16f, 8f,
TypedValue.COMPLEX_UNIT_DIP
)

Etiquetas de apps ocultas en la pantalla principal

Hiddenapplabelsonthehomescreen.png

Android ahora proporciona un parámetro de configuración del usuario para ocultar los nombres (etiquetas) de las apps en el espacio de trabajo de la pantalla principal. Asegúrate de que el ícono de tu app sea distinto y reconocible.

Pantalla en pantalla interactiva para computadoras de escritorio

A diferencia de la pantalla en pantalla tradicional, estas ventanas fijas siguen siendo interactivas mientras permanecen siempre en primer plano sobre otras ventanas de aplicaciones en el modo de escritorio.

val appTask: ActivityManager.AppTask = activity.getSystemService(ActivityManager::class.java).appTasks[0]
appTask.requestWindowingLayer(
ActivityManager.AppTask.WINDOWING_LAYER_PINNED,
context.mainExecutor,
object : OutcomeReceiver<Int, Exception> {
override fun onResult(result: Int) {
if (result == ActivityManager.AppTask.WINDOWING_LAYER_REQUEST_GRANTED) {
// Task successfully moved to pinned layer
}
}
override fun onError(error: Exception) {}
}
)

Barra de herramientas de grabación de pantalla rediseñada

large_Recording-redesign.png

Funcionalidad principal

Configuración de exclusión de apps de VPN

Con el nuevo intent ACTION_VPN_APP_EXCLUSION_SETTINGS, tu app puede iniciar una pantalla de configuración administrada por el sistema en la que los usuarios pueden seleccionar aplicaciones para omitir el túnel de VPN.

val intent = Intent(Settings.ACTION_VPN_APP_EXCLUSION_SETTINGS)
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
}

Actualizaciones de la API de OpenJDK 25 y 21

Esta actualización incluye funciones y refinamientos extensos de OpenJDK 21 y OpenJDK 25, incluida la compatibilidad más reciente con Unicode y la compatibilidad mejorada con SSL para grupos con nombre en TLS.

Comienza a usar Android 17

Puedes inscribir cualquier dispositivo Pixel compatible o usar las imágenes del sistema de 64 bits con Android Emulator.

  • Compila con el nuevo SDK y reporta problemas en la página de comentarios.
  • Prueba la compatibilidad de tu app actual y descubre si se ve afectada por los cambios en Android 17.

Para obtener información completa, visita el sitio para desarrolladores de Android 17.

Escrito por:

Seguir leyendo