Características y API

Android 17 incluye excelentes funciones y APIs para desarrolladores. En las siguientes secciones, se resumen estas funciones para ayudarte a comenzar a usar las APIs relacionadas.

Para obtener una lista detallada de las APIs nuevas, modificadas y quitadas, consulta el informe de diferencias de APIs. Para obtener detalles sobre las nuevas APIs, consulta la referencia de la API de Android. Las nuevas APIs están destacadas para que sea más fácil identificarlas.

También deberías revisar las áreas en las que los cambios de la plataforma podrían afectar a tus apps. Si deseas obtener más información, consulta las siguientes páginas:

Funcionalidad principal

Android 17 agrega las siguientes funciones nuevas relacionadas con la funcionalidad principal de Android.

Nuevos activadores de ProfilingManager

Android 17 adds several new system triggers to ProfilingManager to help you collect in-depth data to debug performance issues.

The new triggers are:

To understand how to set up the system trigger, see the documentation on trigger-based profiling and how to retrieve and upload profiles and analyze profiling data.

Profiling trigger for app anomalies

Android 17 introduces an on-device anomaly detection service that monitors for resource-intensive behaviors and potential compatibility regressions. Integrated with ProfilingManager, this service allows your app to receive profiling artifacts triggered by specific system-detected events.

Use the TRIGGER_TYPE_ANOMALY trigger to detect system performance issues such as excessive binder calls and excessive memory usage. When an app breaches OS-defined memory limits, the anomaly trigger allows developers to receive app-specific heap dumps to help identify and fix memory issues. Additionally, for excessive binder spam, the anomaly trigger provides a stack sampling profile on binder transactions.

This API callback occurs prior to any system imposed enforcements. For example, it can help developers collect debug data before the app is terminated by the system for exceeding memory limits.

fun registerAnomalyTrigger(context: Context) {
    val profilingManager =
        context.getSystemService(ProfilingManager::class.java) ?: return
    val triggers = listOf(
        ProfilingTrigger.Builder(ProfilingTrigger.TRIGGER_TYPE_ANOMALY).build()
    )
    val callbackExecutor: Executor = Executors.newSingleThreadExecutor()
    val resultCallback = Consumer<ProfilingResult> { profilingResult ->
        if (profilingResult.errorCode == ProfilingResult.ERROR_NONE) {
            // Upload profile result to server for further analysis
            profilingResult.resultFilePath?.let { setupProfileUploadWorker(it) }
        }
    }
    profilingManager.registerForAllProfilingResults(
        callbackExecutor,
        resultCallback
    )
    profilingManager.addProfilingTriggers(triggers)
}

APIs de JobDebugInfo

Android 17 引入了新的 JobDebugInfo API,可帮助开发者调试其 JobScheduler 作业,例如作业未运行的原因、作业运行了多长时间以及其他聚合信息。

扩展后的 JobDebugInfo API 的第一个方法是 getPendingJobReasonStats(),它会返回一个映射,其中包含作业处于待执行状态的原因及其各自的累计待处理时长。此方法结合了 getPendingJobReasonsHistory() 和 getPendingJobReasons() 方法,可让您深入了解预定作业未按预期运行的原因,但通过在单个方法中提供时长和作业原因,简化了信息检索。

例如,对于指定的 jobId,该方法可能会返回 PENDING_JOB_REASON_CONSTRAINT_CHARGING 和 60000 毫秒的时长,表示由于充电限制未得到满足,作业处于待处理状态的时长为 60000 毫秒。

Reduce los bloqueos de activación con la 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.

Privacidad

Android 17 incluye las siguientes funciones nuevas para mejorar la privacidad del usuario.

Compatibilidad de la plataforma con Encrypted Client Hello (ECH)

Android 17 introduce compatibilidad de la plataforma con Encrypted Client Hello (ECH), una mejora significativa de la privacidad para las comunicaciones de red. ECH es una extensión de TLS 1.3 que encripta la indicación del nombre del servidor (SNI) durante el protocolo de enlace TLS inicial. Esta encriptación ayuda a proteger la privacidad del usuario, ya que dificulta que los intermediarios de la red identifiquen el dominio específico al que se conecta una app.

