Android 17 alcanzó oficialmente la estabilidad de la plataforma hoy con la versión beta 3. Esto significa que la plataforma 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 que prepares las actualizaciones necesarias ahora para evitar que los desarrolladores de apps y juegos que dependen de tus productos se vean bloqueados por problemas de compatibilidad y para permitirles que se orienten a las funciones más recientes del SDK. Informa a tus desarrolladores downstream si se necesitan actualizaciones para brindar compatibilidad total con Android 17.
Las pruebas implican instalar tu app de producción o una app de prueba que use tu biblioteca o motor con Google Play o con 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 la 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 segmentes tus apps para 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 dinámica de código: Si tu app se orienta a Android 17 o versiones posteriores, la protección de carga dinámica de código (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 que se carguen con System.load() se deben marcar como de solo lectura. De lo contrario, el sistema arrojará UnsatisfiedLinkError.
- Habilitar CT de forma predeterminada: El Certificado de transparencia (CT) está habilitado de forma predeterminada. (En Android 16, la CT está disponible, pero las apps debían habilitarla).
- Protecciones de red local: Las apps orientadas a Android 17 o versiones posteriores tienen bloqueado el acceso a la red local de forma predeterminada. Si es posible, cambia a selectores que preserven la privacidad y usa el nuevo permiso ACCESS_LOCAL_NETWORK para obtener acceso amplio y persistente.
Mejoras en el contenido multimedia y la cámara
Opciones de personalización del selector de fotos
Android ahora te permite personalizar la presentación visual del selector de fotos para complementar mejor la interfaz de usuario de tu app. Aprovechando 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 tanto al intent ACTION_PICK_IMAGES como al selector de fotos incorporado, lo que te permite mantener una estética coherente cuando los usuarios interactúan con el contenido multimedia.
Todo esto forma parte de nuestro esfuerzo por ayudar a que el selector de fotos de Android, que preserva la privacidad, se adapte sin problemas a la experiencia en la app. Obtén más información para incorporar el selector de fotos directamente en tu app y lograr la experiencia más nativa posible.
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 incorpora compatibilidad con el formato de imagen RAW14, el estándar de facto de la industria 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 la 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 la cámara personalizados para brindarte acceso a las mejores y más recientes funciones de la cámara, como la "superresolución" o las mejoras de vanguardia impulsadas por 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 un 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 con Bluetooth de bajo consumo (BLE). 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 que los usuarios administren de forma independiente dónde se reproducen sonidos específicos del sistema. Pueden elegir enrutar las notificaciones, los tonos y las alarmas a los audífonos conectados o a la bocina integrada del dispositivo.
Codificador de software HE-AAC extendido
Android 17 incluye un codificador de software HE-AAC extendido proporcionado por el sistema. Este codificador admite tasas de bits bajas y altas con una 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 en el rendimiento y la batería
Reduce los bloqueos de activación con compatibilidad de objetos de escucha para las alarmas de tipo allow-while-idle
Android 17 presenta una nueva variante de AlarmManager.setExactAndAllowWhileIdle que acepta un OnAlarmListener en lugar de un PendingIntent. Este nuevo mecanismo basado en devoluciones de llamada es ideal para las apps que actualmente dependen de bloqueos de activación continuos para realizar tareas periódicas, como las apps de mensajería que mantienen conexiones de socket.
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
Android presentará 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, se le otorga a tu app 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ñas 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 que se ingresan con 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
Aplicación de la carga de código dinámico de solo lectura
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 que se carguen con System.load() se deben marcar 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 con criptografía poscuántica (PQC)
Para prepararse para los futuros avances en la computación cuántica, Android presenta la 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 la 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 conectadas o externas 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
Android ahora proporciona un parámetro de configuración del usuario para ocultar los nombres de las apps (etiquetas) en el espacio de trabajo de la pantalla principal. Asegúrate de que el ícono de tu app sea distintivo y reconocible.
Pantalla en pantalla con interacción para computadoras de escritorio
A diferencia de la pantalla en pantalla tradicional, estas ventanas fijadas siguen siendo interactivas y se mantienen siempre visibles sobre las ventanas de otras 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
Funcionalidad principal
Configuración de exclusión de apps de la 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 VPN.
val intent = Intent(Settings.ACTION_VPN_APP_EXCLUSION_SETTINGS)
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
}Actualizaciones de las APIs de OpenJDK 25 y 21
Esta actualización incluye funciones y mejoras extensas 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 SDK nuevo y, luego, informa los problemas en la página de comentarios.
- Prueba la compatibilidad de tu app actual y averigua si se ve afectada por los cambios en Android 17.
Para obtener información completa, visita el sitio para desarrolladores de Android 17.
-
Novedades de productosHoy lanzamos Android 17 y lo ponemos a disposición de la mayoría de los dispositivos Pixel compatibles. Busca dispositivos nuevos que ejecuten Android 17 en los próximos meses.
Matthew McCullough • Lectura de 13 min -
Novedades de productosHoy, en Android Dev Summit, anunciamos la amplia disponibilidad de muchas herramientas y APIs diseñadas para eliminar las dificultades cotidianas y brindarte más flexibilidad para crear apps para Android increíbles.
Matthew McCullough • Lectura de 4 min -
Novedades de productosHoy lanzamos el primer conjunto de tareas de largo horizonte (LHT), que son tareas de gran complejidad que a un ingeniero le lleva varios días o incluso una semana completar. También presentamos la evaluación de agentes, que comienza con los agentes de los proveedores de modelos correspondientes.
Matthew McCullough • Lectura de 3 min
Recibe la información más reciente sobre el desarrollo de Android en tu bandeja de entrada todas las semanas.