La plataforma ahora incluye las APIs necesarias para que las bibliotecas de redes implementen ECH. Esto incluye nuevas capacidades en DnsResolver para consultar registros DNS HTTPS que contengan configuraciones de ECH y nuevos métodos en los objetos SSLEngines y SSLSockets de Conscrypt para habilitar ECH pasando estas configuraciones cuando se conecta a un dominio. Los desarrolladores pueden configurar las preferencias de ECH, como habilitarla de forma oportunista o exigir su uso, a través del nuevo elemento <domainEncryption> dentro del archivo de configuración de seguridad de la red, que se aplica de forma global o por dominio.

Se espera que las bibliotecas de redes populares, como HttpEngine, WebView y OkHttp, integren estas APIs de la plataforma en futuras actualizaciones, lo que facilitará que las apps adopten ECH y mejoren la privacidad del usuario.

Para obtener más información, consulta la documentación de Encrypted Client Hello.

Selector de contactos de Android

The Android Contact Picker is a standardized, browsable interface for users to share contacts with your app. Available on devices running Android 17 (API level 37) or higher, the picker offers a privacy-preserving alternative to the broad READ_CONTACTS permission. Instead of requesting access to the user's entire address book, your app specifies the data fields it needs, such as phone numbers or email addresses, and the user selects specific contacts to share. This grants your app read access to only the selected data, ensuring granular control while providing a consistent user experience with built-in search, profile switching, and multi-selection capabilities without having to build or maintain the UI.

For more information, see the contact picker documentation.

Seguridad

Android 17 agrega las siguientes funciones nuevas para mejorar la seguridad de los dispositivos y las apps.

Modo de Protección avanzada de Android (AAPM)

El modo de Protección avanzada de Android ofrece a los usuarios de Android un nuevo y potente conjunto de funciones de seguridad, lo que marca un paso significativo en la protección de los usuarios, en especial aquellos que corren un mayor riesgo, contra ataques sofisticados. Diseñada como una función opcional, la AAPM se activa con un solo parámetro de configuración que los usuarios pueden activar en cualquier momento para aplicar un conjunto de protecciones de seguridad basadas en opiniones.

Estas configuraciones principales incluyen el bloqueo de la instalación de apps de fuentes desconocidas (transferencia local), la restricción de la señalización de datos por USB y la obligatoriedad del análisis de Google Play Protect, lo que reduce significativamente la superficie de ataque del dispositivo. Los desarrolladores pueden integrar esta función con la API de AdvancedProtectionManager para detectar el estado del modo, lo que permite que las aplicaciones adopten automáticamente una postura de seguridad reforzada o restrinjan la funcionalidad de alto riesgo cuando un usuario habilita el modo.

Firma de APKs con PQC

Android 现在支持混合 APK 签名方案,可保护应用的签名身份免受利用量子计算的潜在攻击威胁。此功能引入了一种新的 APK 签名方案,可让您将传统签名密钥(例如 RSA 或 EC)与新的后量子加密 (PQC) 算法 (ML-DSA) 搭配使用。

这种混合方法可确保您的应用在未来免受量子攻击,同时与依赖经典签名验证的旧版 Android 和设备保持完全向后兼容。

对开发者的影响

  • 使用 Play 应用签名的应用:如果您使用 Play 应用签名,则可以等待 Google Play 为您提供使用 Google Play 生成的 PQC 密钥升级混合签名的选项,从而确保您的应用受到保护,而无需手动管理密钥。
  • 使用自行管理密钥的应用:自行管理签名密钥的开发者可以利用更新后的 Android 构建工具(例如 apksigner)轮替到混合身份,将 PQC 密钥与新的经典密钥相结合。(您必须创建新的传统密钥,不能重复使用旧密钥。)

Conectividad

Android 17 agrega las siguientes funciones para mejorar la conectividad de los dispositivos y las apps.

Redes satelitales restringidas

Se implementaron optimizaciones para permitir que las apps funcionen de manera eficaz en redes satelitales con ancho de banda bajo.

Experiencia del usuario y la IU del sistema

Android 17 incluye los siguientes cambios para mejorar la experiencia del usuario.

Reproducción independiente del volumen del asistente

Android 17 introduces a dedicated Assistant volume stream for Assistant apps, for playback with USAGE_ASSISTANT. This change decouples Assistant audio from the standard media stream, providing users with isolated control over both volumes. This enables scenarios such as muting media playback while maintaining audibility for Assistant responses, and the other way around.

Assistant apps with access to the new MODE_ASSISTANT_CONVERSATION audio mode can further improve the volume control consistency. Assistant apps can use this mode to provide a hint to the system about an active Assistant session, ensuring the Assistant stream can be controlled outside of the active USAGE_ASSISTANT playback or with connected Bluetooth peripherals.

Handoff

Handoff es una nueva función y API que llegará a Android 17 y con la que los desarrolladores de apps pueden integrarse para proporcionar continuidad multidispositivo a sus usuarios. Permite que el usuario inicie una actividad de la app en un dispositivo Android y la transfiera a otro. Handoff se ejecuta en segundo plano en el dispositivo de un usuario y muestra las actividades disponibles de los otros dispositivos cercanos del usuario a través de varios puntos de entrada, como el selector y la barra de tareas, en el dispositivo receptor.

Las apps pueden designar Handoff para iniciar la misma app nativa para Android, si está instalada y disponible en el dispositivo receptor. En este flujo de app a app, se dirige al usuario a la actividad designada a través de un vínculo directo. Como alternativa, la transferencia de app a Web se puede ofrecer como una opción de resguardo o se puede implementar directamente con la transferencia de URL.

La compatibilidad con Handoff se implementa por actividad. Para habilitar Handoff, llama al método setHandoffEnabled() de la actividad. Es posible que se deban pasar datos adicionales junto con la transferencia para que la actividad que se vuelve a crear en el dispositivo receptor pueda restablecer el estado adecuado. Implementa la devolución de llamada onHandoffActivityDataRequested() para devolver un objeto HandoffActivityData que contenga detalles que especifiquen cómo Handoff debe controlar y recrear la actividad en el dispositivo receptor.

Actualización en vivo: API de color semántico

在 Android 17 中,实时动态推出了语义着色 API,以支持具有通用含义的颜色。

以下类支持语义着色:

填色游戏

  • 绿色:与安全相关。 此颜色应在让用户知道您处于安全情况时使用。
  • 橙色:用于表示警告和标记物理危险。当用户需要注意设置更好的保护设置时,应使用此颜色。
  • 红色:通常表示危险、停止。它应该在需要人们紧急关注的情况下显示。
  • 蓝色:中性色,用于提供信息且应从其他内容中脱颖而出的内容。

以下示例展示了如何将语义样式应用于通知中的文本:

  val ssb = SpannableStringBuilder()
        .append("Colors: ")
        .append("NONE", Notification.createSemanticStyleAnnotation(SEMANTIC_STYLE_UNSPECIFIED), 0)
        .append(", ")
        .append("INFO", Notification.createSemanticStyleAnnotation(SEMANTIC_STYLE_INFO), 0)
        .append(", ")
        .append("SAFE", Notification.createSemanticStyleAnnotation(SEMANTIC_STYLE_SAFE), 0)
        .append(", ")
        .append("CAUTION", Notification.createSemanticStyleAnnotation(SEMANTIC_STYLE_CAUTION), 0)
        .append(", ")
        .append("DANGER", Notification.createSemanticStyleAnnotation(SEMANTIC_STYLE_DANGER), 0)

    Notification.Builder(context, channelId)
          .setSmallIcon(R.drawable.ic_icon)
          .setContentTitle("Hello World!")
          .setContentText(ssb)
          .setOngoing(true)
              .setRequestPromotedOngoing(true)

API de Downlink-TDoA de UWB para Android 17

Downlink Time Difference of Arrival (DL-TDoA) ranging lets a device determine its position relative to multiple UWB anchors by measuring the relative arrival times of signals.

For more information and code samples, see UWB Downlink-TDoA API.