1. Introducción
En este documento, se enumeran los requisitos que deben cumplirse para que los dispositivos sean compatibles con Android 8.0.
El uso de “DEBE”, “NO DEBE”, “SE REQUIERE”, “DEBERÁ”, “NO DEBERÁ”, “DEBERÍA”, “NO DEBERÍA”, “RECOMENDADO”, “PUEDE” y “OPCIONAL” se realiza según el estándar de IETF definido en RFC2119.
Según se usa en este documento, un “implementador de dispositivos” o “implementador” es una persona u organización que desarrolla una solución de hardware o software que ejecuta Android 8.0. Una "implementación de dispositivo" o "implementación" es la solución de hardware o software que se desarrolla.
Para que se consideren compatibles con Android 8.0, las implementaciones del dispositivo DEBEN cumplir con los requisitos que se presentan en esta Definición de compatibilidad, incluidos los documentos que se incorporan como referencia.
Cuando esta definición o las pruebas de software descritas en la sección 10 no se mencionen, sean ambiguas o estén incompletas, es responsabilidad del implementador del dispositivo garantizar la compatibilidad con las implementaciones existentes.
Por este motivo, el Proyecto de código abierto de Android es la implementación de referencia y preferida de Android. Se RECOMIENDA ENCARECIDAMENTE a los implementadores de dispositivos que basen sus implementaciones en la mayor medida posible en el código fuente "upstream" disponible en el Proyecto de código abierto de Android. Si bien algunos componentes se pueden reemplazar hipotéticamente por implementaciones alternativas, se RECOMIENDA ENCARECIDAMENTE no seguir esta práctica, ya que aprobar las pruebas de software será mucho más difícil. Es responsabilidad del implementador garantizar la compatibilidad de comportamiento total con la implementación estándar de Android, incluido el Conjunto de pruebas de compatibilidad y más allá de este. Por último, ten en cuenta que este documento prohíbe explícitamente ciertas sustituciones y modificaciones de componentes.
Muchos de los recursos vinculados en este documento se derivan directa o indirectamente del SDK de Android y serán funcionalmente idénticos a la información de la documentación de ese SDK. En los casos en que esta Definición de compatibilidad o el Conjunto de pruebas de compatibilidad no coincidan con la documentación del SDK, se considerará que la documentación del SDK es la fuente autorizada. Todos los detalles técnicos que se proporcionan en los recursos vinculados a lo largo de este documento se consideran, por inclusión, como parte de esta Definición de Compatibilidad.
1.1 Estructura del documento
1.1.1. Requisitos por tipo de dispositivo
La sección 2 contiene todos los requisitos que se aplican a un tipo de dispositivo específico. Cada subsección de la Sección 2 está dedicada a un tipo de dispositivo específico.
Todos los demás requisitos, que se aplican de forma universal a cualquier implementación de dispositivos Android, se enumeran en las secciones posteriores a la Sección 2. En este documento, se hace referencia a estos requisitos como "Requisitos principales".
1.1.2. ID del requisito
El ID de requisito se asigna a los requisitos de tipo MUST.
- El ID se asigna solo para los requisitos de MUST.
- Los requisitos ALTAMENTE RECOMENDADOS se marcan como [SR], pero no se les asigna un ID.
- El ID consta de : ID de tipo de dispositivo - ID de condición - ID de requisito (p.ej., C-0-1).
Cada ID se define de la siguiente manera:
- ID de tipo de dispositivo (consulta más información en 2. Tipos de dispositivos
- C: Core (requisitos que se aplican a cualquier implementación de dispositivos Android)
- H: Dispositivo Android portátil
- T: Dispositivo Android Television
- R.: Implementación de Android Automotive
- Pestaña: Implementación de tablet Android
- ID de condición
- Cuando el requisito es incondicional, este ID se establece en 0.
- Cuando el requisito es condicional, se asigna 1 para la 1ª condición y el número se incrementa en 1 dentro de la misma sección y el mismo tipo de dispositivo.
- ID del requisito
- Este ID comienza en 1 y se incrementa en 1 dentro de la misma sección y la misma condición.
1.1.3. ID de requisito en la sección 2
El ID de requisito en la Sección 2 comienza con el ID de sección correspondiente, seguido del ID de requisito que se describió anteriormente.
- El ID de la Sección 2 consta de : ID de sección / ID de tipo de dispositivo - ID de condición - ID de requisito (p.ej., 7.4.3/A-0-1).
2. Tipos de dispositivos
Si bien el Proyecto de código abierto de Android proporciona una pila de software que se puede usar para una variedad de tipos de dispositivos y factores de forma, existen algunos tipos de dispositivos que tienen un ecosistema de distribución de aplicaciones relativamente mejor establecido.
En esta sección, se describen esos tipos de dispositivos, así como los requisitos y las recomendaciones adicionales aplicables a cada uno.
Todas las implementaciones de dispositivos Android que no se ajusten a ninguno de los tipos de dispositivos descritos DEBEN cumplir con todos los requisitos de las demás secciones de esta Definición de compatibilidad.
2.1 Configuraciones del dispositivo
Para conocer las principales diferencias en la configuración de hardware según el tipo de dispositivo, consulta los requisitos específicos del dispositivo que se indican a continuación en esta sección.
2.2. Requisitos para dispositivos portátiles
Un dispositivo Android portátil hace referencia a una implementación de un dispositivo Android que se suele usar sosteniéndolo con la mano, como un reproductor de MP3, un teléfono o una tablet.
Las implementaciones de dispositivos Android se clasifican como dispositivos portátiles si cumplen con todos los siguientes criterios:
- Tener una fuente de alimentación que proporcione movilidad, como una batería
- Tener un tamaño de pantalla diagonal física en el rango de 2.5 a 8 pulgadas
Los requisitos adicionales que se indican en el resto de esta sección son específicos para las implementaciones de dispositivos portátiles Android.
2.2.1. Hardware
Implementaciones de dispositivos portátiles:
- [7.1.1.1/H-0-1] DEBE tener una pantalla de al menos 2.5 pulgadas en tamaño diagonal físico.
- [7.1.1.3/H-SR] SE RECOMIENDA ENCARECIDAMENTE proporcionar a los usuarios la posibilidad de cambiar el tamaño de la pantalla (densidad de pantalla).
- [7.1.5/H-0-1] DEBE incluir compatibilidad con el modo de compatibilidad de aplicaciones heredadas tal como se implementa en el código fuente abierto de Android upstream. Es decir, las implementaciones de dispositivos NO DEBEN alterar los activadores ni los umbrales en los que se activa el modo de compatibilidad, y NO DEBEN alterar el comportamiento del modo de compatibilidad en sí.
- [7.2.1/H-0-1] DEBE incluir compatibilidad con aplicaciones de Editor de método de entrada (IME) de terceros.
- [7.2.3/H-0-1] DEBE proporcionar las funciones de Inicio, Recientes y Atrás.
- [7.2.3/H-0-2] DEBE enviar el evento de presión normal y el de presión prolongada de la función Atrás (
KEYCODE_BACK
) a la aplicación en primer plano. - [7.2.4/H-0-1] DEBE admitir la entrada de pantalla táctil.
- [7.3.1/H-SR] Se RECOMIENDA ENCARECIDAMENTE que incluyan un acelerómetro de 3 ejes.
Si las implementaciones de dispositivos portátiles incluyen un acelerómetro de 3 ejes, deben cumplir con lo siguiente:
- [7.3.1/H-1-1] DEBE poder informar eventos con una frecuencia de al menos 100 Hz.
Si las implementaciones de dispositivos portátiles incluyen un giroscopio, deben cumplir con los siguientes requisitos:
- [7.3.4/H-1-1] DEBE poder informar eventos con una frecuencia de al menos 100 Hz.
Implementaciones de dispositivos portátiles que pueden realizar una llamada de voz y que indican cualquier valor que no sea PHONE_TYPE_NONE
en getPhoneType
:
- [7.3.8/H] DEBE incluir un sensor de proximidad.
Implementaciones de dispositivos portátiles:
- [7.3.12/H-SR] Se RECOMIENDA admitir el sensor de posición con 6 grados de libertad.
- [7.4.3/H]DEBE incluir compatibilidad con Bluetooth y Bluetooth LE.
Si las implementaciones de dispositivos portátiles incluyen una conexión medida, deben cumplir con los siguientes requisitos:
- [7.4.7/H-1-1] DEBE proporcionar el modo de Ahorro de datos.
Implementaciones de dispositivos portátiles:
- [7.6.1/H-0-1] DEBE tener al menos 4 GB de almacenamiento no volátil disponible para los datos privados de la aplicación (también conocida como partición "/data").
- [7.6.1/H-0-2] DEBE devolver "true" para
ActivityManager.isLowRamDevice()
cuando haya menos de 1 GB de memoria disponible para el kernel y el espacio del usuario.
Si las implementaciones de dispositivos portátiles son de 32 bits, haz lo siguiente:
-
[7.6.1/H-1-1] La memoria disponible para el kernel y el espacio del usuario DEBE ser de al menos 512 MB si se usa alguna de las siguientes densidades:
- 280 dpi o menos en pantallas pequeñas o normales*
- ldpi o inferior en pantallas muy grandes
- mdpi o inferior en pantallas grandes
-
[7.6.1/H-2-1] La memoria disponible para el kernel y el espacio del usuario DEBE ser de al menos 608 MB si se usa alguna de las siguientes densidades:
- xhdpi o superior en pantallas pequeñas o normales*
- hdpi o superior en pantallas grandes
- mdpi o superior en pantallas muy grandes
-
[7.6.1/H-3-1] La memoria disponible para el kernel y el espacio del usuario DEBE ser de al menos 896 MB si se usa alguna de las siguientes densidades:
- 400 DPI o más en pantallas pequeñas o normales*
- xhdpi o superior en pantallas grandes
- tvdpi o superior en pantallas muy grandes
-
[7.6.1/H-4-1] La memoria disponible para el kernel y el espacio del usuario DEBE ser de al menos 1,344 MB si se usa alguna de las siguientes densidades:
- 560 dpi o más en pantallas pequeñas o normales*
- 400 DPI o más en pantallas grandes
- xhdpi o superior en pantallas extra grandes
Si las implementaciones de dispositivos portátiles son de 64 bits, haz lo siguiente:
-
[7.6.1/H-5-1] La memoria disponible para el kernel y el espacio del usuario DEBE ser de al menos 816 MB si se usa alguna de las siguientes densidades:
- 280 dpi o menos en pantallas pequeñas o normales*
- ldpi o inferior en pantallas muy grandes
- mdpi o inferior en pantallas grandes
-
[7.6.1/H-6-1] La memoria disponible para el kernel y el espacio del usuario DEBE ser de al menos 944 MB si se usa alguna de las siguientes densidades:
- xhdpi o superior en pantallas pequeñas o normales*
- hdpi o superior en pantallas grandes
- mdpi o superior en pantallas muy grandes
-
[7.6.1/H-7-1] La memoria disponible para el kernel y el espacio del usuario DEBE ser de al menos 1,280 MB si se usa alguna de las siguientes densidades:
- 400 DPI o más en pantallas pequeñas o normales*
- xhdpi o superior en pantallas grandes
- tvdpi o superior en pantallas muy grandes
-
[7.6.1/H-8-1] La memoria disponible para el kernel y el espacio del usuario DEBE ser de al menos 1,824 MB si se usa alguna de las siguientes densidades:
- 560 dpi o más en pantallas pequeñas o normales*
- 400 DPI o más en pantallas grandes
- xhdpi o superior en pantallas extra grandes
Ten en cuenta que la "memoria disponible para el kernel y el espacio del usuario" que se menciona más arriba se refiere al espacio de memoria que se proporciona además de la memoria que ya está dedicada a los componentes de hardware, como la radio, el video, etcétera, que no están bajo el control del kernel en las implementaciones del dispositivo.
Implementaciones de dispositivos portátiles:
- [7.6.2/H-0-1] NO DEBE proporcionar un almacenamiento compartido de la aplicación inferior a 1 GiB.
- [7.7.1/H] DEBE incluir un puerto USB que admita el modo de periférico.
Si las implementaciones de dispositivos portátiles incluyen un puerto USB que admite el modo periférico, deben cumplir con lo siguiente:
- [7.7.1/H-1-1] DEBE implementar la API de Android Open Accessory (AOA).
Implementaciones de dispositivos portátiles:
- [7.8.1/H-0-1] DEBE incluir un micrófono.
- [7.8.2/H-0-1] DEBE tener una salida de audio y declarar
android.hardware.audio.output
.
Si las implementaciones de dispositivos portátiles incluyen compatibilidad con el modo de RV, deben cumplir con los siguientes requisitos:
- [7.9.1/H-1-1] DEBE declarar la función
android.software.vr.mode
.
Si las implementaciones de dispositivos declaran la función android.software.vr.mode
, deben hacer lo siguiente:
- [7.9.1/H-2-1] DEBE incluir una aplicación que implemente
android.service.vr.VrListenerService
y que las aplicaciones para RV puedan habilitar a través deandroid.app.Activity#setVrModeEnabled
.
Si las implementaciones de dispositivos portátiles pueden cumplir con todos los requisitos para declarar el parámetro de configuración android.hardware.vr.high_performance
, deben hacer lo siguiente:
- [7.9.2/-1-1] DEBE declarar la marca de función
android.hardware.vr.high_performance
.
2.2.2. Multimedia
Las implementaciones de dispositivos portátiles DEBEN admitir la siguiente codificación de audio:
- [5.1.1/H-0-1] AMR-NB
- [5.1.1/H-0-2] AMR-WB
- [5.1.1/H-0-3] Perfil de MPEG-4 AAC (AAC LC)
- [5.1.1/H-0-4] Perfil HE AAC de MPEG-4 (AAC+)
- [5.1.1/H-0-5] AAC ELD (AAC mejorado de bajo retraso)
Las implementaciones de dispositivos portátiles DEBEN admitir la siguiente decodificación de audio:
Las implementaciones de dispositivos portátiles DEBEN admitir la siguiente codificación de video y ponerla a disposición de las aplicaciones de terceros:
Las implementaciones de dispositivos portátiles DEBEN admitir la siguiente decodificación de video:
2.2.3. Software
Implementaciones de dispositivos portátiles:
- [3.4.1/H-0-1] DEBE proporcionar una implementación completa de la API de
android.webkit.Webview
. - [3.4.2/H-0-1] DEBE incluir una aplicación de navegador independiente para la navegación web general del usuario.
- [3.8.1/H-SR] SE RECOMIENDA ENCARECIDAMENTE implementar un selector predeterminado que admita la fijación de accesos directos y widgets en la app.
- [3.8.1/H-SR] SE RECOMIENDA ENCARECIDAMENTE implementar un selector predeterminado que proporcione acceso rápido a los accesos directos adicionales que proporcionan las apps de terceros a través de la API de ShortcutManager.
- [3.8.1/H-SR] SE RECOMIENDA ENCARECIDAMENTE incluir una app de selector predeterminada que muestre insignias para los íconos de apps.
- [3.8.2/H-SR] SE RECOMIENDA ENCARECIDAMENTE que admitan widgets de apps de terceros.
- [3.8.3/H-0-1] DEBE permitir que las apps de terceros notifiquen a los usuarios sobre eventos importantes a través de las clases de API
Notification
yNotificationManager
. - [3.8.3/H-0-2] DEBE admitir notificaciones enriquecidas.
- [3.8.3/H-0-3] DEBE admitir notificaciones emergentes.
- [3.8.3/H-0-4] DEBE incluir un panel de notificaciones que le permita al usuario controlar directamente (p.ej., responder, posponer, descartar o bloquear) las notificaciones a través de recursos para el usuario, como botones de acción o el panel de control implementado en el AOSP.
- [3.8.4/H-SR] Se RECOMIENDA ENCARECIDAMENTE implementar un asistente en el dispositivo para controlar la acción de asistencia.
Si las implementaciones de dispositivos portátiles Android admiten una pantalla de bloqueo, deben cumplir con los siguientes requisitos:
- [3.8.10/H-1-1] DEBE mostrar las notificaciones en la pantalla de bloqueo, incluida la plantilla de notificación de medios.
Si las implementaciones de dispositivos portátiles admiten una pantalla de bloqueo segura, deben cumplir con los siguientes requisitos:
- [3.9/H-1-1] DEBE implementar el rango completo de políticas de administración de dispositivos definidas en la documentación del SDK de Android.
Implementaciones de dispositivos portátiles:
- [3.10/H-0-1] DEBE admitir servicios de accesibilidad de terceros.
- [3.10/H-SR] SE RECOMIENDA ENCARECIDAMENTE precargar los servicios de accesibilidad en el dispositivo que sean comparables con la funcionalidad de los servicios de accesibilidad de Accesibilidad mejorada y TalkBack (para los idiomas admitidos por el motor de texto a voz precargado) o que la superen, tal como se proporcionan en el proyecto de código abierto de TalkBack.
- [3.11/H-0-1] DEBE admitir la instalación de motores de TTS de terceros.
- [3.11/H-SR] Se RECOMIENDA ENCARECIDAMENTE incluir un motor de TTS que admita los idiomas disponibles en el dispositivo.
- [3.13/H-SR] Se RECOMIENDA ENCARECIDAMENTE que incluyan un componente de IU de Configuración rápida.
Si las implementaciones de dispositivos portátiles Android declaran compatibilidad con FEATURE_BLUETOOTH
o FEATURE_WIFI
, deben cumplir con lo siguiente:
- [3.15/H-1-1] DEBE admitir la función de vinculación de dispositivos complementarios.
2.2.4. Rendimiento y potencia
- [8.1/H-0-1] Latencia de fotogramas coherente. La latencia de fotogramas inconsistente o la demora en la renderización de fotogramas NO DEBEN ocurrir más de 5 veces por segundo y DEBEN ser inferiores a 1 vez por segundo.
- [8.1/H-0-2] Latencia de la interfaz de usuario. Las implementaciones de dispositivos DEBEN garantizar una experiencia del usuario con baja latencia desplazándose por una lista de 10,000 entradas de lista, según lo define el Conjunto de pruebas de compatibilidad (CTS) de Android, en menos de 36 s.
- [8.1/H-0-3] Cambio de tareas. Cuando se hayan iniciado varias aplicaciones, el reinicio de una aplicación que ya se está ejecutando después de que se haya iniciado DEBE tardar menos de 1 segundo.
Implementaciones de dispositivos portátiles:
- [8.2/H-0-1] DEBE garantizar un rendimiento de escritura secuencial de al menos 5 MB/s.
- [8.2/H-0-2] DEBE garantizar un rendimiento de escritura aleatoria de al menos 0.5 MB/s.
- [8.2/H-0-3] DEBE garantizar un rendimiento de lectura secuencial de al menos 15 MB/s.
- [8.2/H-0-4] DEBE garantizar un rendimiento de lectura aleatoria de al menos 3.5 MB/s.
- [8.3/H-0-1] Todas las apps exentas de los modos de ahorro de energía de App Standby y Descanso DEBEN ser visibles para el usuario final.
- [8.3/H-0-2] Los algoritmos de activación, mantenimiento y activación de los modos de ahorro de energía de App Standby y Doze NO DEBEN desviarse del Proyecto de código abierto de Android.
Implementaciones de dispositivos portátiles:
- [8.4/H-0-1] DEBE proporcionar un perfil de energía por componente que defina el valor de consumo de corriente para cada componente de hardware y el consumo aproximado de batería que causan los componentes con el tiempo, como se documenta en el sitio del Proyecto de código abierto de Android.
- [8.4/H-0-2] SE DEBEN informar todos los valores de consumo de energía en miliamperios-hora (mAh).
- [8.4/H-0-3] DEBE informar el consumo de energía de la CPU por UID de cada proceso. El Proyecto de código abierto de Android cumple con el requisito a través de la implementación del módulo del kernel
uid_cputime
. - [8.4/H-0-4] DEBE poner a disposición del desarrollador de la app este uso de energía a través del comando de shell
adb shell dumpsys batterystats
. - [8.4/H] SE DEBE atribuir al componente de hardware en sí si no se puede atribuir el uso de energía del componente de hardware a una aplicación.
Si las implementaciones de dispositivos portátiles incluyen una pantalla o salida de video, deben cumplir con lo siguiente:
- [8.4/H-1-1] DEBE respetar la intención
android.intent.action.POWER_USAGE_SUMMARY
y mostrar un menú de configuración que muestre este uso de energía.
2.2.5. Modelo de seguridad
Implementaciones de dispositivos portátiles:
- [9.1/H-0-1] DEBE permitir que las apps de terceros accedan a las estadísticas de uso a través del permiso
android.permission.PACKAGE_USAGE_STATS
y proporcionar un mecanismo accesible para el usuario que permita otorgar o revocar el acceso a dichas apps en respuesta al intentandroid.settings.ACTION_USAGE_ACCESS_SETTINGS
.
2.3. Requisitos de la televisión
Un dispositivo Android Television hace referencia a una implementación de dispositivo Android que es una interfaz de entretenimiento para consumir medios digitales, películas, juegos, apps o TV en vivo para los usuarios que se encuentran a unos tres metros de distancia (una "interfaz de usuario de 10 pies" o "de sillón").
Las implementaciones de dispositivos Android se clasifican como televisores si cumplen con todos los siguientes criterios:
- Proporcionamos un mecanismo para controlar de forma remota la interfaz de usuario renderizada en la pantalla que podría estar a tres metros del usuario.
- Tener una pantalla integrada con una longitud diagonal superior a 24 pulgadas O incluir un puerto de salida de video, como VGA, HDMI, DisplayPort o un puerto inalámbrico para la pantalla
Los requisitos adicionales que se indican en el resto de esta sección son específicos para las implementaciones de dispositivos Android TV.
2.3.1. Hardware
Implementaciones de dispositivos de televisión:
- [7.2.2/T-0-1] DEBE admitir el pad direccional.
- [7.2.3/T-0-1] DEBE proporcionar las funciones de Inicio y Atrás.
- [7.2.3/T-0-2] DEBE enviar el evento de presión normal y el de presión prolongada de la función Atrás (
KEYCODE_BACK
) a la aplicación en primer plano. - [7.2.6.1/T-0-1] DEBE incluir compatibilidad con controles de juegos y declarar el parámetro de función
android.hardware.gamepad
. - [7.2.7/T] DEBE proporcionar un control remoto desde el que los usuarios puedan acceder a la navegación sin contacto y a las entradas de las teclas de navegación principales.
Si las implementaciones de dispositivos de televisión incluyen un giroscopio, deben cumplir con lo siguiente:
- [7.3.4/T-1-1] DEBE poder registrar eventos con una frecuencia de al menos 100 Hz.
Implementaciones de dispositivos de televisión:
- [7.4.3/T-0-1] DEBE admitir Bluetooth y Bluetooth LE.
- [7.6.1/T-0-1] DEBE tener al menos 4 GB de almacenamiento no volátil disponible para los datos privados de la aplicación (también conocida como partición "/data").
Si las implementaciones de dispositivos de TV son de 32 bits, haz lo siguiente:
-
[7.6.1/T-1-1] La memoria disponible para el kernel y el espacio del usuario DEBE ser de al menos 896 MB si se usa alguna de las siguientes densidades:
- 400 DPI o más en pantallas pequeñas o normales
- xhdpi o superior en pantallas grandes
- tvdpi o superior en pantallas muy grandes
Si las implementaciones de dispositivos de TV son de 64 bits, haz lo siguiente:
-
[7.6.1/T-2-1] La memoria disponible para el kernel y el espacio del usuario DEBE ser de al menos 1,280 MB si se usa alguna de las siguientes densidades:
- 400 DPI o más en pantallas pequeñas o normales
- xhdpi o superior en pantallas grandes
- tvdpi o superior en pantallas muy grandes
Ten en cuenta que la "memoria disponible para el kernel y el espacio del usuario" que se menciona más arriba se refiere al espacio de memoria que se proporciona además de la memoria que ya está dedicada a los componentes de hardware, como la radio, el video, etcétera, que no están bajo el control del kernel en las implementaciones del dispositivo.
Implementaciones de dispositivos de televisión:
- [7.8.1/T] DEBE incluir un micrófono.
- [7.8.2/T-0-1] DEBE tener una salida de audio y declarar
android.hardware.audio.output
.
2.3.2. Multimedia
Las implementaciones de dispositivos de televisión DEBEN admitir la siguiente codificación de audio:
- [5.1/T-0-1] Perfil de AAC de MPEG-4 (AAC LC)
- [5.1/T-0-2] Perfil MPEG-4 HE AAC (AAC+)
- [5.1/T-0-3] AAC ELD (AAC mejorado de bajo retraso)
Las implementaciones de dispositivos de televisión DEBEN admitir la siguiente codificación de video:
Implementaciones de dispositivos de televisión:
- [5.2.2/T-SR] Se RECOMIENDA ENCARECIDAMENTE que admitan la codificación H.264 de videos con resolución de 720p y 1080p.
- [5.22/T-SR] SE RECOMIENDA ENCARECIDAMENTE que admitan la codificación H.264 de video con resolución de 1080p a 30 fotogramas por segundo (FPS).
Las implementaciones de dispositivos de televisión DEBEN admitir la siguiente decodificación de video:
Se RECOMIENDA ENCARECIDAMENTE que las implementaciones de dispositivos de televisión admitan la siguiente decodificación de video:
- [5.3/T-SR] MPEG-2
Si las implementaciones de dispositivos de televisión admiten decodificadores H.264, deben cumplir con los siguientes requisitos:
- [5.3.4/T-1-1] DEBE admitir el perfil High Level 4.2 y el perfil de decodificación HD 1080p (a 60 FPS).
- [5.3.4/T-1-2] DEBE poder decodificar videos con ambos perfiles HD, como se indica en la siguiente tabla, y codificados con el perfil de referencia, el perfil principal o el perfil alto de nivel 4.2.
Si las implementaciones de dispositivos de televisión admiten el códec H.265 y el perfil de decodificación HD 1080p, deben cumplir con los siguientes requisitos:
- [5.3.5/T-1-1] DEBE admitir el perfil principal, nivel 4.1, nivel principal.
- [5.3.5/T-SR] Se RECOMIENDA ENCARECIDAMENTE que admitan una velocidad de fotogramas de video de 60 FPS para HD 1080p.
Si las implementaciones de dispositivos de televisión admiten el códec H.265 y el perfil de decodificación UHD, se deben cumplir las siguientes condiciones:
- [5.3.5/T-2-1] El códec DEBE admitir el perfil Main10 de nivel 5 del nivel principal.
Si las implementaciones de dispositivos de televisión admiten el códec VP8, deben cumplir con los siguientes requisitos:
- [5.3.6/T-1-1] DEBE admitir el perfil de decodificación HD 1080p60.
Si las implementaciones de dispositivos de televisión admiten el códec VP8 y 720p, deben cumplir con los siguientes requisitos:
- [5.3.6/T-2-1] DEBE admitir el perfil de decodificación HD 720p60.
Si las implementaciones de dispositivos de televisión admiten el códec VP9 y la decodificación de video UHD, deben cumplir con los siguientes requisitos:
- [5.3.7/T-1-1] DEBE admitir una profundidad de color de 8 bits y DEBERÍA admitir el perfil 2 de VP9 (10 bits).
Si las implementaciones de dispositivos de televisión admiten el códec VP9, el perfil de 1080p y la decodificación por hardware de VP9, deben cumplir con los siguientes requisitos:
- [5.3.7/T-2-1] DEBE admitir 60 fps para 1080p.
Implementaciones de dispositivos de televisión:
- [5.8/T-SR] SE RECOMIENDA ENCARECIDAMENTE que admitan la decodificación simultánea de transmisiones seguras. Como mínimo, se RECOMIENDA ENCARECIDAMENTE la decodificación simultánea de dos transmisiones.
Si las implementaciones de dispositivos son dispositivos Android Television y admiten resolución 4K, deben cumplir con lo siguiente:
- [5.8/T-1-1] DEBE admitir HDCP 2.2 para todas las pantallas externas con cable.
Si las implementaciones de dispositivos de televisión no admiten la resolución 4K, deben cumplir con los siguientes requisitos:
- [5.8/T-2-1] DEBE admitir HDCP 1.4 para todas las pantallas externas con cable.
Implementaciones de dispositivos de televisión:
- [5.5.3/T-0-1] DEBE incluir compatibilidad con el volumen principal del sistema y la atenuación del volumen de salida de audio digital en las salidas compatibles, excepto en la salida de transferencia de audio comprimido (en la que no se realiza decodificación de audio en el dispositivo).
2.3.3. Software
Implementaciones de dispositivos de televisión:
- [3/T-0-1] DEBE declarar las funciones
android.software.leanback
yandroid.hardware.type.television
. - [3.4.1/T-0-1] DEBE proporcionar una implementación completa de la API de
android.webkit.Webview
.
Si las implementaciones de dispositivos Android Television admiten una pantalla de bloqueo,deben cumplir con lo siguiente:
- [3.8.10/T-1-1] DEBE mostrar las notificaciones en la pantalla de bloqueo, incluida la plantilla de notificación de medios.
Implementaciones de dispositivos de televisión:
- [3.8.14/T-SR] Se RECOMIENDA ENCARECIDAMENTE que admitan el modo de pantalla en pantalla (PIP) en multiventana.
- [3.10/T-0-1] DEBE admitir servicios de accesibilidad de terceros.
- [3.10/T-SR] SE RECOMIENDA ENCARECIDAMENTE precargar los servicios de accesibilidad en el dispositivo que sean comparables con la funcionalidad de los servicios de accesibilidad de Accesibilidad mejorada y TalkBack (para los idiomas admitidos por el motor de texto a voz precargado) o que la superen, tal como se proporcionan en el proyecto de código abierto de TalkBack.
Si las implementaciones de dispositivos de televisión informan la función android.hardware.audio.output
, deben hacer lo siguiente:
- [3.11/T-SR] SE RECOMIENDA ENCARECIDAMENTE incluir un motor de TTS que admita los idiomas disponibles en el dispositivo.
- [3.11/T-1-1] DEBE admitir la instalación de motores de TTS de terceros.
Implementaciones de dispositivos de televisión:
- [3.12/T-0-1] DEBE admitir el marco de trabajo de entrada de TV.
2.2.4. Rendimiento y potencia
- [8.1/T-0-1] Latencia de fotogramas coherente. La latencia de fotogramas inconsistente o la demora en la renderización de fotogramas NO DEBEN ocurrir más de 5 veces por segundo y DEBEN ser inferiores a 1 vez por segundo.
- [8.2/T-0-1] DEBE garantizar un rendimiento de escritura secuencial de al menos 5 MB/s.
- [8.2/T-0-2] DEBE garantizar un rendimiento de escritura aleatoria de al menos 0.5 MB/s.
- [8.2/T-0-3] DEBE garantizar un rendimiento de lectura secuencial de al menos 15 MB/s.
-
[8.2/T-0-4] DEBE garantizar un rendimiento de lectura aleatoria de al menos 3.5 MB/s.
-
[8.3/T-0-1] Todas las apps exentas de los modos de ahorro de energía de App Standby y Descanso DEBEN ser visibles para el usuario final.
- [8.3/T-0-2] Los algoritmos de activación, mantenimiento y activación, y el uso de la configuración global del sistema de los modos de ahorro de energía App Standby y Doze NO DEBEN desviarse del Proyecto de código abierto de Android.
Implementaciones de dispositivos de televisión:
- [8.4/T-0-1] DEBE proporcionar un perfil de energía por componente que defina el valor de consumo de corriente para cada componente de hardware y la descarga aproximada de la batería que causan los componentes con el tiempo, como se documenta en el sitio del Proyecto de código abierto de Android.
- [8.4/T-0-2] SE DEBEN registrar todos los valores de consumo de energía en miliamperios por hora (mAh).
- [8.4/T-0-3] DEBE informar el consumo de energía de la CPU por UID de cada proceso. El Proyecto de código abierto de Android cumple con el requisito a través de la implementación del módulo del kernel
uid_cputime
. - [8.4/T] SE DEBE atribuir al componente de hardware en sí si no se puede atribuir el uso de energía del componente de hardware a una aplicación.
- [8.4/T-0-4] DEBE poner este uso de energía a disposición del desarrollador de la app a través del comando de shell
adb shell dumpsys batterystats
.
2.4. Requisitos del reloj
Un dispositivo Android Watch hace referencia a una implementación de dispositivo Android que se puede usar en el cuerpo, tal vez en la muñeca.
Las implementaciones de dispositivos Android se clasifican como relojes si cumplen con todos los siguientes criterios:
- Tener una pantalla con una longitud diagonal física de entre 1.1 y 2.5 pulgadas
- Tener un mecanismo que permita llevarlo en el cuerpo
Los requisitos adicionales que se incluyen en el resto de esta sección son específicos para las implementaciones de dispositivos Android Watch.
2.4.1. Hardware
Implementaciones de dispositivos de reloj:
-
[7.1.1.1/W-0-1] DEBE tener una pantalla con un tamaño diagonal físico de entre 1.1 y 2.5 pulgadas.
-
[7.2.3/W-0-1] DEBE tener la función Inicio disponible para el usuario y la función Atrás, excepto cuando se encuentre en
UI_MODE_TYPE_WATCH
. -
[7.2.4/W-0-1] DEBE admitir la entrada de pantalla táctil.
-
[7.3.1/W-SR] Se RECOMIENDA ENCARECIDAMENTE incluir un acelerómetro de 3 ejes.
-
[7.4.3/W-0-1] DEBE admitir Bluetooth.
-
[7.6.1/W-0-1] DEBE tener al menos 1 GB de almacenamiento no volátil disponible para los datos privados de la aplicación (también conocida como partición "/data").
-
[7.6.1/W-0-2] DEBE tener al menos 416 MB de memoria disponible para el kernel y el espacio del usuario.
-
[7.8.1/W-0-1] DEBE incluir un micrófono.
-
[7.8.2/W] PUEDE tener salida de audio, pero NO DEBERÍA tenerla.
2.4.2. Multimedia
No hay requisitos adicionales.
2.4.3. Software
Implementaciones de dispositivos de reloj:
- [3/W-0-1] DEBE declarar la función
android.hardware.type.watch
. - [3/W-0-2] DEBE admitir uiMode = UI_MODE_TYPE_WATCH.
Implementaciones de dispositivos de reloj:
- [3.8.4/W-SR] SE RECOMIENDA ENCARECIDAMENTE implementar un asistente en el dispositivo para controlar la acción de asistencia.
Implementaciones de dispositivos Wear que declaran la marca de función android.hardware.audio.output
:
- [3.10/W-1-1] DEBE admitir servicios de accesibilidad de terceros.
- [3.10/W-SR] Se RECOMIENDA ENCARECIDAMENTE precargar los servicios de accesibilidad en el dispositivo que sean comparables con la funcionalidad de los servicios de accesibilidad de Accesibilidad con interruptores y TalkBack (para los idiomas admitidos por el motor de texto a voz precargado) o que la superen, tal como se proporciona en el proyecto de código abierto de TalkBack.
Si las implementaciones de dispositivos Watch informan la función android.hardware.audio.output, deben hacer lo siguiente:
-
[3.11/W-SR] SE RECOMIENDA ENCARECIDAMENTE incluir un motor de TTS que admita los idiomas disponibles en el dispositivo.
-
[3.11/W-0-1] DEBE admitir la instalación de motores de TTS de terceros.
2.5. Requisitos para la industria automotriz
La implementación de Android Automotive hace referencia a una consola central del vehículo que ejecuta Android como sistema operativo para parte o la totalidad de la funcionalidad del sistema o de infoentretenimiento.
Las implementaciones de dispositivos Android se clasifican como Automotive si declaran la función android.hardware.type.automotive
o cumplen con todos los siguientes criterios.
- Estar incorporados como parte de un vehículo automotor o ser enchufables a él
- Usar una pantalla en la fila del asiento del conductor como pantalla principal
Los requisitos adicionales que se incluyen en el resto de esta sección son específicos para las implementaciones de dispositivos Android Automotive.
2.5.1. Hardware
Implementaciones de dispositivos para automóviles:
- [7.1.1.1/A-0-1] DEBE tener una pantalla de al menos 6 pulgadas de tamaño diagonal físico.
-
[7.1.1.1/A-0-2] DEBE tener un diseño de tamaño de pantalla de al menos 750 dp x 480 dp.
-
[7.2.3/A-0-1] DEBE proporcionar la función de Inicio y PUEDE proporcionar las funciones de Atrás y Recientes.
-
[7.2.3/A-0-2] DEBE enviar el evento de presión normal y el de presión prolongada de la función Atrás (
KEYCODE_BACK
) a la aplicación en primer plano. -
[7.3.1/A-SR] SE RECOMIENDA ENCARECIDAMENTE que incluyan un acelerómetro de 3 ejes.
Si las implementaciones de dispositivos para automóviles incluyen un acelerómetro de 3 ejes, deben cumplir con los siguientes requisitos:
- [7.3.1/A-1-1] DEBE poder informar eventos con una frecuencia de al menos 100 Hz.
- [7.3.1/A-1-2] DEBE cumplir con el sistema de coordenadas del sensor del automóvil de Android.
Si las implementaciones de dispositivos para automóviles incluyen un receptor de GPS/GNSS y reportan la capacidad a las aplicaciones a través de la marca de función android.hardware.location.gps
, se deben cumplir los siguientes requisitos:
- [7.3.3/A-1-1] La generación de la tecnología GNSS DEBE ser del año "2017" o posterior.
Si las implementaciones de dispositivos para automóviles incluyen un giroscopio, deben cumplir con los siguientes requisitos:
- [7.3.4/A-1-1] DEBE poder informar eventos con una frecuencia de al menos 100 Hz.
Implementaciones de dispositivos para automóviles:
- [7.3.11/A] DEBE proporcionar la marcha actual como
SENSOR_TYPE_GEAR
.
Implementaciones de dispositivos para automóviles:
- [7.3.11.2/A-0-1] DEBE admitir el modo día/noche definido como
SENSOR_TYPE_NIGHT
. - [7.3.11.2/A-0-2] El valor de la marca
SENSOR_TYPE_NIGHT
DEBE ser coherente con el modo claro/oscuro del panel y DEBE basarse en la entrada del sensor de luz ambiental. -
Es POSIBLE que el sensor de luz ambiente subyacente sea el mismo que el del fotómetro.
-
[7.3.11.3/A-0-1] DEBE admitir el estado de conducción definido como
SENSOR_TYPE_DRIVING_STATUS
, con un valor predeterminado deDRIVE_STATUS_UNRESTRICTED
cuando el vehículo esté completamente detenido y estacionado. Es responsabilidad de los fabricantes de dispositivos configurarSENSOR_TYPE_DRIVING_STATUS
de conformidad con todas las leyes y reglamentaciones que se apliquen a los mercados a los que se envíe el producto. -
[7.3.11.4/A-0-1] DEBE proporcionar la velocidad del vehículo definida como
SENSOR_TYPE_CAR_SPEED
. -
[7.4.3/A-0-1] DEBE admitir Bluetooth y DEBERÍA admitir Bluetooth LE.
- [7.4.3/A-0-2] Las implementaciones de Android Automotive DEBEN admitir los siguientes perfiles de Bluetooth:
- Llamadas telefónicas a través del perfil de manos libres (HFP).
- Reproducción de contenido multimedia a través del perfil de distribución de audio (A2DP).
- Control de reproducción de contenido multimedia a través del perfil de control remoto (AVRCP).
- Compartir contactos con el perfil de acceso a la agenda telefónica (PBAP)
-
[7.4.3/A] DEBE admitir el perfil de acceso a mensajes (MAP).
-
[7.4.5/A] DEBE incluir compatibilidad con la conectividad de datos basada en redes celulares.
-
[7.6.1/A-0-1] DEBE tener al menos 4 GB de almacenamiento no volátil disponible para los datos privados de la aplicación (también conocida como partición "/data").
Si las implementaciones de dispositivos para automóviles son de 32 bits, haz lo siguiente:
-
[7.6.1/A-1-1] La memoria disponible para el kernel y el espacio del usuario DEBE ser de al menos 512 MB si se usa alguna de las siguientes densidades:
- 280 dpi o menos en pantallas pequeñas o normales
- ldpi o inferior en pantallas muy grandes
- mdpi o inferior en pantallas grandes
-
[7.6.1/A-1-2] La memoria disponible para el kernel y el espacio del usuario DEBE ser de al menos 608 MB si se usa alguna de las siguientes densidades:
- xhdpi o superior en pantallas pequeñas o normales
- hdpi o superior en pantallas grandes
- mdpi o superior en pantallas muy grandes
-
[7.6.1/A-1-3] La memoria disponible para el kernel y el espacio del usuario DEBE ser de al menos 896 MB si se usa alguna de las siguientes densidades:
- 400 DPI o más en pantallas pequeñas o normales
- xhdpi o superior en pantallas grandes
- tvdpi o superior en pantallas muy grandes
-
[7.6.1/A-1-4] La memoria disponible para el kernel y el espacio del usuario DEBE ser de al menos 1,344 MB si se usa alguna de las siguientes densidades:
- 560 dpi o más en pantallas pequeñas o normales
- 400 DPI o más en pantallas grandes
- xhdpi o superior en pantallas extra grandes
Si las implementaciones de dispositivos para automóviles son de 64 bits, haz lo siguiente:
-
[7.6.1/A-2-1] La memoria disponible para el kernel y el espacio del usuario DEBE ser de al menos 816 MB si se usa alguna de las siguientes densidades:
- 280 dpi o menos en pantallas pequeñas o normales
- ldpi o inferior en pantallas muy grandes
- mdpi o inferior en pantallas grandes
-
[7.6.1/A-2-2] La memoria disponible para el kernel y el espacio del usuario DEBE ser de al menos 944 MB si se usa alguna de las siguientes densidades:
- xhdpi o superior en pantallas pequeñas o normales
- hdpi o superior en pantallas grandes
- mdpi o superior en pantallas muy grandes
-
[7.6.1/A-2-3] La memoria disponible para el kernel y el espacio del usuario DEBE ser de al menos 1,280 MB si se usa alguna de las siguientes densidades:
- 400 DPI o más en pantallas pequeñas o normales
- xhdpi o superior en pantallas grandes
- tvdpi o superior en pantallas muy grandes
-
[7.6.1/A-2-4] La memoria disponible para el kernel y el espacio del usuario DEBE ser de al menos 1,824 MB si se usa alguna de las siguientes densidades:
- 560 dpi o más en pantallas pequeñas o normales
- 400 DPI o más en pantallas grandes
- xhdpi o superior en pantallas extra grandes
Ten en cuenta que la "memoria disponible para el kernel y el espacio del usuario" que se menciona más arriba se refiere al espacio de memoria que se proporciona además de la memoria que ya está dedicada a los componentes de hardware, como la radio, el video, etcétera, que no están bajo el control del kernel en las implementaciones del dispositivo.
Implementaciones de dispositivos para automóviles:
- [7.7.1/A] DEBE incluir un puerto USB que admita el modo periférico.
Implementaciones de dispositivos para automóviles:
- [7.8.1/A-0-1] DEBE incluir un micrófono.
Implementaciones de dispositivos para automóviles:
- [7.8.2/A-0-1] DEBE tener una salida de audio y declarar
android.hardware.audio.output
.
2.5.2. Multimedia
Las implementaciones de dispositivos para automóviles DEBEN admitir la siguiente codificación de audio:
- [5.1/A-0-1] Perfil AAC de MPEG-4 (AAC LC)
- [5.1/A-0-2] Perfil HE AAC de MPEG-4 (AAC+)
- [5.1/A-0-3] AAC ELD (AAC mejorado de bajo retraso)
Las implementaciones de dispositivos para automóviles DEBEN admitir la siguiente codificación de video:
Las implementaciones de dispositivos para automóviles DEBEN admitir la siguiente decodificación de video:
Se RECOMIENDA ENCARECIDAMENTE que las implementaciones de dispositivos para automóviles admitan la siguiente decodificación de video:
- [5.3/A-SR] H.265 HEVC
2.5.3. Software
Implementaciones de dispositivos para automóviles:
- [3/A-0-1] DEBE declarar la función
android.hardware.type.automotive
. - [3/A-0-2] DEBE admitir uiMode = UI_MODE_TYPE_CAR.
-
[3/A-0-3] Las implementaciones de Android Automotive DEBEN admitir todas las APIs públicas en el espacio de nombres
android.car.*
. -
[3.4.1/A-0-1] DEBE proporcionar una implementación completa de la API de
android.webkit.Webview
. -
[3.8.3/A-0-1] DEBE mostrar notificaciones que usen la API de
Notification.CarExtender
cuando lo soliciten aplicaciones de terceros. -
[3.8.4/A-0-1] DEBE implementar un asistente en el dispositivo para controlar la acción de asistencia.
-
[3.14/A-0-1] DEBE incluir un framework de IU para admitir apps de terceros que usen las APIs de medios, como se describe en la sección 3.14.
2.2.4. Rendimiento y potencia
Implementaciones de dispositivos para automóviles:
- [8.3/A-0-1] Todas las apps exentas de los modos de ahorro de energía de App Standby y Descanso DEBEN ser visibles para el usuario final.
-
[8.3/A-0-2] Los algoritmos de activación, mantenimiento y activación de los modos de ahorro de energía App Standby y Doze NO DEBEN desviarse del Proyecto de código abierto de Android.
-
[8.4/A-0-1] DEBE proporcionar un perfil de energía por componente que defina el valor de consumo de corriente para cada componente de hardware y el consumo aproximado de batería que causan los componentes con el tiempo, como se documenta en el sitio del Proyecto de código abierto de Android.
- [8.4/A-0-2] DEBE informar todos los valores de consumo de energía en miliamperios-hora (mAh).
- [8.4/A-0-3] DEBE informar el consumo de energía de la CPU por UID de cada proceso. El Proyecto de código abierto de Android cumple con el requisito a través de la implementación del módulo del kernel
uid_cputime
. - [8.4/A] SE DEBE atribuir al componente de hardware en sí si no se puede atribuir el uso de energía del componente de hardware a una aplicación.
- [8.4/A-0-4] DEBE poner este uso de energía a disposición del desarrollador de la app a través del comando de shell
adb shell dumpsys batterystats
.
2.2.5. Modelo de seguridad
Si las implementaciones de dispositivos para automóviles incluyen varios usuarios, deben cumplir con los siguientes requisitos:
- [9.5/A-1-1] DEBE incluir una cuenta de invitado que permita todas las funciones que proporciona el sistema del vehículo sin requerir que el usuario inicie sesión.
Implementaciones de dispositivos para automóviles:
- [9.14/A-0-1] DEBE controlar el acceso a los mensajes de los subsistemas del vehículo del framework de Android, p.ej., permitir tipos y fuentes de mensajes permitidos.
- [9.14/A-0-2] DEBE supervisar los ataques de denegación de servicio del framework de Android o de apps de terceros. Esto protege contra el software malicioso que inunda la red del vehículo con tráfico, lo que puede provocar un mal funcionamiento de los subsistemas del vehículo.
2.6. Requisitos de la tablet
Un dispositivo tablet Android hace referencia a una implementación de dispositivo Android que se suele usar sosteniéndolo con ambas manos y no en formato de concha.
Las implementaciones de dispositivos Android se clasifican como tablets si cumplen con todos los criterios siguientes:
- Tener una fuente de alimentación que proporcione movilidad, como una batería
- Tener un tamaño de pantalla diagonal física de entre 7 y 18 pulgadas
Las implementaciones de dispositivos tablet tienen requisitos similares a las implementaciones de dispositivos portátiles. Las excepciones se indican con un asterisco (*) en esa sección y se mencionan como referencia en esta sección.
2.4.1. Hardware
Tamaño de pantalla
- [7.1.1.1/Tab-0-1] DEBE tener una pantalla de entre 7 y 18 pulgadas.
Memoria y almacenamiento mínimos (sección 7.6.1)
Las densidades de pantalla que se indican para pantallas pequeñas o normales en los requisitos de dispositivos portátiles no se aplican a las tablets.
Modo de periférico USB (sección 7.7.1)
Si las implementaciones de dispositivos tablet incluyen un puerto USB que admite el modo periférico, deben cumplir con lo siguiente:
- [7.7.1/Tab]PUEDE implementar la API de Android Open Accessory (AOA).
Modo de realidad virtual (sección 7.9.1)
Alto rendimiento de realidad virtual (sección 7.9.2)
Los requisitos de realidad virtual no se aplican a las tablets.
3. Software
3.1. Compatibilidad de la API administrada
El entorno de ejecución de código de bytes de Dalvik administrado es el principal vehículo para las aplicaciones de Android. La interfaz de programación de aplicaciones (API) de Android es el conjunto de interfaces de la plataforma de Android expuestas a las aplicaciones que se ejecutan en el entorno de ejecución administrado.
-
[C-0-1] Las implementaciones de dispositivos DEBEN proporcionar implementaciones completas, incluidos todos los comportamientos documentados, de cualquier API documentada expuesta por el SDK de Android o cualquier API decorada con el marcador “@SystemApi” en el código fuente de Android upstream.
-
[C-0-2] Las implementaciones de dispositivos DEBEN admitir o conservar todas las clases, los métodos y los elementos asociados marcados por la anotación TestApi (@TestApi).
-
[C-0-3] Las implementaciones de dispositivos NO DEBEN omitir ninguna API administrada, alterar las interfaces o firmas de las APIs, desviarse del comportamiento documentado ni incluir operaciones nulas, excepto cuando esta Definición de compatibilidad lo permita específicamente.
-
[C-0-4] Las implementaciones de dispositivos DEBEN mantener las APIs presentes y comportarse de manera razonable, incluso cuando se omitan algunas funciones de hardware para las que Android incluye APIs. Consulta la sección 7 para conocer los requisitos específicos de esta situación.
3.1.1. Extensiones de Android
Android incluye la compatibilidad para extender las APIs administradas y mantener la misma versión del nivel de API.
- [C-0-1] Las implementaciones de dispositivos Android DEBEN precargar la implementación del AOSP de la biblioteca compartida
ExtShared
y los serviciosExtServices
con versiones superiores o iguales a las versiones mínimas permitidas para cada nivel de API. Por ejemplo, las implementaciones de dispositivos Android 7.0, que ejecutan el nivel de API 24, DEBEN incluir al menos la versión 1.
3.2. Compatibilidad de API flexible
Además de las APIs administradas de la sección 3.1, Android también incluye una API “flexible” significativa solo para el tiempo de ejecución, en forma de intents, permisos y aspectos similares de las aplicaciones para Android que no se pueden aplicar en el tiempo de compilación de la aplicación.
3.2.1. Permisos
- [C-0-1] Los implementadores de dispositivos DEBEN admitir y aplicar todas las constantes de permisos, tal como se documenta en la página de referencia de permisos. Ten en cuenta que en la sección 9, se enumeran requisitos adicionales relacionados con el modelo de seguridad de Android.
3.2.2. Parámetros de compilación
Las APIs de Android incluyen varias constantes en la clase android.os.Build que tienen como objetivo describir el dispositivo actual.
- [C-0-1] Para proporcionar valores coherentes y significativos en todas las implementaciones de dispositivos, la siguiente tabla incluye restricciones adicionales sobre los formatos de estos valores a los que las implementaciones de dispositivos DEBEN ajustarse.
Parámetro | Detalles |
---|---|
VERSION.RELEASE | Versión del sistema Android que se está ejecutando actualmente, en formato legible. Este campo DEBE tener uno de los valores de cadena definidos en 8.0. |
VERSION.SDK | Es la versión del sistema Android que se está ejecutando actualmente, en un formato accesible para el código de la aplicación de terceros. Para Android 8.0, este campo DEBE tener el valor de número entero 8.0_INT. |
VERSION.SDK_INT | Es la versión del sistema Android que se está ejecutando actualmente, en un formato accesible para el código de la aplicación de terceros. Para Android 8.0, este campo DEBE tener el valor de número entero 8.0_INT. |
VERSION.INCREMENTAL | Es un valor elegido por el implementador del dispositivo que designa la compilación específica del sistema Android que se está ejecutando actualmente, en formato legible para el usuario. Este valor NO se debe volver a usar para diferentes compilaciones disponibles para los usuarios finales. Un uso típico de este campo es indicar qué número de compilación o identificador de cambio de control de código fuente se usó para generar la compilación. No hay requisitos sobre el formato específico de este campo, excepto que NO DEBE ser nulo ni la cadena vacía (""). |
JUEGOS DE MESA | Es un valor elegido por el implementador del dispositivo que identifica el hardware interno específico que usa el dispositivo, en formato legible para humanos. Un posible uso de este campo es indicar la revisión específica de la placa que alimenta el dispositivo. El valor de este campo DEBE poder codificarse como ASCII de 7 bits y coincidir con la expresión regular “^[a-zA-Z0-9_-]+$”. |
SEGURIDAD | Es un valor que refleja el nombre de la marca asociada al dispositivo, tal como lo conocen los usuarios finales. DEBE estar en un formato legible para las personas y DEBE representar al fabricante del dispositivo o la marca de la empresa con la que se comercializa el dispositivo. El valor de este campo DEBE poder codificarse como ASCII de 7 bits y coincidir con la expresión regular “^[a-zA-Z0-9_-]+$”. |
SUPPORTED_ABIS | Nombre del conjunto de instrucciones (tipo de CPU + convención de ABI) del código nativo. Consulta la sección 3.3. Compatibilidad con la API nativa. |
SUPPORTED_32_BIT_ABIS | Nombre del conjunto de instrucciones (tipo de CPU + convención de ABI) del código nativo. Consulta la sección 3.3. Compatibilidad con la API nativa. |
SUPPORTED_64_BIT_ABIS | Nombre del segundo conjunto de instrucciones (tipo de CPU + convención de ABI) del código nativo. Consulta la sección 3.3. Compatibilidad con la API nativa. |
CPU_ABI | Nombre del conjunto de instrucciones (tipo de CPU + convención de ABI) del código nativo. Consulta la sección 3.3. Compatibilidad con la API nativa. |
CPU_ABI2 | Nombre del segundo conjunto de instrucciones (tipo de CPU + convención de ABI) del código nativo. Consulta la sección 3.3. Compatibilidad con la API nativa. |
DISPOSITIVO | Es un valor que elige el implementador del dispositivo y que contiene el nombre de desarrollo o el nombre clave que identifica la configuración de las funciones de hardware y el diseño industrial del dispositivo. El valor de este campo DEBE poder codificarse como ASCII de 7 bits y coincidir con la expresión regular “^[a-zA-Z0-9_-]+$”. El nombre del dispositivo NO DEBE cambiar durante la vida útil del producto. |
FINGERPRINT |
Es una cadena que identifica de forma única esta compilación. DEBE ser razonablemente legible. DEBE seguir esta plantilla:
$(BRAND)/$(PRODUCT)/ Por ejemplo:
acme/myproduct/ La huella digital NO DEBE incluir caracteres de espacio en blanco. Si otros campos incluidos en la plantilla anterior tienen caracteres de espacio en blanco, se DEBEN reemplazar en la huella digital de compilación por otro carácter, como el guion bajo (“_”). El valor de este campo DEBE poder codificarse como ASCII de 7 bits. |
HARDWARE | Nombre del hardware (desde la línea de comandos del kernel o /proc). DEBE ser razonablemente legible. El valor de este campo DEBE poder codificarse como ASCII de 7 bits y coincidir con la expresión regular “^[a-zA-Z0-9_-]+$”. |
ORGANIZADOR | Es una cadena que identifica de forma única el host en el que se compiló la compilación, en un formato legible. No hay requisitos sobre el formato específico de este campo, excepto que NO DEBE ser nulo ni la cadena vacía (""). |
ID | Es un identificador elegido por el implementador del dispositivo para hacer referencia a una versión específica, en formato legible por humanos. Este campo puede ser el mismo que android.os.Build.VERSION.INCREMENTAL, pero DEBE ser un valor lo suficientemente significativo para que los usuarios finales distingan entre las compilaciones de software. El valor de este campo DEBE poder codificarse como ASCII de 7 bits y coincidir con la expresión regular “^[a-zA-Z0-9._-]+$”. |
FABRICANTE | Es el nombre comercial del fabricante del equipo original (OEM) del producto. No hay requisitos sobre el formato específico de este campo, excepto que NO DEBE ser nulo ni una cadena vacía (""). Este campo NO DEBE cambiar durante la vida útil del producto. |
MODELO. | Es un valor elegido por el implementador del dispositivo que contiene el nombre del dispositivo tal como lo conoce el usuario final. Este DEBE ser el mismo nombre con el que se comercializa y vende el dispositivo a los usuarios finales. No hay requisitos sobre el formato específico de este campo, excepto que NO DEBE ser nulo ni una cadena vacía (""). Este campo NO DEBE cambiar durante la vida útil del producto. |
PRODUCTO | Es un valor elegido por el implementador del dispositivo que contiene el nombre de desarrollo o el nombre clave del producto específico (SKU) que DEBE ser único dentro de la misma marca. DEBE ser legible por humanos, pero no necesariamente está destinado a que lo vean los usuarios finales. El valor de este campo DEBE poder codificarse como ASCII de 7 bits y coincidir con la expresión regular “^[a-zA-Z0-9_-]+$”. El nombre del producto NO DEBE cambiar durante su ciclo de vida. |
SERIAL | Es un número de serie de hardware que DEBE estar disponible y ser único en todos los dispositivos con el mismo MODELO y FABRICANTE. El valor de este campo DEBE poder codificarse como ASCII de 7 bits y coincidir con la expresión regular “^([a-zA-Z0-9]{6,20})$”. |
ETIQUETAS | Es una lista de etiquetas separadas por comas que elige el implementador del dispositivo y que distinguen aún más la compilación. Este campo DEBE tener uno de los valores correspondientes a las tres configuraciones típicas de firma de la plataforma de Android: release-keys, dev-keys y test-keys. |
TIEMPO | Es un valor que representa la marca de tiempo de cuándo se produjo la compilación. |
TIPO | Es un valor que elige el implementador del dispositivo y que especifica la configuración del entorno de ejecución de la compilación. Este campo DEBE tener uno de los valores correspondientes a las tres configuraciones típicas del tiempo de ejecución de Android: user, userdebug o eng. |
USUARIO | Nombre o ID de usuario del usuario (o usuario automatizado) que generó la compilación. No hay requisitos sobre el formato específico de este campo, excepto que NO DEBE ser nulo ni la cadena vacía (""). |
SECURITY_PATCH | Es un valor que indica el nivel de parche de seguridad de una compilación. DEBE indicar que la compilación no es vulnerable de ninguna manera a ninguno de los problemas descritos hasta el Boletín público de seguridad de Android designado. DEBE tener el formato [AAAA-MM-DD], que coincida con una cadena definida y documentada en el Boletín público de seguridad de Android o en el Aviso de seguridad de Android, por ejemplo, "2015-11-01". |
BASE_OS | Es un valor que representa el parámetro FINGERPRINT de la compilación, que, de lo contrario, es idéntica a esta compilación, excepto por los parches proporcionados en el Boletín de seguridad pública de Android. DEBE informar el valor correcto y, si no existe tal compilación, informar una cadena vacía (""). |
BOOTLOADER | Es un valor elegido por el implementador del dispositivo que identifica la versión específica del bootloader interno que se usa en el dispositivo, en un formato legible para las personas. El valor de este campo DEBE poder codificarse como ASCII de 7 bits y coincidir con la expresión regular “^[a-zA-Z0-9._-]+$”. |
getRadioVersion() | DEBE ser o devolver un valor elegido por el implementador del dispositivo que identifique la versión específica de la radio o el módem internos que se usan en el dispositivo, en un formato legible. Si un dispositivo no tiene radio o módem internos, DEBE devolver NULL. El valor de este campo DEBE poder codificarse como ASCII de 7 bits y coincidir con la expresión regular “^[a-zA-Z0-9._-,]+$”. |
3.2.3. Compatibilidad de intents
3.2.3.1. Intents principales de la aplicación
Los intents de Android permiten que los componentes de la aplicación soliciten funcionalidad de otros componentes de Android. El proyecto upstream de Android incluye una lista de aplicaciones consideradas aplicaciones principales de Android, que implementa varios patrones de intents para realizar acciones comunes.
-
[C-0-1] Las implementaciones de dispositivos DEBEN incluir estos componentes de aplicaciones y servicios, o al menos un controlador, para todos los patrones de filtros de intents públicos definidos por las siguientes aplicaciones principales de Android en AOSP:
- Reloj de escritorio
- Navegador
- Calendario
- Contactos
- Galería
- GlobalSearch
- Selector
- Música
- Configuración
3.2.3.2. Resolución de intents
- [C-0-1] Como Android es una plataforma extensible, las implementaciones de dispositivos DEBEN permitir que las aplicaciones de terceros anulen cada patrón de intents al que se hace referencia en la sección 3.2.3.1. La implementación de código abierto de Android upstream lo permite de forma predeterminada.
-
[C-0-2] Los implementadores de dispositivos NO DEBEN adjuntar privilegios especiales al uso de estos patrones de intents por parte de las aplicaciones del sistema, ni impedir que las aplicaciones de terceros se vinculen a estos patrones y asuman su control. Esta prohibición incluye específicamente, sin limitaciones, la inhabilitación de la interfaz de usuario del “Selector” que permite al usuario seleccionar entre varias aplicaciones que controlan el mismo patrón de intents.
-
[C-0-3] Las implementaciones de dispositivos DEBEN proporcionar una interfaz de usuario para que los usuarios modifiquen la actividad predeterminada para intents.
-
Sin embargo, las implementaciones de dispositivos PUEDEN proporcionar actividades predeterminadas para patrones de URI específicos (p.ej., http://play.google.com) cuando la actividad predeterminada proporciona un atributo más específico para el URI de datos. Por ejemplo, un patrón de filtro de intents que especifica el URI de datos “http://www.android.com” es más específico que el patrón de intents principal del navegador para “http://”.
Android también incluye un mecanismo para que las apps de terceros declaren un comportamiento de vinculación de apps predeterminado y autorizado para ciertos tipos de intents de URI web. Cuando se definen esas declaraciones autorizadas en los patrones de filtros de intents de una app, las implementaciones del dispositivo hacen lo siguiente:
- [C-0-4] DEBE intentar validar los filtros de intents realizando los pasos de validación definidos en la especificación de Digital Asset Links tal como la implementa el administrador de paquetes en el proyecto de código abierto de Android upstream.
- [C-0-5] DEBE intentar validar los filtros de intents durante la instalación de la aplicación y establecer todos los filtros de intents de URI validados correctamente como controladores de apps predeterminados para sus URIs.
- PUEDE establecer filtros de intents de URI específicos como controladores de apps predeterminados para sus URI, si se verifican correctamente, pero otros filtros de URI candidatos no superan la verificación. Si una implementación de dispositivo hace esto, DEBE proporcionar al usuario anulaciones adecuadas por patrón de URI en el menú de configuración.
- DEBE proporcionar al usuario controles de vínculos de app por app en la Configuración de la siguiente manera:
- [C-0-6] El usuario DEBE poder anular de forma integral el comportamiento predeterminado de los vínculos de la app para que una app se pueda abrir siempre, preguntar siempre o no abrirse nunca, lo que se debe aplicar a todos los filtros de intents de URI candidatos por igual.
- [C-0-7] El usuario DEBE poder ver una lista de los filtros de intents de URI candidatos.
- La implementación del dispositivo PUEDE proporcionar al usuario la capacidad de anular filtros de intents de URI candidatos específicos que se verificaron correctamente, por filtro de intents.
- [C-0-8] La implementación del dispositivo DEBE proporcionar a los usuarios la capacidad de ver y anular filtros de intents de URI específicos candidatos si la implementación del dispositivo permite que algunos filtros de intents de URI candidatos superen la verificación, mientras que otros pueden fallar.
3.2.3.3. Espacios de nombres de intents
- [C-0-1] Las implementaciones de dispositivos NO DEBEN incluir ningún componente de Android que cumpla con patrones de intents nuevos o de intents de transmisión que usen una cadena de ACTION, CATEGORY o cualquier otra cadena clave en el espacio de nombres android. o com.android..
- [C-0-2] Los implementadores de dispositivos NO DEBEN incluir ningún componente de Android que cumpla con patrones de intents nuevos o de intents de transmisión que usen una cadena de ACTION, CATEGORY o cualquier otra cadena clave en un espacio de paquetes que pertenezca a otra organización.
- [C-0-3] Los implementadores de dispositivos NO DEBEN alterar ni extender ninguno de los patrones de intents que usan las apps principales que se enumeran en la sección 3.2.3.1.
- Las implementaciones de dispositivos PUEDEN incluir patrones de intents que usen espacios de nombres asociados de forma clara y evidente con su propia organización. Esta prohibición es análoga a la que se especifica para las clases de lenguaje Java en la sección 3.6.
3.2.3.4. Intents de transmisión
Las aplicaciones de terceros dependen de la plataforma para transmitir ciertos intents que les notifiquen sobre los cambios en el entorno de hardware o software.
Implementaciones del dispositivo:
- [C-0-1] DEBE transmitir las intents de transmisión pública en respuesta a los eventos del sistema adecuados, como se describe en la documentación del SDK. Ten en cuenta que este requisito no entra en conflicto con el artículo 3.5, ya que la limitación para las aplicaciones en segundo plano también se describe en la documentación del SDK.
3.2.3.5. Configuración predeterminada de apps
Android incluye parámetros de configuración que les brindan a los usuarios una forma sencilla de seleccionar sus aplicaciones predeterminadas, por ejemplo, para la pantalla principal o los SMS.
Cuando sea pertinente, las implementaciones de dispositivos DEBEN proporcionar un menú de configuración similar y ser compatibles con el patrón de filtro de intents y los métodos de API que se describen en la documentación del SDK, como se indica a continuación.
Si las implementaciones de dispositivos informan android.software.home_screen
, significa que:
- [C-1-1] DEBE satisfacer el intent android.settings.HOME_SETTINGS para mostrar un menú de configuración predeterminado de la app para la pantalla principal.
Si las implementaciones de dispositivos informan android.hardware.telephony
, significa que:
- [C-2-1] DEBE proporcionar un menú de configuración que llame al intent android.provider.Telephony.ACTION_CHANGE_DEFAULT para mostrar un diálogo que permita cambiar la aplicación de SMS predeterminada.
Si las implementaciones de dispositivos informan android.hardware.nfc.hce
, significa que:
- [C-3-1] DEBE respetar el intent android.settings.NFC_PAYMENT_SETTINGS para mostrar un menú de configuración de la app predeterminada para Toca y paga.
Si las implementaciones de dispositivos informan android.hardware.telephony
, significa que:
- [C-4-1] DEBE satisfacer la intención android.telecom.action.CHANGE_DEFAULT_DIALER para mostrar un diálogo que permita al usuario cambiar la aplicación de Teléfono predeterminada.
Si las implementaciones de dispositivos admiten VoiceInteractionService, deben cumplir con lo siguiente:
- [C-5-1] DEBE respetar el intent android.settings.ACTION_VOICE_INPUT_SETTINGS para mostrar un menú de configuración predeterminado de la app para la entrada de voz y la asistencia.
3.2.4. Actividades en pantallas secundarias
Si las implementaciones del dispositivo permiten iniciar actividades de Android normales en pantallas secundarias, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE establecer la marca de función
android.software.activities_on_secondary_displays
. - [C-1-2] DEBE garantizar la compatibilidad de la API de forma similar a una actividad que se ejecuta en la pantalla principal.
- [C-1-3] DEBE iniciar la actividad nueva en la misma pantalla que la actividad que la inició cuando la actividad nueva se inicia sin especificar una pantalla de destino a través de la API de
ActivityOptions.setLaunchDisplayId()
. - [C-1-4] DEBE destruir todas las actividades cuando se quita una pantalla con la marca
Display.FLAG_PRIVATE
. - [C-1-5] DEBE cambiar el tamaño de todas las actividades en un
VirtualDisplay
de forma acorde si se cambia el tamaño de la pantalla. - PUEDE mostrar un IME (editor de método de entrada, un control para el usuario que le permite ingresar texto) en la pantalla principal cuando un campo de entrada de texto se enfoca en una pantalla secundaria.
- DEBE implementar el enfoque de entrada en la pantalla secundaria de forma independiente de la pantalla principal cuando se admitan entradas táctiles o de teclado.
- DEBE tener
android.content.res.Configuration
, que corresponde a esa pantalla, para mostrarse, funcionar correctamente y mantener la compatibilidad si se inicia una actividad en la pantalla secundaria.
Si las implementaciones de dispositivos permiten iniciar actividades de Android normales en pantallas secundarias y las pantallas primarias y secundarias tienen diferentes android.util.DisplayMetrics, haz lo siguiente:
- [C-2-1] Las actividades que no se pueden cambiar de tamaño (que tienen
resizeableActivity=false
enAndroidManifest.xml
) y las apps que se segmentan para el nivel de API 23 o inferior NO DEBEN permitirse en pantallas secundarias.
Si las implementaciones del dispositivo permiten iniciar actividades de Android normales en pantallas secundarias y una pantalla secundaria tiene la marca android.view.Display.FLAG_PRIVATE, se aplican las siguientes condiciones:
- [C-3-1] Solo el propietario de esa pantalla, el sistema y las actividades que ya se encuentran en esa pantalla DEBEN poder iniciarse en ella. Cualquier persona puede iniciar una pantalla que tenga el parámetro android.view.Display.FLAG_PUBLIC.
3.3. Compatibilidad con la API nativa
La compatibilidad con código nativo es un desafío. Por este motivo, los implementadores de dispositivos deben hacer lo siguiente:
- [SR] SE RECOMIENDA ENCARECIDAMENTE usar las implementaciones de las bibliotecas que se indican a continuación del proyecto de código abierto de Android upstream.
3.3.1. Interfaces binarias de aplicaciones
El código de bytes de Dalvik administrado puede llamar al código nativo proporcionado en el archivo .apk
de la aplicación como un archivo .so
ELF compilado para la arquitectura de hardware del dispositivo adecuada. Dado que el código nativo depende en gran medida de la tecnología del procesador subyacente, Android define varias interfaces binarias de aplicaciones (ABIs) en el NDK de Android.
Implementaciones del dispositivo:
- [C-0-1] DEBE ser compatible con una o más ABI definidas y debe implementar la compatibilidad con el NDK de Android.
- [C-0-2] DEBE incluir compatibilidad con el código que se ejecuta en el entorno administrado para llamar al código nativo, utilizando la semántica estándar de la interfaz nativa de Java (JNI).
- [C-0-3] DEBE ser compatible con el código fuente (es decir, con el encabezado) y con el código binario (para la ABI) con cada biblioteca requerida en la siguiente lista.
- [C-0-4] DEBE admitir la ABI equivalente de 32 bits si se admite alguna ABI de 64 bits.
- [C-0-5] DEBE informar con precisión la interfaz binaria de aplicación (ABI) nativa que admite el dispositivo a través de los parámetros
android.os.Build.SUPPORTED_ABIS
,android.os.Build.SUPPORTED_32_BIT_ABIS
yandroid.os.Build.SUPPORTED_64_BIT_ABIS
, cada uno de los cuales es una lista separada por comas de las ABI ordenadas de la más a la menos preferida. - [C-0-6] DEBE informar, a través de los parámetros anteriores, solo las ABIs documentadas y descritas en la versión más reciente de la documentación de administración de ABI del NDK de Android y DEBE incluir compatibilidad con la extensión Advanced SIMD (también conocida como NEON).
-
[C-0-7] DEBE poner a disposición de las apps que incluyen código nativo todas las siguientes bibliotecas, que proporcionan APIs nativas:
- libaaudio.so (compatibilidad con audio nativo de AAudio)
- libandroid.so (compatibilidad con actividades nativas de Android)
- libc (biblioteca C)
- libcamera2ndk.so
- libdl (vinculador dinámico)
- libEGL.so (administración de superficies OpenGL nativas)
- libGLESv1_CM.so (OpenGL ES 1.x)
- libGLESv2.so (OpenGL ES 2.0)
- libGLESv3.so (OpenGL ES 3.x)
- libicui18n.so
- libicuuc.so
- libjnigraphics.so
- liblog (registro de Android)
- libmediandk.so (compatibilidad con las APIs de medios nativas)
- libm (biblioteca matemática)
- libOpenMAXAL.so (compatibilidad con OpenMAX AL 1.0.1)
- libOpenSLES.so (compatibilidad de audio con OpenSL ES 1.0.1)
- libRS.so
- libstdc++ (compatibilidad mínima con C++)
- libvulkan.so (Vulkan)
- libz (compresión Zlib)
- Interfaz de JNI
-
[C-0-8] NO DEBE agregar ni quitar las funciones públicas de las bibliotecas nativas mencionadas anteriormente.
- [C-0-9] DEBE incluir en
/vendor/etc/public.libraries.txt
las bibliotecas adicionales que no son de AOSP y que se exponen directamente a las apps de terceros. - [C-0-10] NO DEBE exponer ninguna otra biblioteca nativa, implementada y proporcionada en AOSP como bibliotecas del sistema, a las apps de terceros que segmentan el nivel de API 24 o superior, ya que están reservadas.
- [C-0-11] DEBE exportar todos los símbolos de función de OpenGL ES 3.1 y del Android Extension Pack, según se definen en el NDK, a través de la biblioteca
libGLESv3.so
. Ten en cuenta que, si bien TODOS los símbolos DEBEN estar presentes, la sección 7.1.4.1 describe con más detalle los requisitos para los casos en los que se espera la implementación completa de cada una de las funciones correspondientes. - [C-0-12] DEBE exportar símbolos de funciones para los símbolos de funciones principales de Vulkan 1.0, así como las extensiones
VK_KHR_surface
,VK_KHR_android_surface
,VK_KHR_swapchain
,VK_KHR_maintenance1
yVK_KHR_get_physical_device_properties2
a través de la bibliotecalibvulkan.so
. Ten en cuenta que, si bien TODOS los símbolos DEBEN estar presentes, la sección 7.1.4.2 describe con más detalle los requisitos para los casos en los que se espera la implementación completa de cada una de las funciones correspondientes. - DEBE compilarse con el código fuente y los archivos de encabezado disponibles en el proyecto de código abierto de Android upstream.
Ten en cuenta que las versiones futuras del NDK de Android pueden introducir compatibilidad con ABIs adicionales.
3.3.2. Compatibilidad con código nativo de ARM de 32 bits
Si las implementaciones de dispositivos son dispositivos ARM de 64 bits, se aplican las siguientes condiciones:
-
[C-1-1] Si bien la arquitectura ARMv8 dejó de admitir varias operaciones de CPU, incluidas algunas que se usan en el código nativo existente, las siguientes operaciones que dejaron de estar disponibles DEBEN seguir estando disponibles para el código ARM nativo de 32 bits, ya sea a través de la compatibilidad nativa de la CPU o de la emulación de software:
- Instrucciones de SWP y SWPB
- Instrucción SETEND
- Operaciones de barrera de CP15ISB, CP15DSB y CP15DMB
Si las implementaciones de dispositivos incluyen una ABI de ARM de 32 bits, deben cumplir con lo siguiente:
-
[C-2-1] DEBE incluir las siguientes líneas en
/proc/cpuinfo
cuando las aplicaciones ARM de 32 bits las leen para garantizar la compatibilidad con las aplicaciones compiladas con versiones heredadas del NDK de Android.-
Features:
, seguido de una lista de las funciones opcionales de CPU ARMv7 que admite el dispositivo. -
CPU architecture:
, seguido de un número entero que describe la arquitectura ARM más alta compatible con el dispositivo (p.ej., "8" para dispositivos ARMv8).
-
-
NO DEBE alterar
/proc/cpuinfo
cuando lo leen aplicaciones ARM de 64 bits o que no son ARM.
3.4. Compatibilidad web
3.4.1. Compatibilidad con WebView
Si las implementaciones de dispositivos proporcionan una implementación completa de la API de android.webkit.Webview
, deben cumplir con los siguientes requisitos:
- [C-1-1] Se DEBE informar
android.software.webview
. - [C-1-2] DEBE usar la compilación del proyecto Chromium del proyecto de código abierto de Android upstream en la rama de Android 8.0 para la implementación de la API de
android.webkit.WebView
. -
[C-1-3] La cadena de usuario-agente que informa WebView DEBE tener este formato:
Mozilla/5.0 (Linux; Android $(VERSION); $(MODEL) Build/$(BUILD); wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 $(CHROMIUM_VER) Mobile Safari/537.36
- El valor de la cadena $(VERSION) DEBE ser el mismo que el valor de android.os.Build.VERSION.RELEASE.
- El valor de la cadena $(MODEL) DEBE ser el mismo que el valor de android.os.Build.MODEL.
- El valor de la cadena $(BUILD) DEBE ser el mismo que el valor de android.os.Build.ID.
- El valor de la cadena $(CHROMIUM_VER) DEBE ser la versión de Chromium en el proyecto de código abierto de Android upstream.
- Las implementaciones de dispositivos PUEDEN omitir Mobile en la cadena del usuario-agente.
-
El componente WebView DEBE incluir compatibilidad con la mayor cantidad posible de funciones de HTML5 y, si admite la función, DEBE cumplir con la especificación de HTML5.
3.4.2. Compatibilidad del navegador
Si las implementaciones de dispositivos incluyen una aplicación de navegador independiente para la navegación web general, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE admitir cada una de estas APIs asociadas con HTML5:
- [C-1-2] DEBE admitir la API de webstorage de HTML5/W3C y DEBE admitir la API de IndexedDB de HTML5/W3C. Ten en cuenta que, a medida que los organismos de estándares de desarrollo web realizan la transición para favorecer a IndexedDB por sobre webstorage, se espera que IndexedDB se convierta en un componente obligatorio en una versión futura de Android.
- ES POSIBLE que se envíe una cadena de usuario-agente personalizada en la aplicación del navegador independiente.
- DEBE implementar la compatibilidad con la mayor cantidad posible de HTML5 en la aplicación de navegador independiente (ya sea que se base en la aplicación de navegador de WebKit upstream o en un reemplazo de terceros).
Sin embargo, si las implementaciones de dispositivos no incluyen una aplicación de navegador independiente, deben cumplir con lo siguiente:
- [C-2-1] DEBE seguir admitiendo los patrones de intención pública como se describe en la sección 3.2.3.1.
3.5. Compatibilidad de comportamiento de la API
El comportamiento de cada uno de los tipos de API (administrada, flexible, nativa y web) debe ser coherente con la implementación preferida del Proyecto de código abierto de Android upstream. Estas son algunas áreas específicas de compatibilidad:
- [C-0-1] Los dispositivos NO DEBEN cambiar el comportamiento ni la semántica de una intención estándar.
- [C-0-2] Los dispositivos NO DEBEN alterar el ciclo de vida ni la semántica del ciclo de vida de un tipo particular de componente del sistema (como Service, Activity, ContentProvider, etcétera).
- [C-0-3] Los dispositivos NO DEBEN cambiar la semántica de un permiso estándar.
- Los dispositivos NO DEBEN alterar las limitaciones que se aplican a las aplicaciones en segundo plano. Más específicamente, para las apps en segundo plano:
- [C-0-4] DEBEN dejar de ejecutar las devoluciones de llamada que registra la app para recibir resultados de
GnssMeasurement
yGnssNavigationMessage
. - [C-0-5] DEBEN limitar la frecuencia de las actualizaciones que se proporcionan a la app a través de la clase de API
LocationManager
o el métodoWifiManager.startScan()
. - [C-0-6] Si la app se segmenta para el nivel de API 25 o superior, NO DEBE permitir el registro de receptores de emisión para las emisiones implícitas de intents estándar de Android en el manifiesto de la app, a menos que el intent de emisión requiera un permiso de
"signature"
o"signatureOrSystem"
protectionLevel
o esté en la lista de exenciones. - [C-0-7] Si la app se segmenta para el nivel de API 25 o superior, DEBE detener los servicios en segundo plano de la app, como si la app hubiera llamado al método
stopSelf()
de los servicios, a menos que la app se coloque en una lista de entidades permitidas temporal para controlar una tarea que sea visible para el usuario. - [C-0-8] Si la app se orienta al nivel de API 25 o superior, DEBE liberar los bloqueos de activación que mantiene.
- [C-0-4] DEBEN dejar de ejecutar las devoluciones de llamada que registra la app para recibir resultados de
La lista anterior no es exhaustiva. El Conjunto de pruebas de compatibilidad (CTS) prueba partes significativas de la plataforma para verificar la compatibilidad del comportamiento, pero no todas. Es responsabilidad del implementador garantizar la compatibilidad de comportamiento con el Proyecto de código abierto de Android. Por este motivo, los implementadores de dispositivos DEBEN usar el código fuente disponible a través del Proyecto de código abierto de Android siempre que sea posible, en lugar de volver a implementar partes significativas del sistema.
3.6. Espacios de nombres de la API
Android sigue las convenciones de espacio de nombres de paquetes y clases definidas por el lenguaje de programación Java. Para garantizar la compatibilidad con aplicaciones de terceros, los implementadores de dispositivos NO DEBEN realizar modificaciones prohibidas (consulta a continuación) en estos espacios de nombres de paquetes:
-
java.*
-
javax.*
-
sun.*
-
android.*
-
com.android.*
Es decir, cumplen con lo siguiente:
- [C-0-1] NO DEBE modificar las APIs expuestas públicamente en la plataforma de Android cambiando las firmas de métodos o clases, ni quitando clases o campos de clases.
- [C-0-2] NO DEBE agregar ningún elemento expuesto públicamente (como clases o interfaces, o campos o métodos a clases o interfaces existentes) ni APIs de prueba o del sistema a las APIs en los espacios de nombres anteriores. Un "elemento expuesto públicamente" es cualquier construcción que no esté decorada con el marcador "@hide", como se usa en el código fuente de Android upstream.
Los implementadores de dispositivos PUEDEN modificar la implementación subyacente de las APIs, pero dichas modificaciones deben cumplir con los siguientes requisitos:
- [C-0-3] NO DEBE afectar el comportamiento declarado ni la firma en lenguaje Java de ninguna API expuesta públicamente.
- [C-0-4] NO SE DEBE publicitar ni exponer de ninguna otra manera a los desarrolladores.
Sin embargo, los implementadores de dispositivos PUEDEN agregar APIs personalizadas fuera del espacio de nombres estándar de Android, pero las APIs personalizadas deben cumplir con los siguientes requisitos:
- [C-0-5] NO DEBE estar en un espacio de nombres que pertenezca a otra organización o que haga referencia a ella. Por ejemplo, los implementadores de dispositivos NO DEBEN agregar APIs al espacio de nombres
com.google.*
o a uno similar: solo Google puede hacerlo. Del mismo modo, Google NO DEBE agregar APIs a los espacios de nombres de otras empresas. - [C-0-6] DEBE empaquetarse en una biblioteca compartida de Android para que solo las apps que las usen de forma explícita (a través del mecanismo <uses-library>) se vean afectadas por el mayor uso de memoria de esas APIs.
Si un implementador de dispositivos propone mejorar uno de los espacios de nombres de paquetes anteriores (por ejemplo, agregando una nueva funcionalidad útil a una API existente o agregando una nueva API), el implementador DEBE visitar source.android.com y comenzar el proceso para contribuir con cambios y código, según la información de ese sitio.
Ten en cuenta que las restricciones anteriores corresponden a las convenciones estándar para nombrar APIs en el lenguaje de programación Java. Esta sección simplemente tiene como objetivo reforzar esas convenciones y hacerlas vinculantes a través de su inclusión en esta Definición de compatibilidad.
3.7. Compatibilidad con el entorno de ejecución
Implementaciones del dispositivo:
-
[C-0-1] DEBE admitir el formato completo Dalvik Executable (DEX) y la especificación y semántica del código de bytes de Dalvik.
-
[C-0-2] DEBE configurar los tiempos de ejecución de Dalvik para asignar memoria de acuerdo con la plataforma de Android upstream y según se especifica en la siguiente tabla. (Consulta la sección 7.1.1 para ver las definiciones de tamaño y densidad de pantalla).
-
DEBE usar Android Runtime (ART), la implementación de referencia upstream del formato ejecutable de Dalvik y el sistema de administración de paquetes de la implementación de referencia.
-
DEBE ejecutar pruebas de fuzzing en varios modos de ejecución y arquitecturas de destino para garantizar la estabilidad del tiempo de ejecución. Consulta JFuzz y DexFuzz en el sitio web del Proyecto de código abierto de Android.
Ten en cuenta que los valores de memoria especificados a continuación se consideran valores mínimos y que las implementaciones de dispositivos PUEDEN asignar más memoria por aplicación.
Diseño de pantalla | Densidad de la pantalla | Memoria mínima de la aplicación |
---|---|---|
Reloj Android | 120 dpi (ldpi) | 32 MB |
160 dpi (mdpi) | ||
213 DPI (tvdpi) | ||
240 dpi (hdpi) | 36 MB | |
280 DPI (280dpi) | ||
320 dpi (xhdpi) | 48 MB | |
360 dpi (360 DPI) | ||
400 dpi (400dpi) | 56 MB | |
420 DPI (420DPI) | 64 MB | |
480 DPI (xxhdpi) | 88 MB | |
560 dpi | 112 MB | |
640 dpi (xxxhdpi) | 154 MB | |
Pequeño/normal | 120 dpi (ldpi) | 32 MB |
160 dpi (mdpi) | ||
213 DPI (tvdpi) | 48 MB | |
240 dpi (hdpi) | ||
280 DPI (280dpi) | ||
320 dpi (xhdpi) | 80 MB | |
360 dpi (360 DPI) | ||
400 dpi (400dpi) | 96 MB | |
420 DPI (420DPI) | 112 MB | |
480 DPI (xxhdpi) | 128 MB | |
560 dpi | 192 MB | |
640 dpi (xxxhdpi) | 256 MB | |
grande | 120 dpi (ldpi) | 32 MB |
160 dpi (mdpi) | 48 MB | |
213 DPI (tvdpi) | 80 MB | |
240 dpi (hdpi) | ||
280 DPI (280dpi) | 96 MB | |
320 dpi (xhdpi) | 128 MB | |
360 dpi (360 DPI) | 160 MB | |
400 dpi (400dpi) | 192 MB | |
420 DPI (420DPI) | 228 MB | |
480 DPI (xxhdpi) | 256 MB | |
560 dpi | 384 MB | |
640 dpi (xxxhdpi) | 512 MB | |
Extragrande | 120 dpi (ldpi) | 48 MB |
160 dpi (mdpi) | 80 MB | |
213 DPI (tvdpi) | 96 MB | |
240 dpi (hdpi) | ||
280 DPI (280dpi) | 144 MB | |
320 dpi (xhdpi) | 192 MB | |
360 dpi (360 DPI) | 240 MB | |
400 dpi (400dpi) | 288 MB | |
420 DPI (420DPI) | 336 MB | |
480 DPI (xxhdpi) | 384 MB | |
560 dpi | 576 MB | |
640 dpi (xxxhdpi) | 768 MB |
3.8. Compatibilidad de la interfaz de usuario
3.8.1. Selector (pantalla principal)
Android incluye una aplicación de Launcher (pantalla principal) y admite aplicaciones de terceros para reemplazar el Launcher del dispositivo (pantalla principal).
Si las implementaciones de dispositivos permiten que las aplicaciones de terceros reemplacen la pantalla principal del dispositivo, deben cumplir con lo siguiente:
- [C-1-1] DEBE declarar la función de la plataforma
android.software.home_screen
. - [C-1-2] DEBE devolver el objeto
AdaptiveIconDrawable
cuando la aplicación de terceros use la etiqueta<adaptive-icon>
para proporcionar su ícono y se llamen a los métodosPackageManager
para recuperar íconos.
Si las implementaciones de dispositivos incluyen un selector predeterminado que admite la fijación de accesos directos en la app, deben cumplir con lo siguiente:
- [C-2-1] DEBE informar
true
paraShortcutManager.isRequestPinShortcutSupported()
. - [C-2-2] DEBE tener una opción para el usuario que le pregunte antes de agregar un acceso directo solicitado por las apps a través del método de la API
ShortcutManager.requestPinShortcut()
.
Por el contrario, si las implementaciones de dispositivos no admiten la fijación en la app, deben cumplir con lo siguiente:
- [C-3-1] DEBE informar
false
paraShortcutManager.isRequestPinShortcutSupported()
yAppWidgetManager.html#isRequestPinAppWidgetSupported()
.
Si las implementaciones de dispositivos incluyen un selector predeterminado que proporciona acceso rápido a los accesos directos adicionales que ofrecen las apps de terceros a través de la API de ShortcutManager, deben cumplir con lo siguiente:
- [C-4-1] DEBE admitir todas las funciones de acceso directo documentadas (p.ej., accesos directos estáticos y dinámicos, fijación de accesos directos) y debe implementar por completo las APIs de la clase de API
ShortcutManager
.
Si las implementaciones de dispositivos incluyen una app de selector predeterminada que muestra insignias para los íconos de apps, deben cumplir con los siguientes requisitos:
- [C-5-1] DEBE respetar el método de la API de
NotificationChannel.setShowBadge()
. En otras palabras, muestra una sugerencia visual asociada con el ícono de la app si el valor se establece comotrue
y no muestres ningún esquema de distintivos del ícono de la app cuando todos los canales de notificación de la app hayan establecido el valor comofalse
. - PUEDE anular los distintivos de íconos de la app con su esquema de distintivos propio cuando las aplicaciones de terceros indiquen que admiten el esquema de distintivos propio a través del uso de APIs propias, pero DEBE usar los recursos y los valores proporcionados a través de las APIs de distintivos de notificación que se describen en el SDK , como las APIs de
Notification.Builder.setNumber()
yNotification.Builder.setBadgeIconType()
.
3.8.2. Widgets
Android admite widgets de apps de terceros definiendo un tipo de componente y una API y un ciclo de vida correspondientes que permiten que las aplicaciones expongan un "AppWidget" al usuario final.
Si las implementaciones de dispositivos admiten widgets de apps de terceros, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE declarar la compatibilidad con la función de la plataforma android.software.app_widgets.
- [C-1-2] DEBE incluir compatibilidad integrada con AppWidgets y exponer recursos de interfaz de usuario para agregar, configurar, ver y quitar AppWidgets directamente desde el Selector.
- [C-1-3] DEBE ser capaz de renderizar widgets de 4 x 4 en el tamaño de cuadrícula estándar. Consulta las Pautas de diseño de widgets de apps en la documentación del SDK de Android para obtener más detalles.
- Es POSIBLE que admita widgets de aplicaciones en la pantalla de bloqueo.
Si las implementaciones de dispositivos admiten widgets de apps de terceros y la fijación de accesos directos en la app, deben cumplir con lo siguiente:
- [C-2-1] DEBE informar
true
paraAppWidgetManager.html.isRequestPinAppWidgetSupported()
. - [C-2-2] DEBE tener una opción para el usuario que le pregunte antes de agregar un acceso directo solicitado por las apps a través del método de la API
AppWidgetManager.requestPinAppWidget()
.
3.8.3. Notificaciones
Android incluye las APIs de Notification
y NotificationManager
que permiten a los desarrolladores de apps de terceros notificar a los usuarios sobre eventos importantes y atraer su atención con los componentes de hardware (p.ej., sonido, vibración y luz) y las funciones de software (p.ej., sombra de notificación, barra del sistema) del dispositivo.
3.8.3.1. Presentación de notificaciones
Si las implementaciones del dispositivo permiten que las apps de terceros notifiquen a los usuarios sobre eventos importantes, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE admitir notificaciones que usen funciones de hardware, como se describe en la documentación del SDK y en la medida de lo posible con el hardware de implementación del dispositivo. Por ejemplo, si la implementación de un dispositivo incluye un vibrador, DEBE implementar correctamente las APIs de vibración. Si una implementación de dispositivo carece de hardware, las APIs correspondientes DEBEN implementarse como no-ops. Este comportamiento se detalla más en la sección 7.
- [C-1-2] DEBE renderizar correctamente todos los recursos (íconos, archivos de animación, etcétera) proporcionados en las APIs o en la guía de estilo de íconos de la barra de estado o del sistema, aunque PUEDE proporcionar una experiencia del usuario alternativa para las notificaciones que la que proporciona la implementación de referencia de Android Open Source.
- [C-1-3] DEBE cumplir y aplicar correctamente los comportamientos descritos para las APIs para actualizar, quitar y agrupar notificaciones.
- [C-1-4] DEBE proporcionar el comportamiento completo de la API de NotificationChannel que se documenta en el SDK.
- [C-1-5] DEBE proporcionar una opción para que el usuario bloquee y modifique la notificación de una app de terceros específica en cada canal y nivel de paquete de la app.
- [C-1-6] TAMBIÉN DEBE proporcionar una opción para que el usuario muestre los canales de notificación borrados.
- DEBE admitir notificaciones enriquecidas.
- SHOULD presentar algunas notificaciones de mayor prioridad como notificaciones de atención.
- DEBE tener la opción para que el usuario posponga las notificaciones.
- La MAY solo puede administrar la visibilidad y el momento en que las apps de terceros pueden notificar a los usuarios sobre eventos importantes para mitigar problemas de seguridad, como la distracción del conductor.
Si las implementaciones de dispositivos admiten notificaciones enriquecidas, deben cumplir con los siguientes requisitos:
- [C-2-1] DEBE usar los recursos exactos que se proporcionan a través de la clase de API
Notification.Style
y sus subclases para los elementos de recursos presentados. - DEBE presentar todos y cada uno de los elementos de recursos (p.ej., ícono, título y texto de resumen) definidos en la clase de la API de
Notification.Style
y sus subclases.
Si las implementaciones de dispositivos admiten notificaciones de atención, se cumplen las siguientes condiciones:
- [C-3-1] DEBE usar la vista y los recursos de la notificación de atención como se describe en la clase de la API de
Notification.Builder
cuando se presenten notificaciones de atención.
3.8.3.2. Servicio de detección de notificaciones
Android incluye las APIs de NotificationListenerService
que permiten que las apps (una vez que el usuario las habilita de forma explícita) reciban una copia de todas las notificaciones a medida que se publican o actualizan.
Implementaciones del dispositivo:
- [C-0-1] DEBE actualizar de forma correcta y oportuna las notificaciones en su totalidad a todos los servicios de escucha instalados y habilitados por el usuario, incluidos todos los metadatos adjuntos al objeto de notificación.
- [C-0-2] DEBE respetar la llamada a la API de
snoozeNotification()
, descartar la notificación y realizar una devolución de llamada después de la duración de la postergación establecida en la llamada a la API.
Si las implementaciones de dispositivos tienen una opción para posponer notificaciones, deben cumplir con lo siguiente:
- [C-1-1] DEBE reflejar correctamente el estado de la notificación pospuesta a través de las APIs estándar, como
NotificationListenerService.getSnoozedNotifications()
. - [C-1-2] DEBE poner a disposición del usuario esta opción para posponer las notificaciones de cada app de terceros instalada, a menos que provengan de servicios persistentes o en primer plano.
3.8.3.3. DND (No interrumpir)
Si las implementaciones de dispositivos admiten la función No molestar, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE implementar una actividad que responda al intent ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS, que, para las implementaciones con UI_MODE_TYPE_NORMAL, DEBE ser una actividad en la que el usuario pueda otorgar o denegar el acceso de la app a la configuración de la política de DND.
- [C-1-2] DEBE mostrar las Reglas de No molestar automáticas creadas por las aplicaciones junto con las reglas creadas por el usuario y las reglas predefinidas cuando la implementación del dispositivo haya proporcionado un medio para que el usuario otorgue o rechace el acceso de las apps de terceros a la configuración de la política de DND.
- [C-1-3] DEBE respetar los valores de
suppressedVisualEffects
que se pasan a través deNotificationManager.Policy
y, si una app configuró alguna de las marcas SUPPRESSED_EFFECT_SCREEN_OFF o SUPPRESSED_EFFECT_SCREEN_ON, DEBE indicarle al usuario que los efectos visuales se suprimen en el menú de configuración del modo No molestar.
3.8.4. Buscar
Android incluye APIs que permiten a los desarrolladores incorporar la búsqueda en sus aplicaciones y exponer los datos de sus aplicaciones en la búsqueda global del sistema. En términos generales, esta funcionalidad consiste en una sola interfaz de usuario a nivel del sistema que permite a los usuarios ingresar consultas, mostrar sugerencias a medida que escriben y mostrar resultados. Las APIs de Android permiten a los desarrolladores reutilizar esta interfaz para proporcionar búsquedas dentro de sus propias apps y suministrar resultados a la interfaz de usuario de búsqueda global común.
- Las implementaciones de dispositivos Android DEBEN incluir la búsqueda global, una interfaz de usuario de búsqueda única, compartida y en todo el sistema, capaz de proporcionar sugerencias en tiempo real en respuesta a la entrada del usuario.
Si las implementaciones de dispositivos implementan la interfaz de búsqueda global, deben hacer lo siguiente:
- [C-1-1] DEBE implementar las APIs que permiten que las aplicaciones de terceros agreguen sugerencias al cuadro de búsqueda cuando se ejecuta en el modo de búsqueda global.
Si no hay aplicaciones de terceros instaladas que utilicen la búsqueda global, haz lo siguiente:
- El comportamiento predeterminado DEBE ser mostrar los resultados y las sugerencias del motor de búsqueda web.
Android también incluye las APIs de Assist para permitir que las aplicaciones elijan cuánta información del contexto actual se comparte con el asistente en el dispositivo.
Si las implementaciones del dispositivo admiten la acción de Asistencia, deben cumplir con lo siguiente:
- [C-2-1] DEBE indicar claramente al usuario final cuándo se comparte el contexto de una de las siguientes maneras:
- Cada vez que la app de asistencia acceda al contexto, se mostrará una luz blanca alrededor de los bordes de la pantalla que cumpla o supere la duración y el brillo de la implementación del Proyecto de código abierto de Android.
- En el caso de la app de asistencia preinstalada, proporcionar una opción para el usuario a menos de dos navegaciones de distancia del menú de configuración predeterminado de la app de entrada de voz y asistencia, y solo compartir el contexto cuando el usuario invoca explícitamente la app de asistencia a través de una palabra clave o la entrada de la tecla de navegación de asistencia.
- [C-2-2] La interacción designada para iniciar la app de asistencia, como se describe en la sección 7.2.3, DEBE iniciar la app de asistencia seleccionada por el usuario, es decir, la app que implementa
VoiceInteractionService
o una actividad que controla el intentACTION_ASSIST
. - [C-SR] SE RECOMIENDA ENCARECIDAMENTE usar la presión prolongada en la tecla
HOME
como esta interacción designada.
3.8.5. Alertas y mensajes emergentes
Las aplicaciones pueden usar la API de Toast
para mostrar cadenas cortas no modales al usuario final que desaparecen después de un breve período y usar la API de tipo de ventana TYPE_APPLICATION_OVERLAY
para mostrar ventanas de alerta como una superposición sobre otras apps.
Si las implementaciones de dispositivos incluyen una pantalla o una salida de video, deben cumplir con lo siguiente:
-
[C-1-1] DEBE proporcionar una opción para que el usuario bloquee la visualización de ventanas de alerta de una app que usen
TYPE_APPLICATION_OVERLAY
. La implementación del AOSP cumple con este requisito, ya que tiene controles en la sombra de notificación. -
[C-1-2] DEBE cumplir con la API de Toast y mostrar los mensajes Toast de las aplicaciones a los usuarios finales de alguna manera muy visible.
3.8.6. Temas
Android proporciona "temas" como un mecanismo para que las aplicaciones apliquen estilos en toda una actividad o aplicación.
Android incluye una familia de temas "Holo" y "Material" como un conjunto de estilos definidos para que los desarrolladores de aplicaciones los usen si desean que coincidan con la apariencia del tema Holo según lo define el SDK de Android.
Si las implementaciones de dispositivos incluyen una pantalla o una salida de video, deben cumplir con lo siguiente:
- [C-1-1] NO DEBE alterar ninguno de los atributos del tema Holo expuestos a las aplicaciones.
- [C-1-2] DEBE admitir la familia de temas "Material" y NO DEBE alterar ninguno de los atributos del tema Material ni sus recursos expuestos a las aplicaciones.
Android también incluye una familia de temas “Predeterminado del dispositivo” como un conjunto de estilos definidos para que los desarrolladores de aplicaciones los usen si desean que coincidan con el aspecto del tema del dispositivo según lo define el implementador del dispositivo.
- Las implementaciones de dispositivos PUEDEN modificar los atributos del tema predeterminado del dispositivo expuestos a las aplicaciones.
Android admite un tema variante con barras del sistema translúcidas, lo que permite a los desarrolladores de aplicaciones completar el área detrás de la barra de estado y de navegación con el contenido de su app. Para habilitar una experiencia del desarrollador coherente en esta configuración, es importante que el estilo del ícono de la barra de estado se mantenga en las diferentes implementaciones de dispositivos.
Si las implementaciones de dispositivos incluyen una barra de estado del sistema, deben cumplir con lo siguiente:
- [C-2-1] DEBE usar el color blanco para los íconos de estado del sistema (como la intensidad de la señal y el nivel de batería) y las notificaciones emitidas por el sistema, a menos que el ícono indique un estado problemático o una app solicite una barra de estado clara con la marca SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.
- [C-2-2] Las implementaciones de dispositivos Android DEBEN cambiar el color de los íconos de estado del sistema a negro (para obtener más detalles, consulta R.style) cuando una app solicite una barra de estado clara.
3.8.7. Fondos de pantalla animados
Android define un tipo de componente y una API y un ciclo de vida correspondientes que permiten que las aplicaciones expongan uno o más “fondos de pantalla animados” al usuario final. Los fondos animados son animaciones, patrones o imágenes similares con capacidades de entrada limitadas que se muestran como fondo de pantalla, detrás de otras aplicaciones.
Se considera que el hardware es capaz de ejecutar fondos de pantalla en vivo de forma confiable si puede ejecutar todos los fondos de pantalla en vivo, sin limitaciones en la funcionalidad, a una velocidad de fotogramas razonable y sin efectos adversos en otras aplicaciones. Si las limitaciones del hardware provocan que los fondos de pantalla o las aplicaciones fallen, funcionen mal, consuman una cantidad excesiva de CPU o batería, o se ejecuten a velocidades de fotogramas inaceptablemente bajas, se considera que el hardware no es capaz de ejecutar fondos de pantalla animados. Por ejemplo, algunos fondos de pantalla animados pueden usar un contexto de OpenGL 2.0 o 3.x para renderizar su contenido. Los fondos de pantalla animados no se ejecutarán de forma confiable en hardware que no admita varios contextos de OpenGL, ya que el uso de un contexto de OpenGL por parte del fondo de pantalla animado puede entrar en conflicto con otras aplicaciones que también usen un contexto de OpenGL.
- Las implementaciones de dispositivos capaces de ejecutar fondos animados de forma confiable, como se describió anteriormente, DEBEN implementar fondos animados.
Si las implementaciones de dispositivos incluyen fondos animados, deben cumplir con lo siguiente:
- [C-1-1] DEBE informar el parámetro de configuración de la plataforma android.software.live_wallpaper.
3.8.8. Cambio de actividad
El código fuente de Android upstream incluye la pantalla de información general, una interfaz de usuario a nivel del sistema para cambiar de tarea y mostrar las actividades y tareas a las que se accedió recientemente con una imagen en miniatura del estado gráfico de la aplicación en el momento en que el usuario la abandonó por última vez.
Las implementaciones de dispositivos que incluyen la tecla de navegación de la función de Recientes, como se detalla en la sección 7.2.3, PUEDEN alterar la interfaz.
Si las implementaciones de dispositivos que incluyen la tecla de navegación de la función de Recientes, como se detalla en la sección 7.2.3, alteran la interfaz, deben cumplir con lo siguiente:
- [C-1-1] DEBE admitir al menos hasta 20 actividades mostradas.
- DEBE mostrar al menos el título de 4 actividades a la vez.
- [C-1-2] DEBE implementar el comportamiento de fijación de pantalla y proporcionar al usuario un menú de configuración para activar o desactivar la función.
- DEBE mostrar el color de resaltado, el ícono y el título de la pantalla en Recientes.
- DEBE mostrar un elemento de cierre ("X"), pero PUEDE retrasar esto hasta que el usuario interactúe con las pantallas.
- DEBE implementar un acceso directo para cambiar fácilmente a la actividad anterior.
- DEBE activar la acción de cambio rápido entre las dos apps usadas más recientemente cuando se presiona dos veces la tecla de función de Recientes.
- DEBE activar el modo multiventana de pantalla dividida, si se admite, cuando se mantenga presionada la tecla de funciones de Recientes.
-
PUEDE mostrar los elementos recientes afiliados como un grupo que se mueve junto.
-
[C-SR] SE RECOMIENDA ENCARECIDAMENTE que las implementaciones de dispositivos usen la interfaz de usuario de Android ascendente (o una interfaz similar basada en miniaturas) para la pantalla de resumen.
3.8.9. Administración de entradas
Android incluye compatibilidad con la administración de entrada y con editores de métodos de entrada de terceros.
Si las implementaciones de dispositivos permiten que los usuarios usen métodos de entrada de terceros en el dispositivo, deben cumplir con lo siguiente:
- [C-1-1] DEBE declarar la función de plataforma android.software.input_methods y admitir las APIs de IME según se definen en la documentación del SDK de Android.
- [C-1-2] DEBE proporcionar un mecanismo accesible para el usuario que permita agregar y configurar métodos de entrada externos en respuesta al intent android.settings.INPUT_METHOD_SETTINGS.
Si las implementaciones de dispositivos declaran el parámetro de configuración android.software.autofill
, deben hacer lo siguiente:
- [C-2-1] DEBE implementar por completo las APIs de
AutofillService
yAutofillManager
, y cumplir con el intentandroid.settings.REQUEST_SET_AUTOFILL_SERVICE
para mostrar un menú de configuración predeterminado de la app que permita habilitar y, luego, inhabilitar el autocompletado, y cambiar el servicio de autocompletado predeterminado para el usuario.
3.8.10. Control de contenido multimedia en la pantalla de bloqueo
La API de Remote Control Client dejó de estar disponible a partir de Android 5.0 en favor de la plantilla de notificación de medios, que permite que las aplicaciones de medios se integren con los controles de reproducción que se muestran en la pantalla de bloqueo.
3.8.11. Protectores de pantalla (anteriormente, Sueños)
Android incluye compatibilidad con protectores de pantalla interactivos, antes conocidos como Dreams. Los protectores de pantalla permiten a los usuarios interactuar con las aplicaciones cuando un dispositivo conectado a una fuente de alimentación está inactivo o acoplado en una base de escritorio. Los dispositivos Android Watch PUEDEN implementar protectores de pantalla, pero otros tipos de implementaciones de dispositivos DEBEN incluir compatibilidad con protectores de pantalla y proporcionar una opción de configuración para que los usuarios configuren protectores de pantalla en respuesta al intent android.settings.DREAM_SETTINGS
.
3.8.12. Ubicación
Si las implementaciones del dispositivo incluyen un sensor de hardware (p.ej., GPS) que puede proporcionar las coordenadas de ubicación, se deben cumplir los siguientes requisitos:
- [C-1-1] Los modos de ubicación DEBEN mostrarse en el menú Ubicación de Configuración.
3.8.13. Unicode y fuente
Android incluye compatibilidad con los caracteres de emoji definidos en Unicode 10.0.
Si las implementaciones de dispositivos incluyen una pantalla o una salida de video, deben cumplir con lo siguiente:
- [C-1-1] DEBE poder renderizar estos caracteres de emoji en un glifo de color.
- [C-1-2] DEBE incluir compatibilidad con lo siguiente:
- Fuente Roboto 2 con diferentes pesos: sans-serif-thin, sans-serif-light, sans-serif-medium, sans-serif-black, sans-serif-condensed, sans-serif-condensed-light para los idiomas disponibles en el dispositivo.
- Cobertura completa de Unicode 7.0 de los alfabetos latino, griego y cirílico, incluidos los rangos latino extendido A, B, C y D, y todos los glifos del bloque de símbolos de moneda de Unicode 7.0
- DEBE admitir los emojis de tono de piel y de familias diversas, como se especifica en el Informe técnico núm. 51 de Unicode.
Si las implementaciones de dispositivos incluyen un IME, deben cumplir con lo siguiente:
- DEBE proporcionar un método de entrada al usuario para estos caracteres de emoji.
3.8.14. Multiventanas
Si las implementaciones de dispositivos tienen la capacidad de mostrar varias actividades al mismo tiempo, deben cumplir con lo siguiente:
- [C-1-1] DEBE implementar esos modos multiventana de acuerdo con los comportamientos y las APIs de la aplicación que se describen en la documentación de compatibilidad con el modo multiventana del SDK de Android y cumplir con los siguientes requisitos:
- [C-1-2] Las aplicaciones pueden indicar si son capaces de operar en el modo multiventana en el archivo
AndroidManifest.xml
, ya sea de forma explícita estableciendo el atributoandroid:resizeableActivity
entrue
o de forma implícita teniendo targetSdkVersion > 24. Las apps que establecen explícitamente este atributo enfalse
en su manifiesto NO DEBEN iniciarse en el modo multiventana. Es POSIBLE que las apps más antiguas con targetSdkVersion < 24 que no establecieron este atributoandroid:resizeableActivity
se inicien en el modo multiventana, pero el sistema DEBE advertir que es posible que la app no funcione como se espera en el modo multiventana. - [C-1-3] NO DEBE ofrecer el modo de pantalla dividida ni el de forma libre si la altura de la pantalla es inferior a 440 dp y el ancho de la pantalla es inferior a 440 dp.
- Las implementaciones de dispositivos con un tamaño de pantalla
xlarge
DEBEN admitir el modo de formato libre.
Si las implementaciones de dispositivos admiten el modo multiventana y el modo de pantalla dividida, deben cumplir con lo siguiente:
- [C-2-1] DEBE cargar previamente un selector redimensionable como el predeterminado.
- [C-2-2] DEBE recortar la actividad anclada de una multiventana de pantalla dividida, PERO DEBE mostrar parte de su contenido si la app de Launcher es la ventana enfocada.
- [C-2-3] DEBE respetar los valores declarados de
AndroidManifestLayout_minWidth
yAndroidManifestLayout_minHeight
de la aplicación de inicio de terceros y no anular estos valores durante la visualización de contenido de la actividad anclada.
Si las implementaciones de dispositivos admiten el modo multiventana y el modo multiventana de pantalla en pantalla, deben cumplir con lo siguiente:
- [C-3-1] DEBE iniciar actividades en el modo multiventana de pantalla en pantalla cuando la app: * Se segmenta para el nivel de API 26 o superior y declara
android:supportsPictureInPicture
* Se segmenta para el nivel de API 25 o inferior y declaraandroid:resizeableActivity
yandroid:supportsPictureInPicture
. - [C-3-2] DEBE exponer las acciones en su SystemUI según lo especificado por la actividad de PIP actual a través de la API de
setActions()
. - [C-3-3] DEBE admitir relaciones de aspecto mayores o iguales a 1:2.39 y menores o iguales a 2.39:1, como se especifica en la actividad de PIP a través de la API de
setAspectRatio()
. - [C-3-4] DEBE usar
KeyEvent.KEYCODE_WINDOW
para controlar la ventana de PIP. Si no se implementa el modo de PIP, la clave DEBE estar disponible para la actividad en primer plano. - [C-3-5] DEBE proporcionar una opción para que el usuario bloquee la visualización de una app en modo PIP. La implementación de AOSP cumple con este requisito, ya que tiene controles en la sombra de notificación.
- [C-3-6] DEBE asignar un ancho y un alto mínimos de 108 dp para la ventana de PIP, y un ancho mínimo de 240 dp y un alto mínimo de 135 dp para la ventana de PIP cuando el
Configuration.uiMode
esté configurado comoUI_MODE_TYPE_TELEVISION
.
3.9. Administración del dispositivo
Android incluye funciones que permiten que las aplicaciones que tienen en cuenta la seguridad realicen funciones de administración de dispositivos a nivel del sistema, como aplicar políticas de contraseñas o realizar un borrado remoto, a través de la API de Android Device Administration].
Si las implementaciones de dispositivos implementan el rango completo de políticas de administración de dispositivos definidas en la documentación del SDK de Android, cumplen con los siguientes requisitos:
- [C-1-1] Se DEBE declarar
android.software.device_admin
. - [C-1-2] DEBE admitir el aprovisionamiento del propietario del dispositivo, como se describe en la sección 3.9.1 y la sección 3.9.1.1.
- [C-1-3] DEBE declarar la compatibilidad con perfiles administrados a través del parámetro de función
android.software.managed_users
, excepto cuando el dispositivo esté configurado de modo que se informe a sí mismo como un dispositivo con poca RAM o de modo que asigne el almacenamiento interno (no extraíble) como almacenamiento compartido.
3.9.1 Aprovisionamiento de dispositivos
3.9.1.1 Provisión del propietario del dispositivo
Si las implementaciones de dispositivos declaran android.software.device_admin
, deben cumplir con lo siguiente:
- [C-1-1] DEBE admitir el registro de un cliente de Device Policy (DPC) como una app de propietario del dispositivo, como se describe a continuación:
- Cuando la implementación del dispositivo aún no tiene configurados datos del usuario, sucede lo siguiente:
- [C-1-3] DEBE informar
true
paraDevicePolicyManager.isProvisioningAllowed(ACTION_PROVISION_MANAGED_DEVICE)
. - [C-1-4] DEBE inscribir la aplicación del DPC como la aplicación de propietario del dispositivo en respuesta a la acción de intent
android.app.action.PROVISION_MANAGED_DEVICE
. - [C-1-5] DEBE inscribir la aplicación del DPC como la app de propietario del dispositivo si este declara compatibilidad con la comunicación de campo cercano (NFC) a través de la marca de función
android.hardware.nfc
y recibe un mensaje NFC que contiene un registro con el tipo de MIMEMIME_TYPE_PROVISIONING_NFC
.
- [C-1-3] DEBE informar
- Cuando la implementación del dispositivo tiene datos del usuario, sucede lo siguiente:
- [C-1-6] DEBE informar
false
paraDevicePolicyManager.isProvisioningAllowed(ACTION_PROVISION_MANAGED_DEVICE)
. - [C-1-7] NO DEBE inscribir ninguna aplicación de DPC como la app de propietario del dispositivo.
- [C-1-6] DEBE informar
- Cuando la implementación del dispositivo aún no tiene configurados datos del usuario, sucede lo siguiente:
- [C-1-2] NO DEBE establecer una aplicación (incluida una aplicación preinstalada) como la aplicación de propietario del dispositivo sin el consentimiento o la acción explícitos del usuario o el administrador del dispositivo.
Si las implementaciones de dispositivos declaran android.software.device_admin
, pero también incluyen una solución de administración de propietario del dispositivo patentada y proporcionan un mecanismo para promover una aplicación configurada en su solución como un "equivalente de propietario del dispositivo" al "propietario del dispositivo" estándar reconocido por las APIs de DevicePolicyManager estándar de Android, deben hacer lo siguiente:
- [C-2-1] DEBE tener un proceso para verificar que la app específica que se promociona pertenece a una solución legítima de administración de dispositivos empresariales y que ya se configuró en la solución propietaria para tener los derechos equivalentes a los de un "propietario del dispositivo".
- [C-2-2] DEBE mostrar la misma divulgación de consentimiento del propietario del dispositivo de AOSP que el flujo iniciado por
android.app.action.PROVISION_MANAGED_DEVICE
antes de inscribir la aplicación del DPC como "Propietario del dispositivo". - PUEDE tener datos del usuario en el dispositivo antes de inscribir la aplicación del DPC como "Propietario del dispositivo".
3.9.1.2 Aprovisionamiento de perfiles administrados
Si las implementaciones de dispositivos declaran android.software.managed_users
, deben cumplir con lo siguiente:
-
[C-1-1] DEBE implementar las APIs que permitan que una aplicación de Device Policy Controller (DPC) se convierta en el propietario de un nuevo perfil administrado.
-
[C-1-2] El proceso de aprovisionamiento del perfil administrado (el flujo que inicia android.app.action.PROVISION_MANAGED_PROFILE) que experimentan los usuarios DEBE alinearse con la implementación de AOSP.
-
[C-1-3] DEBE proporcionar las siguientes opciones para el usuario en la Configuración para indicarle cuándo el Controlador de políticas del dispositivo (DPC) inhabilitó una función del sistema en particular:
- Un ícono coherente o alguna otra ayuda para el usuario (por ejemplo, el ícono de información de AOSP upstream) para representar cuando un administrador del dispositivo restringe un parámetro de configuración en particular.
- Es un mensaje de explicación breve que proporciona el administrador del dispositivo a través de
setShortSupportMessage
. - Ícono de la aplicación del DPC.
3.9.2 Compatibilidad con perfiles administrados
Si las implementaciones de dispositivos declaran android.software.managed_users
, deben cumplir con lo siguiente:
- [C-1-1] DEBE admitir perfiles administrados a través de las APIs de
android.app.admin.DevicePolicyManager
. - [C-1-2] DEBE permitir la creación de un solo perfil administrado.
- [C-1-3] DEBE usar una insignia de ícono (similar a la insignia de trabajo upstream de AOSP) para representar las aplicaciones y los widgets administrados, y otros elementos de la IU con insignias, como Recientes y Notificaciones.
- [C-1-4] DEBE mostrar un ícono de notificación (similar a la insignia de trabajo upstream del AOSP) para indicar cuándo el usuario se encuentra dentro de una aplicación de perfil administrado.
- [C-1-5] DEBE mostrar un mensaje emergente que indique que el usuario se encuentra en el perfil administrado cuando el dispositivo se active (ACTION_USER_PRESENT) y la aplicación en primer plano esté dentro del perfil administrado.
- [C-1-6] Cuando exista un perfil administrado, DEBE mostrar una ayuda visual en el "Selector" de intents para permitir que el usuario reenvíe el intent del perfil administrado al usuario principal o viceversa, si el Device Policy Controller lo habilita.
- [C-1-7] Cuando existe un perfil administrado, DEBE exponer las siguientes opciones para el usuario principal y el perfil administrado:
- Contabilidad separada del uso de la batería, la ubicación, los datos móviles y el almacenamiento para el usuario principal y el perfil administrado
- Administración independiente de las aplicaciones de VPN instaladas en el usuario principal o el perfil administrado
- Administración independiente de las aplicaciones instaladas en el perfil principal o administrado
- Administración independiente de las cuentas dentro del perfil administrado o del usuario principal
- [C-1-8] DEBE garantizar que las aplicaciones de marcador, contactos y mensajería preinstaladas puedan buscar y consultar la información de la persona que llama desde el perfil administrado (si existe) junto con la del perfil principal, si el Device Policy Controller lo permite.
- [C-1-9] DEBE garantizar que cumpla con todos los requisitos de seguridad aplicables a un dispositivo con varios usuarios habilitados (consulta lasección 9.5), aunque el perfil administrado no se considere otro usuario además del usuario principal.
- [C-1-10] DEBE admitir la capacidad de especificar una pantalla de bloqueo independiente que cumpla con los siguientes requisitos para otorgar acceso a las apps que se ejecutan en un perfil administrado.
- Las implementaciones de dispositivos DEBEN respetar el intent
DevicePolicyManager.ACTION_SET_NEW_PASSWORD
y mostrar una interfaz para configurar una credencial de pantalla de bloqueo independiente para el perfil administrado. - Las credenciales de la pantalla de bloqueo del perfil administrado DEBEN usar los mismos mecanismos de almacenamiento y administración de credenciales que el perfil principal, como se documenta en el sitio del Proyecto de código abierto de Android.
- Las políticas de contraseñas del DPC DEBEN aplicarse solo a las credenciales de la pantalla de bloqueo del perfil administrado, a menos que se llame a la instancia
DevicePolicyManager
que devuelve getParentProfileInstance.
- Las implementaciones de dispositivos DEBEN respetar el intent
- Cuando los contactos del perfil administrado se muestran en el registro de llamadas preinstalado, la IU durante la llamada, las notificaciones de llamadas en curso y perdidas, los contactos y las apps de mensajería, DEBEN mostrar el mismo distintivo que se usa para indicar las aplicaciones del perfil administrado.
3.10. Accesibilidad
Android proporciona una capa de accesibilidad que ayuda a los usuarios con discapacidades a navegar por sus dispositivos con mayor facilidad. Además, Android proporciona APIs de la plataforma que permiten que las implementaciones de servicios de accesibilidad reciban devoluciones de llamada para eventos del usuario y del sistema, y generen mecanismos de comentarios alternativos, como texto a voz, comentarios hápticos y navegación con trackball o D-pad.
Si las implementaciones de dispositivos admiten servicios de accesibilidad de terceros, deben cumplir con lo siguiente:
- [C-1-1] DEBE proporcionar una implementación del framework de accesibilidad de Android como se describe en la documentación del SDK de las APIs de accesibilidad.
- [C-1-2] DEBE generar eventos de accesibilidad y entregar el
AccessibilityEvent
adecuado a todas las implementaciones deAccessibilityService
registradas, como se documenta en el SDK. - [C-1-3] DEBE satisfacer la intención
android.settings.ACCESSIBILITY_SETTINGS
para proporcionar un mecanismo accesible para el usuario que permita habilitar e inhabilitar los servicios de accesibilidad de terceros junto con los servicios de accesibilidad precargados. - [C-1-4] DEBE agregar un botón en la barra de navegación del sistema que permita al usuario controlar el servicio de accesibilidad cuando los servicios de accesibilidad habilitados declaren
AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON
. Ten en cuenta que, para las implementaciones de dispositivos sin barra de navegación del sistema, este requisito no se aplica, pero las implementaciones de dispositivos DEBEN proporcionar una ayuda visual para que el usuario controle estos servicios de accesibilidad.
Si las implementaciones de dispositivos incluyen servicios de accesibilidad precargados, deben cumplir con los siguientes requisitos:
- [C-2-1] DEBE implementar estos servicios de accesibilidad precargados como apps compatibles con el inicio directo cuando el almacenamiento de datos esté encriptado con la encriptación basada en archivos (FBE).
- DEBE proporcionar un mecanismo en el flujo de configuración inicial para que los usuarios habiliten los servicios de accesibilidad pertinentes, así como opciones para ajustar el tamaño de fuente, el tamaño de pantalla y los gestos de ampliación.
3.11. Text-to-Speech
Android incluye APIs que permiten que las aplicaciones usen servicios de texto a voz (TTS) y que los proveedores de servicios proporcionen implementaciones de servicios de TTS.
Si las implementaciones de dispositivos informan la función android.hardware.audio.output, deben cumplir con lo siguiente:
- [C-1-1] DEBE admitir las APIs del framework de TTS de Android.
Si las implementaciones de dispositivos admiten la instalación de motores de TTS de terceros, deben cumplir con los siguientes requisitos:
- [C-2-1] DEBE proporcionar una opción para que el usuario seleccione un motor de TTS para usarlo a nivel del sistema.
3.12. Framework de entrada de TV
El marco de trabajo de entrada de Android TV (TIF) simplifica la entrega de contenido en vivo a los dispositivos Android TV. El TIF proporciona una API estándar para crear módulos de entrada que controlan dispositivos Android TV.
Si las implementaciones de dispositivos admiten TIF, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE declarar la función de la plataforma
android.software.live_tv
. - [C-1-2] DEBE precargar una aplicación para TV (app para TV) y cumplir con todos los requisitos que se describen en la sección 3.12.1.
3.12.1. App para TVs
Si las implementaciones del dispositivo admiten TIF, haz lo siguiente:
- [C-1-1] La app de TV DEBE proporcionar funciones para instalar y usar canales de TV, y cumplir con los siguientes requisitos.
La app para TVs que se requiere para las implementaciones de dispositivos Android que declaran la marca de función android.software.live_tv
DEBE cumplir con los siguientes requisitos:
- Las implementaciones de dispositivos DEBEN permitir que se instalen y administren entradas basadas en TIF de terceros (entradas de terceros).
- Las implementaciones de dispositivos PUEDEN proporcionar separación visual entre las entradas basadas en TIF preinstaladas (entradas instaladas) y las entradas de terceros.
- Las implementaciones de dispositivos NO DEBEN mostrar las entradas de terceros a más de una acción de navegación de la app para TVs (es decir, expandir una lista de entradas de terceros desde la app para TVs).
El Proyecto de código abierto de Android proporciona una implementación de la app para TV que cumple con los requisitos anteriores.
3.12.1.1. Guía electrónica de programas
Si las implementaciones de dispositivos admiten TIF, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE mostrar una superposición informativa e interactiva, que DEBE incluir una guía electrónica de programas (EPG) generada a partir de los valores de los campos de TvContract.Programs.
- [C-1-2] Cuando se cambia de canal, las implementaciones del dispositivo DEBEN mostrar los datos de la EPG del programa que se está reproduciendo.
- [SR] Se RECOMIENDA ENCARECIDAMENTE que la EPG muestre las entradas instaladas y las de terceros con la misma prominencia. La EPG NO DEBE mostrar las entradas de terceros a más de una acción de navegación de distancia de las entradas instaladas en la EPG.
- La EPG DEBE mostrar información de todas las entradas instaladas y de terceros.
- La EPG PUEDE proporcionar una separación visual entre las entradas instaladas y las de terceros.
3.12.1.2. Navegación
Si las implementaciones de dispositivos admiten TIF, deben cumplir con los siguientes requisitos:
-
[C-1-1] DEBE permitir la navegación para las siguientes funciones a través del pad direccional y las teclas Atrás y Principal en los dispositivos de entrada de la televisión Android (es decir, control remoto, aplicación de control remoto o control de juegos):
- Cómo cambiar canales de TV
- Cómo abrir la EPG
- Configuración y ajuste de entradas basadas en TIF de terceros
- Se abre el menú de configuración
-
DEBE pasar eventos de teclas a las entradas HDMI a través de CEC.
3.12.1.3. Vinculación de la app de entrada de TV
Si las implementaciones del dispositivo admiten TIF, haz lo siguiente:
- [C-1-1] Las implementaciones de dispositivos Android Television DEBEN admitir la vinculación de la app de entrada de TV, que permite que todas las entradas proporcionen vínculos de actividad desde la actividad actual a otra actividad (es decir, un vínculo desde la programación en vivo al contenido relacionado).
- [C-1-2] La app para TVs DEBE mostrar la vinculación de la app de entrada de TV cuando se proporcione.
3.12.1.4. Cambio de horario
Si las implementaciones de dispositivos admiten TIF, deben cumplir con los siguientes requisitos:
- [SR] SE RECOMIENDA ENCARECIDAMENTE admitir la pausa en directo, que permite al usuario pausar y reanudar el contenido en vivo.
- DEBE proporcionar al usuario una forma de pausar y reanudar el programa que se está reproduciendo, si el cambio de hora para ese programa está disponible.
3.12.1.5. Grabación de TV
Si las implementaciones de dispositivos admiten TIF, deben cumplir con los siguientes requisitos:
- [SR] SE RECOMIENDA ENCARECIDAMENTE que se admita la grabación de TV.
- DEBE proporcionar una interfaz de usuario para reproducir programas grabados.
- Si la entrada de TV admite la grabación y la grabación de un programa no está prohibida, la EPG PUEDE proporcionar una forma de grabar un programa.
3.13. Configuración rápida
Android proporciona un componente de IU de Configuración rápida que permite acceder rápidamente a acciones que se usan con frecuencia o que se necesitan con urgencia.
Si las implementaciones de dispositivos incluyen un componente de IU de Configuración rápida, deben cumplir con lo siguiente:
- [C-1-1] DEBE permitir que el usuario agregue o quite las tarjetas proporcionadas a través de las APIs de
quicksettings
desde una app de terceros. - [C-1-2] NO DEBE agregar automáticamente una tarjeta de una app de terceros directamente a la Configuración rápida.
- [C-1-3] DEBE mostrar todos los mosaicos agregados por el usuario desde apps de terceros junto con los mosaicos de configuración rápida proporcionados por el sistema.
3.14. IU de medios
Si las implementaciones de dispositivos incluyen el framework de IU que admite apps de terceros que dependen de MediaBrowser
y MediaSession
, deben cumplir con lo siguiente:
- [C-1-1] DEBE mostrar los íconos de MediaItem y los íconos de notificación sin alteraciones.
- [C-1-2] DEBE mostrar esos elementos como se describe en MediaSession, p.ej., metadatos, íconos, imágenes.
- [C-1-3] DEBE mostrar el título de la app.
- [C-1-4] DEBE tener un panel lateral para presentar la jerarquía de MediaBrowser.
3.15. Apps instantáneas
Las implementaciones de dispositivos DEBEN satisfacer los siguientes requisitos:
- [C-0-1] Las Instant Apps SOLO DEBEN tener permisos que tengan el
android:protectionLevel
establecido en"ephemeral"
. - [C-0-2] Las apps instantáneas NO DEBEN interactuar con las apps instaladas a través de intents implícitos, a menos que se cumpla una de las siguientes condiciones:
- El filtro de patrones de intents del componente está expuesto y tiene CATEGORY_BROWSABLE
- La acción es una de ACTION_SEND, ACTION_SENDTO o ACTION_SEND_MULTIPLE.
- El destino se expone de forma explícita con android:visibleToInstantApps
- [C-0-3] Las apps instantáneas NO DEBEN interactuar de forma explícita con las apps instaladas, a menos que el componente se exponga a través de android:visibleToInstantApps.
- [C-0-4] Las apps instaladas NO DEBEN ver detalles sobre las apps instantáneas en el dispositivo, a menos que la app instantánea se conecte de forma explícita a la aplicación instalada.
3.16. Sincronización de dispositivos complementarios
Android incluye compatibilidad con el vinculación de dispositivos complementarios para administrar de manera más eficaz la asociación con dispositivos complementarios y proporciona la API de CompanionDeviceManager
para que las apps accedan a esta función.
Si las implementaciones de dispositivos admiten la función de vinculación de dispositivos complementarios, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE declarar el parámetro de configuración
FEATURE_COMPANION_DEVICE_SETUP
. - [C-1-2] DEBE garantizar que las APIs del paquete
android.companion
estén completamente implementadas. - [C-1-3] DEBE proporcionar al usuario la posibilidad de seleccionar o confirmar que hay un dispositivo complementario presente y en funcionamiento.
4. Compatibilidad con el empaquetado de aplicaciones
Implementaciones de dispositivos:
- [C-0-1] DEBE poder instalar y ejecutar archivos “.apk” de Android tal como los genera la herramienta “aapt” incluida en el SDK oficial de Android.
- Dado que el requisito anterior puede ser difícil de cumplir, se RECOMIENDA que las implementaciones de dispositivos utilicen el sistema de administración de paquetes de la implementación de referencia del AOSP.
- [C-0-2] DEBE admitir la verificación de archivos “.apk” con el esquema de firma de APK v2 y la firma de JAR.
- [C-0-3] NO DEBE extender los formatos .apk, manifiesto de Android, código de bytes de Dalvik ni código de bytes de RenderScript de manera que impida que esos archivos se instalen y ejecuten correctamente en otros dispositivos compatibles.
-
[C-0-4] NO DEBE permitir que las apps que no sean el "instalador de registros" actual del paquete desinstalen la app de forma silenciosa sin ningún mensaje, como se documenta en el SDK para el permiso
DELETE_PACKAGE
. Las únicas excepciones son la app del verificador de paquetes del sistema que controla el intent PACKAGE_NEEDS_VERIFICATION y la app del administrador de almacenamiento que controla el intent ACTION_MANAGE_STORAGE. -
[C-0-5] DEBE tener una actividad que controle el intent
android.settings.MANAGE_UNKNOWN_APP_SOURCES
. -
[C-0-6] NO DEBE instalar paquetes de aplicaciones de fuentes desconocidas, a menos que la app que solicita la instalación cumpla con todos los siguientes requisitos:
- DEBE declarar el permiso
REQUEST_INSTALL_PACKAGES
o tener el valor deandroid:targetSdkVersion
establecido en 24 o menos. - El usuario DEBE haberle otorgado permiso para instalar apps de fuentes desconocidas.
- DEBE declarar el permiso
-
DEBE proporcionar una opción para el usuario que permita otorgar o revocar el permiso para instalar apps de fuentes desconocidas por aplicación, pero PUEDE optar por implementar esto como una operación nula y devolver
RESULT_CANCELED
parastartActivityForResult()
si la implementación del dispositivo no quiere permitir que los usuarios tengan esta opción. Sin embargo, incluso en esos casos, DEBEN indicarle al usuario por qué no se presenta esa opción.
5. Compatibilidad multimedia
Implementaciones del dispositivo:
- [C-0-1] DEBE admitir los formatos de medios, codificadores, decodificadores, tipos de archivos y formatos de contenedores definidos en la sección 5.1 para cada códec declarado por
MediaCodecList
. - [C-0-2] SE DEBE declarar y registrar la compatibilidad con los codificadores y decodificadores disponibles para las aplicaciones de terceros a través de
MediaCodecList
. - [C-0-3] DEBE poder decodificar y poner a disposición de las apps de terceros todos los formatos que puede codificar. Esto incluye todos los flujos de bits que generan sus codificadores y los perfiles que se informan en su
CamcorderProfile
.
Implementaciones del dispositivo:
- DEBE intentar lograr la latencia mínima del códec; en otras palabras,
- NO DEBE consumir ni almacenar búferes de entrada, y debe devolver los búferes de entrada solo una vez que se procesen.
- NO DEBE conservar los búferes decodificados durante más tiempo del especificado por el estándar (p.ej., SPS).
- NO DEBE conservar los búferes codificados durante más tiempo del que requiere la estructura de GOP.
Todos los códecs que se enumeran en la siguiente sección se proporcionan como implementaciones de software en la implementación preferida de Android del Proyecto de código abierto de Android.
Ten en cuenta que ni Google ni Open Handset Alliance garantizan que estos códecs estén libres de patentes de terceros. Se recomienda a quienes deseen usar este código fuente en productos de hardware o software que las implementaciones de este código, incluso en software de código abierto o shareware, pueden requerir licencias de patente de los titulares de patentes pertinentes.
5.1. Códecs de medios
5.1.1. Codificación de audio
Consulta más detalles en el artículo 5.1.3. Detalles de los códecs de audio.
Si las implementaciones de dispositivos declaran android.hardware.microphone
, DEBEN admitir la siguiente codificación de audio:
- [C-1-1] PCM/WAVE
5.1.2. Decodificación de audio
Consulta más detalles en el artículo 5.1.3. Detalles de los códecs de audio.
Si las implementaciones de dispositivos declaran compatibilidad con la función android.hardware.audio.output
, deben admitir los siguientes decodificadores de audio:
- [C-1-1] Perfil AAC de MPEG-4 (AAC LC)
- [C-1-2] Perfil AAC HE MPEG-4 (AAC+)
- [C-1-3] Perfil MPEG-4 HE AACv2 (AAC+ mejorado)
- [C-1-4] AAC ELD (AAC mejorado de bajo retraso)
- [C-1-5] FLAC
- [C-1-6] MP3
- [C-1-7] MIDI
- [C-1-8] Vorbis
- [C-1-9] PCM/WAVE
- [C-1-10] Opus
Si las implementaciones de dispositivos admiten la decodificación de búferes de entrada AAC de transmisiones multicanal (es decir, más de dos canales) a PCM a través del decodificador de audio AAC predeterminado en la API de android.media.MediaCodec
, se DEBE admitir lo siguiente:
- [C-2-1] La decodificación DEBE realizarse sin reducción de mezcla (p.ej., una transmisión AAC 5.0 se debe decodificar en cinco canales de PCM, y una transmisión AAC 5.1 se debe decodificar en seis canales de PCM).
- [C-2-2] Los metadatos de rango dinámico DEBEN definirse como se indica en "Control de rango dinámico (DRC)" en ISO/IEC 14496-3, y las claves de DRC
android.media.MediaFormat
para configurar los comportamientos relacionados con el rango dinámico del decodificador de audio. Las claves de DRC de AAC se introdujeron en la API 21 y son las siguientes: KEY_AAC_DRC_ATTENUATION_FACTOR, KEY_AAC_DRC_BOOST_FACTOR, KEY_AAC_DRC_HEAVY_COMPRESSION, KEY_AAC_DRC_TARGET_REFERENCE_LEVEL y KEY_AAC_ENCODED_TARGET_LEVEL.
5.1.3. Detalles de los códecs de audio
Formato/códec | Detalles | Tipos de archivo y formatos de contenedor compatibles |
---|---|---|
Perfil de AAC MPEG-4 (AAC LC) |
Compatibilidad con contenido mono/estéreo/5.0/5.1 con tasas de muestreo estándar de 8 a 48 kHz. |
|
Perfil MPEG-4 HE AAC (AAC+) | Compatibilidad con contenido mono/estéreo/5.0/5.1 con tasas de muestreo estándar de 16 a 48 kHz. | |
Perfil MPEG-4 HE AACv2 (AAC+ mejorado) |
Compatibilidad con contenido mono/estéreo/5.0/5.1 con tasas de muestreo estándar de 16 a 48 kHz. | |
AAC ELD (AAC mejorado de bajo retraso) | Compatibilidad con contenido mono/estéreo con tasas de muestreo estándar de 16 a 48 kHz. | |
AMR-NB | 4.75 a 12.2 kbps con muestreo a 8 kHz | 3GPP (.3gp) |
AMR-WB | 9 tasas de 6.60 kbit/s a 23.85 kbit/s con muestreo a 16 kHz | |
FLAC | Mono/estéreo (sin multicanal). Tasas de muestreo de hasta 48 kHz (pero se RECOMIENDA hasta 44.1 kHz en dispositivos con salida de 44.1 kHz, ya que el reductor de muestreo de 48 a 44.1 kHz no incluye un filtro de paso bajo). Se recomienda 16 bits. No se aplicó ninguna interpolación para 24 bits. | Solo FLAC (.flac) |
MP3 | Tasa de bits constante (CBR) o variable (VBR) mono/estéreo de 8 a 320 Kbps | MP3 (.mp3) |
MIDI | MIDI tipo 0 y 1. Versión 1 y 2 de DLS. XMF y Mobile XMF. Compatibilidad con los formatos de tono RTTTL/RTX, OTA y iMelody. |
|
Vorbis |
|
|
PCM/WAVE | PCM lineal de 16 bits (el límite de las tasas depende del hardware). Los dispositivos DEBEN admitir tasas de muestreo para la grabación de PCM sin procesar a frecuencias de 8,000, 11,025, 16,000 y 44,100 Hz. | WAVE (.wav) |
Opus | Matroska (.mkv) y Ogg(.ogg) |
5.1.4. Codificación de imágenes
Consulta más detalles en el punto 5.1.6. Detalles de los códecs de imágenes.
Las implementaciones de dispositivos DEBEN admitir la codificación de imágenes que se indica a continuación:
- [C-0-1] JPEG
- [C-0-2] PNG
- [C-0-3] WebP
5.1.5. Decodificación de imágenes
Consulta más detalles en el punto 5.1.6. Detalles de los códecs de imágenes.
Las implementaciones de dispositivos DEBEN admitir la codificación de la siguiente decodificación de imágenes:
- [C-0-1] JPEG
- [C-0-2] GIF
- [C-0-3] PNG
- [C-0-4] BMP
- [C-0-5] WebP
- [C-0-6] Sin procesar
5.1.6. Detalles de los códecs de imágenes
Formato/códec | Detalles | Tipos de archivo y formatos de contenedor compatibles |
---|---|---|
JPEG | Básica + progresiva | JPEG (.jpg) |
GIF | GIF (.gif) | |
PNG | PNG (.png) | |
BMP | BMP (.bmp) | |
WebP | WebP (.webp) | |
Sin procesar | ARW (.arw), CR2 (.cr2), DNG (.dng), NEF (.nef), NRW (.nrw), ORF (.orf), PEF (.pef), RAF (.raf), RW2 (.rw2), SRW (.srw) |
5.1.7. Códecs de video
- Para obtener una calidad aceptable de los servicios de transmisión de video por Internet y videoconferencias, las implementaciones de dispositivos DEBEN usar un códec VP8 de hardware que cumpla con los requisitos.
Si las implementaciones de dispositivos incluyen un codificador o decodificador de video, deben cumplir con los siguientes requisitos:
-
[C-1-1] Los códecs de video DEBEN admitir tamaños de bytebuffer de entrada y salida que admitan el fotograma comprimido y sin comprimir más grande posible, según lo dicten el estándar y la configuración, pero sin asignar recursos en exceso.
-
[C-1-2] Los codificadores y decodificadores de video DEBEN admitir el formato de color flexible YUV420 (COLOR_FormatYUV420Flexible).
Si las implementaciones de dispositivos anuncian la compatibilidad con el perfil HDR a través de Display.HdrCapabilities
, deben cumplir con lo siguiente:
- [C-2-1] DEBE admitir el análisis y el manejo de metadatos estáticos de HDR.
Si las implementaciones de dispositivos anuncian la compatibilidad con la actualización intra a través de FEATURE_IntraRefresh
en la clase MediaCodecInfo.CodecCapabilities
, deben cumplir con lo siguiente:
- [C-3-1]DEBE admitir los períodos de actualización en el rango de 10 a 60 fotogramas y funcionar con precisión dentro del 20% del período de actualización configurado.
5.1.8. Lista de códecs de video
Formato/códec | Detalles |
Tipos de archivo/ formatos de contenedor compatibles |
---|---|---|
H.263 |
|
|
H.264 AVC | Consulta las secciones 5.2 y 5.3 para obtener más detalles. |
|
H.265 HEVC | Consulta la sección 5.3 para obtener más detalles. | MPEG-4 (.mp4) |
MPEG-2 | Perfil principal | MPEG2-TS |
MPEG-4 SP | 3GPP (.3gp) | |
VP8 | Consulta las secciones 5.2 y 5.3 para obtener más detalles. |
|
VP9 | Consulta la sección 5.3 para obtener más detalles. |
|
5.2. Codificación de video
Si las implementaciones de dispositivos admiten algún codificador de video y lo ponen a disposición de las apps de terceros, deben cumplir con lo siguiente:
- NO DEBE ser, en dos ventanas deslizantes, más del 15% superior a la tasa de bits entre los intervalos de fotogramas clave (I-frame).
- NO DEBE superar en más de un 100% el bitrate en una ventana deslizante de 1 segundo.
Si las implementaciones de dispositivos incluyen una pantalla integrada con una longitud diagonal de al menos 2.5 pulgadas, un puerto de salida de video o declaran la compatibilidad con una cámara a través de la marca de función android.hardware.camera.any
, deben cumplir con lo siguiente:
- [C-1-1] DEBE incluir la compatibilidad con al menos uno de los codificadores de video VP8 o H.264, y ponerlo a disposición de las aplicaciones de terceros.
- DEBE admitir los codificadores de video VP8 y H.264, y ponerlos a disposición de las aplicaciones de terceros.
Si las implementaciones de dispositivos admiten cualquiera de los codificadores de video H.264, VP8, VP9 o HEVC, y los ponen a disposición de aplicaciones de terceros, deben cumplir con lo siguiente:
- [C-2-1] DEBE admitir velocidades de bits configurables de forma dinámica.
- DEBE admitir velocidades de fotogramas variables, en las que el codificador de video DEBE determinar la duración instantánea del fotograma en función de las marcas de tiempo de los búferes de entrada y asignar su depósito de bits en función de esa duración del fotograma.
Si las implementaciones de dispositivos admiten el codificador de video MPEG-4 SP y lo ponen a disposición de las apps de terceros, deben cumplir con los siguientes requisitos:
- DEBE admitir velocidades de bits configurables de forma dinámica para el codificador compatible.
5.2.1. H.263
Si las implementaciones de dispositivos admiten codificadores H.263 y los ponen a disposición de apps de terceros, deben cumplir con lo siguiente:
- [C-1-1] DEBE admitir el nivel 45 del perfil de Baseline.
- DEBE admitir velocidades de bits configurables de forma dinámica para el codificador compatible.
5.2.2. H.264
Si las implementaciones de dispositivos admiten el códec H.264, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE admitir el nivel 3 del perfil de Baseline. Sin embargo, la compatibilidad con ASO (ordenamiento de segmentos arbitrario), FMO (ordenamiento flexible de macrobloques) y RS (segmentos redundantes) es OPCIONAL. Además, para mantener la compatibilidad con otros dispositivos Android, se RECOMIENDA que los codificadores no utilicen ASO, FMO ni RS para el perfil de Baseline.
- [C-1-2] DEBE admitir los perfiles de codificación de video en SD (definición estándar) que se indican en la siguiente tabla.
- DEBE admitir el perfil principal de nivel 4.
- DEBE admitir los perfiles de codificación de video en HD (alta definición) como se indica en la siguiente tabla.
Si las implementaciones de dispositivos informan que admiten la codificación H.264 para videos con resolución de 720p o 1080p a través de las APIs de medios, deben cumplir con lo siguiente:
- [C-2-1] DEBE admitir los perfiles de codificación que se indican en la siguiente tabla.
SD (baja calidad) | SD (alta calidad) | HD: 720p | HD: 1080p | |
---|---|---|---|---|
Resolución de video | 320 x 240 px | 720 x 480 px | 1280 x 720 px | 1920 x 1080 px |
Velocidad de fotogramas del video | 20 fps | 30 fps | 30 fps | 30 fps |
Tasa de bits del video | 384 Kbps | 2 Mbps | 4 Mbps | 10 Mbps |
5.2.3. VP8
Si las implementaciones de dispositivos admiten el códec VP8, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE admitir los perfiles de codificación de video SD.
- DEBE admitir los siguientes perfiles de codificación de video en HD (alta definición).
- DEBE admitir la escritura de archivos WebM de Matroska.
- DEBE usar un códec VP8 de hardware que cumpla con los requisitos de codificación de hardware de RTC del proyecto WebM para garantizar una calidad aceptable de los servicios de transmisión de video por Internet y videoconferencia.
Si las implementaciones de dispositivos informan que admiten la codificación VP8 para videos con resolución de 720p o 1080p a través de las APIs de medios, deben hacer lo siguiente:
- [C-2-1] DEBE admitir los perfiles de codificación que se indican en la siguiente tabla.
SD (baja calidad) | SD (alta calidad) | HD: 720p | HD: 1080p | |
---|---|---|---|---|
Resolución de video | 320 x 180 px | 640 x 360 px | 1280 x 720 px | 1920 x 1080 px |
Velocidad de fotogramas del video | 30 fps | 30 fps | 30 fps | 30 fps |
Tasa de bits del video | 800 Kbps | 2 Mbps | 4 Mbps | 10 Mbps |
5.2.4. VP9
Si las implementaciones de dispositivos admiten el códec VP9, deben cumplir con los siguientes requisitos:
- DEBE admitir la escritura de archivos WebM de Matroska.
5.3. Decodificación de video
Si las implementaciones de dispositivos admiten los códecs VP8, VP9, H.264 o H.265, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE admitir resolución de video dinámica y cambio de velocidad de fotogramas a través de las APIs de Android estándar dentro de la misma transmisión para todos los códecs VP8, VP9, H.264 y H.265 en tiempo real y hasta la resolución máxima admitida por cada códec del dispositivo.
Si las implementaciones de dispositivos declaran compatibilidad con el decodificador Dolby Vision a través de HDR_TYPE_DOLBY_VISION
, deben cumplir con lo siguiente:
- [C-2-1] SE DEBE proporcionar un extractor compatible con Dolby Vision.
- [C-2-2] DEBE mostrar correctamente el contenido de Dolby Vision en la pantalla del dispositivo o en un puerto de salida de video estándar (p.ej., HDMI).
- [C-2-3] DEBE establecer el índice de seguimiento de las capas básicas retrocompatibles (si las hay) de modo que sea igual al índice de seguimiento de la capa combinada de Dolby Vision.
5.3.1. MPEG-2
Si las implementaciones de dispositivos admiten decodificadores MPEG-2, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE admitir el nivel superior del perfil principal.
5.3.2. H.263
Si las implementaciones de dispositivos admiten decodificadores H.263, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE admitir los niveles 30 y 45 del perfil de Baseline.
5.3.3. MPEG-4
Si las implementaciones de dispositivos incluyen decodificadores MPEG-4, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE admitir el nivel 3 del perfil simple.
5.3.4. H.264
Si las implementaciones de dispositivos admiten decodificadores H.264, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE admitir el perfil principal de nivel 3.1 y el perfil de Baseline. La compatibilidad con ASO (ordenamiento de segmentos arbitrario), FMO (ordenamiento flexible de macrobloques) y RS (segmentos redundantes) es OPCIONAL.
- [C-1-2] DEBE poder decodificar videos con los perfiles de SD (definición estándar) que se indican en la siguiente tabla y que estén codificados con el perfil básico y el perfil principal de nivel 3.1 (incluido 720p30).
- DEBE ser capaz de decodificar videos con los perfiles de HD (alta definición) como se indica en la siguiente tabla.
Si la altura que informa el método Display.getSupportedModes()
es igual o mayor que la resolución del video, las implementaciones del dispositivo deben hacer lo siguiente:
- [C-2-1] DEBE admitir los perfiles de decodificación de video HD 720p que se indican en la siguiente tabla.
- [C-2-2] DEBE admitir los perfiles de decodificación de video en HD 1080p que se indican en la siguiente tabla.
SD (baja calidad) | SD (alta calidad) | HD: 720p | HD: 1080p | |
---|---|---|---|---|
Resolución de video | 320 x 240 px | 720 x 480 px | 1280 x 720 px | 1920 x 1080 px |
Velocidad de fotogramas del video | 30 fps | 30 fps | 60 fps | 30 FPS (60 FPS entelevisores) |
Tasa de bits del video | 800 Kbps | 2 Mbps | 8 Mbps | 20 Mbps |
5.3.5. H.265 (HEVC)
Si las implementaciones de dispositivos admiten el códec H.265, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE admitir el perfil principal, nivel 3, nivel principal y los perfiles de decodificación de video SD, como se indica en la siguiente tabla.
- DEBE admitir los perfiles de decodificación de HD, como se indica en la siguiente tabla.
- [C-1-2] DEBE admitir los perfiles de decodificación HD como se indica en la siguiente tabla si hay un decodificador de hardware.
Si la altura que informa el método Display.getSupportedModes()
es igual o mayor que la resolución del video, sucede lo siguiente:
- [C-2-1] Las implementaciones de dispositivos DEBEN admitir al menos una de las decodificaciones H.265 o VP9 de los perfiles 720, 1080 y UHD.
SD (baja calidad) | SD (alta calidad) | HD: 720p | HD: 1080p | UHD | |
---|---|---|---|---|---|
Resolución de video | 352 x 288 px | 720 x 480 px | 1280 x 720 px | 1920 x 1080 px | 3840 x 2160 px |
Velocidad de fotogramas del video | 30 fps | 30 fps | 30 fps | 30/60 FPS (60 FPSTelevisión con decodificación de hardware H.265) | 60 fps |
Tasa de bits del video | 600 Kbps | 1.6 Mbps | 4 Mbps | 5 Mbps | 20 Mbps |
5.3.6. VP8
Si las implementaciones de dispositivos admiten el códec VP8, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE admitir los perfiles de decodificación de SD que se indican en la siguiente tabla.
- DEBE usar un códec VP8 de hardware que cumpla con los requisitos.
- DEBE admitir los perfiles de decodificación en HD que se indican en la siguiente tabla.
Si la altura que informa el método Display.getSupportedModes()
es igual o mayor que la resolución del video, sucede lo siguiente:
- [C-2-1] Las implementaciones de dispositivos DEBEN admitir los perfiles de 720 p que se indican en la siguiente tabla.
- [C-2-2] Las implementaciones de dispositivos DEBEN admitir los perfiles de 1080 p que se indican en la siguiente tabla.
SD (baja calidad) | SD (alta calidad) | HD: 720p | HD: 1080p | |
---|---|---|---|---|
Resolución de video | 320 x 180 px | 640 x 360 px | 1280 x 720 px | 1920 x 1080 px |
Velocidad de fotogramas del video | 30 fps | 30 fps | 30 FPS (60 FPS entelevisores) | 30 (60 fpsTelevisión) |
Tasa de bits del video | 800 Kbps | 2 Mbps | 8 Mbps | 20 Mbps |
5.3.7. VP9
Si las implementaciones de dispositivos admiten el códec VP9, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE admitir los perfiles de decodificación de video SD que se indican en la siguiente tabla.
- DEBE admitir los perfiles de decodificación de HD, como se indica en la siguiente tabla.
Si las implementaciones de dispositivos admiten el códec VP9 y un decodificador de hardware, haz lo siguiente:
- [C-2-1] DEBE admitir los perfiles de decodificación HD como se indica en la siguiente tabla.
Si la altura que informa el método Display.getSupportedModes()
es igual o mayor que la resolución del video, sucede lo siguiente:
- [C-3-1] Las implementaciones de dispositivos DEBEN admitir al menos una de las decodificaciones de VP9 o H.265 de los perfiles 720, 1080 y UHD.
SD (baja calidad) | SD (alta calidad) | HD: 720p | HD: 1080p | UHD | |
---|---|---|---|---|---|
Resolución de video | 320 x 180 px | 640 x 360 px | 1280 x 720 px | 1920 x 1080 px | 3840 x 2160 px |
Velocidad de fotogramas del video | 30 fps | 30 fps | 30 fps | 30 FPS (60 FPSTelevisión con decodificación por hardware de VP9) | 60 fps |
Tasa de bits del video | 600 Kbps | 1.6 Mbps | 4 Mbps | 5 Mbps | 20 Mbps |
5.4. Grabación de audio
Si bien algunos de los requisitos que se describen en esta sección se indican como SHOULD desde Android 4.3, se prevé que la Definición de compatibilidad para versiones futuras los cambie a MUST. Se RECOMIENDA ENCARECIDAMENTE que los dispositivos Android existentes y nuevos cumplan con estos requisitos que se indican como SHOULD, ya que, de lo contrario, no podrán alcanzar la compatibilidad con Android cuando se actualicen a la versión futura.
5.4.1. Captura de audio sin procesar
Si las implementaciones de dispositivos declaran android.hardware.microphone
, deben cumplir con lo siguiente:
-
[C-1-1] DEBE permitir la captura de contenido de audio sin procesar con las siguientes características:
- Formato: PCM lineal, 16 bits
- Tasas de muestreo: 8,000, 11,025, 16,000 y 44,100 Hz
- Canales: Mono
-
[C-1-2] DEBE capturar a tasas de muestreo superiores sin aumentar la resolución.
- [C-1-3] DEBE incluir un filtro de suavizado adecuado cuando las frecuencias de muestreo mencionadas anteriormente se capturen con submuestreo.
-
DEBE permitir la captura de contenido de audio sin procesar con calidad de radio AM y DVD, lo que significa que debe tener las siguientes características:
- Formato: PCM lineal, 16 bits
- Tasas de muestreo: 22,050 y 48,000 Hz
- Canales: Estéreo
Si las implementaciones del dispositivo permiten la captura de radio AM y calidad de DVD del contenido de audio sin procesar, deben cumplir con lo siguiente:
- [C-2-1] DEBE capturar sin aumentar la muestra a una proporción superior a 16000:22050 o 44100:48000.
- [C-2-2] DEBE incluir un filtro de suavizado adecuado para cualquier aumento o reducción de la muestra.
5.4.2. Captura para el reconocimiento de voz
Si las implementaciones de dispositivos declaran android.hardware.microphone
, deben cumplir con lo siguiente:
- [C-1-1] DEBE capturar la fuente de audio
android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION
en una de las tasas de muestreo, 44,100 y 48,000. - [C-1-2] DEBE inhabilitar, de forma predeterminada, cualquier procesamiento de audio de reducción de ruido cuando se graba una transmisión de audio desde la fuente de audio
AudioSource.VOICE_RECOGNITION
. - [C-1-3] DEBE inhabilitar, de forma predeterminada, cualquier control de ganancia automático cuando se grabe una transmisión de audio desde la fuente de audio
AudioSource.VOICE_RECOGNITION
. - DEBE grabar el flujo de audio de reconocimiento de voz con características de amplitud versus frecuencia aproximadamente planas: específicamente, ±3 dB, de 100 Hz a 4,000 Hz.
- DEBE grabar el flujo de audio de reconocimiento de voz con la sensibilidad de entrada configurada de modo que una fuente de nivel de potencia acústica (SPL) de 90 dB a 1,000 Hz produzca un valor RMS de 2,500 para muestras de 16 bits.
- DEBE grabar el flujo de audio de reconocimiento de voz para que los niveles de amplitud de PCM realicen un seguimiento lineal de los cambios de SPL de entrada en un rango de al menos 30 dB, desde -18 dB hasta +12 dB re 90 dB SPL en el micrófono.
- DEBE grabar el flujo de audio de reconocimiento de voz con una distorsión armónica total (THD) inferior al 1% para 1 kHz a un nivel de entrada de SPL de 90 dB en el micrófono.
Si las implementaciones de dispositivos declaran tecnologías de android.hardware.microphone
y de supresión (reducción) de ruido optimizadas para el reconocimiento de voz, deben cumplir con lo siguiente:
- [C-2-1] DEBE permitir que este efecto de audio se controle con la API de
android.media.audiofx.NoiseSuppressor
. - [C-2-2] Se DEBE identificar de forma única cada implementación de tecnología de supresión de ruido a través del campo
AudioEffect.Descriptor.uuid
.
5.4.3. Captura para el desvío de la reproducción
La clase android.media.MediaRecorder.AudioSource
incluye la fuente de audio REMOTE_SUBMIX
.
Si las implementaciones de dispositivos declaran android.hardware.audio.output
y android.hardware.microphone
, deben cumplir con lo siguiente:
-
[C-1-1] DEBE implementar correctamente la fuente de audio
REMOTE_SUBMIX
para que, cuando una aplicación use la API deandroid.media.AudioRecord
para grabar desde esta fuente de audio, capture una combinación de todos los flujos de audio, excepto los siguientes:-
AudioManager.STREAM_RING
-
AudioManager.STREAM_ALARM
-
AudioManager.STREAM_NOTIFICATION
-
5.5. Reproducción de audio
Android incluye la compatibilidad para permitir que las apps reproduzcan audio a través del periférico de salida de audio, como se define en la sección 7.8.2.
5.5.1. Reproducción de audio sin procesar
Si las implementaciones de dispositivos declaran android.hardware.audio.output
, deben cumplir con lo siguiente:
-
[C-1-1] DEBE permitir la reproducción de contenido de audio sin procesar con las siguientes características:
- Formato: PCM lineal, 16 bits
- Tasas de muestreo: 8,000, 11,025, 16,000, 22,050, 32,000 y 44,100
- Canales: Mono, estéreo
-
DEBE permitir la reproducción de contenido de audio sin procesar con las siguientes características:
- Tasas de muestreo: 24,000 y 48,000
5.5.2. Efectos de audio
Android proporciona una API para efectos de audio para las implementaciones de dispositivos.
Si las implementaciones de dispositivos declaran la función android.hardware.audio.output
, deben hacer lo siguiente:
- [C-1-1] DEBE admitir las implementaciones de
EFFECT_TYPE_EQUALIZER
yEFFECT_TYPE_LOUDNESS_ENHANCER
que se pueden controlar a través de las subclases de AudioEffectEqualizer
yLoudnessEnhancer
. - [C-1-2] DEBE admitir la implementación de la API del visualizador, que se puede controlar a través de la clase
Visualizer
. - DEBE admitir las implementaciones de
EFFECT_TYPE_BASS_BOOST
,EFFECT_TYPE_ENV_REVERB
,EFFECT_TYPE_PRESET_REVERB
yEFFECT_TYPE_VIRTUALIZER
que se pueden controlar a través de las subclasesAudioEffect
BassBoost
,EnvironmentalReverb
,PresetReverb
yVirtualizer
.
5.5.3. Volumen de salida de audio
Implementaciones de dispositivos para automóviles:
- DEBE permitir ajustar el volumen de audio por separado para cada transmisión de audio usando el tipo de contenido o el uso según lo definen AudioAttributes y el uso de audio del automóvil según se define públicamente en
android.car.CarAudioManager
.
5.6. Latencia de audio
La latencia de audio es la demora que se produce cuando una señal de audio pasa por un sistema. Muchas clases de aplicaciones dependen de latencias cortas para lograr efectos de sonido en tiempo real.
Para los fines de esta sección, usa las siguientes definiciones:
- Latencia de salida. Es el intervalo entre el momento en que una aplicación escribe un fotograma de datos codificados en PCM y el momento en que el sonido correspondiente se presenta al entorno en un transductor integrado en el dispositivo o la señal sale del dispositivo a través de un puerto y se puede observar de forma externa.
- Latencia de salida en frío. Es la latencia de salida del primer fotograma cuando el sistema de salida de audio estuvo inactivo y apagado antes de la solicitud.
- Latencia de salida continua. Es la latencia de salida para los fotogramas posteriores, después de que el dispositivo reproduce audio.
- Latencia de entrada. Es el intervalo entre el momento en que el entorno presenta un sonido al dispositivo en un transductor integrado o en que una señal ingresa al dispositivo a través de un puerto y el momento en que una aplicación lee el fotograma correspondiente de datos codificados en PCM.
- Entrada perdida. Es la parte inicial de un indicador de entrada que no se puede usar o no está disponible.
- Latencia de entrada en frío. Es la suma del tiempo de entrada perdido y la latencia de entrada del primer fotograma, cuando el sistema de entrada de audio estuvo inactivo y apagado antes de la solicitud.
- Latencia de entrada continua. Es la latencia de entrada para los fotogramas posteriores mientras el dispositivo captura audio.
- Jitter de salida en frío. Es la variabilidad entre las mediciones separadas de los valores de latencia de salida en frío.
- Jitter de entrada en frío. Es la variabilidad entre las mediciones separadas de los valores de latencia de entrada en frío.
- latencia de ida y vuelta continua. Es la suma de la latencia de entrada continua más la latencia de salida continua más un período de búfer. El período de búfer permite que la app procese el indicador y mitigue la diferencia de fase entre los flujos de entrada y salida.
- API de cola de búfer PCM de OpenSL ES Conjunto de APIs de OpenSL ES relacionadas con PCM dentro del NDK de Android.
- API de audio nativa de AAudio Es el conjunto de APIs de AAudio dentro del NDK de Android.
Si las implementaciones de dispositivos declaran android.hardware.audio.output
, se RECOMIENDA ENCARECIDAMENTE que cumplan o superen los siguientes requisitos:
- [SR] Latencia de salida en frío de 100 milisegundos o menos
- [SR] Latencia de salida continua de 45 milisegundos o menos
- [SR] Minimiza la fluctuación de la salida en frío
Si las implementaciones del dispositivo cumplen con los requisitos anteriores después de cualquier calibración inicial cuando se usa la API de la cola de búfer PCM de OpenSL ES, para la latencia de salida continua y la latencia de salida en frío en al menos un dispositivo de salida de audio compatible, se consideran:
- [SR] SE RECOMIENDA ENCARECIDAMENTE informar el audio de baja latencia declarando el parámetro de configuración
android.hardware.audio.low_latency
. - [SR] Se RECOMIENDA ENCARECIDAMENTE que también se cumplan los requisitos de audio de baja latencia a través de la API de AAudio.
Si las implementaciones en dispositivos no cumplen con los requisitos de audio de baja latencia a través de la API de cola de búfer PCM de OpenSL ES, deben hacer lo siguiente:
- [C-1-1] NO DEBE informar compatibilidad con audio de baja latencia.
Si las implementaciones del dispositivo incluyen android.hardware.microphone
, se RECOMIENDA ENCARECIDAMENTE que cumplan con estos requisitos de audio de entrada:
- [SR] Latencia de entrada en frío de 100 milisegundos o menos
- [SR] Latencia de entrada continua de 30 milisegundos o menos
- [SR] Latencia de ida y vuelta continua de 50 milisegundos o menos
- [SR] Minimiza la fluctuación de la entrada en frío
5.7. Protocolos de red
Las implementaciones de dispositivos DEBEN admitir los protocolos de red de medios para la reproducción de audio y video, como se especifica en la documentación del SDK de Android.
Si las implementaciones de dispositivos incluyen un decodificador de audio o video, deben cumplir con lo siguiente:
-
[C-1-1] DEBE admitir todos los códecs y formatos de contenedor requeridos en la sección 5.1 a través de HTTP(S).
-
[C-1-2] DEBE admitir los formatos de segmentos de medios que se muestran en la siguiente tabla de formatos de segmentos de medios a través del borrador del protocolo HTTP Live Streaming, versión 7.
-
[C-1-3] DEBE admitir el siguiente perfil de audio y video de RTP, y los códecs relacionados en la siguiente tabla de RTSP. Para ver las excepciones, consulta las notas al pie de la tabla en la sección 5.1.
Formatos de segmentos de medios
Formatos de segmentos | Referencias | Compatibilidad con códecs obligatoria |
---|---|---|
Transport Stream MPEG-2 | ISO 13818 |
Códecs de video:
MPEG-2. Códecs de audio:
|
AAC con encuadre ADTS y etiquetas ID3 | ISO 13818-7 | Consulta la sección 5.1.1 para obtener detalles sobre el AAC y sus variantes. |
WebVTT | WebVTT |
RTSP (RTP, SDP)
Nombre del perfil | Referencias | Compatibilidad con códecs obligatoria |
---|---|---|
H264 AVC | RFC 6184 | Consulta la sección 5.1.3 para obtener detalles sobre H264 AVC. |
MP4A-LATM | RFC 6416 | Consulta la sección 5.1.1 para obtener detalles sobre el AAC y sus variantes. |
H263-1998 |
RFC 3551 RFC 4629 RFC 2190 |
Consulta la sección 5.1.3 para obtener detalles sobre H263. |
H263-2000 | RFC 4629 | Consulta la sección 5.1.3 para obtener detalles sobre H263. |
AMR | RFC 4867 | Consulta la sección 5.1.1 para obtener detalles sobre AMR-NB. |
AMR-WB | RFC 4867 | Consulta la sección 5.1.1 para obtener detalles sobre AMR-WB. |
MP4V-ES | RFC 6416 | Consulta la sección 5.1.3 para obtener detalles sobre MPEG-4 SP. |
mpeg4-generic | RFC 3640 | Consulta la sección 5.1.1 para obtener detalles sobre el AAC y sus variantes. |
MP2T | RFC 2250 | Consulta MPEG-2 Transport Stream en HTTP Live Streaming para obtener más detalles. |
5.8. Medios seguros
Si las implementaciones de dispositivos admiten la salida de video segura y son capaces de admitir superficies seguras, deben cumplir con lo siguiente:
- [C-1-1] DEBE declarar la compatibilidad con
Display.FLAG_SECURE
.
Si las implementaciones de dispositivos declaran compatibilidad con Display.FLAG_SECURE
y admiten el protocolo de pantalla inalámbrica, deben cumplir con lo siguiente:
- [C-2-1] DEBE proteger la vinculación con un mecanismo criptográficamente sólido, como HDCP 2.x o superior, para las pantallas conectadas a través de protocolos inalámbricos, como Miracast.
Si las implementaciones de dispositivos declaran compatibilidad con Display.FLAG_SECURE
y con pantallas externas con cable, deben cumplir con lo siguiente:
- [C-3-1] DEBE admitir HDCP 1.2 o versiones posteriores para todas las pantallas externas con cable.
5.9. Interfaz digital de instrumentos musicales (MIDI)
Si la implementación de un dispositivo admite el transporte de software MIDI entre apps (dispositivos MIDI virtuales) y admite MIDI a través de todos los siguientes transportes de hardware compatibles con MIDI para los que proporciona conectividad genérica no MIDI, se considera que:
- [SR] SE RECOMIENDA ENCARECIDAMENTE informar la compatibilidad con la función android.software.midi a través de la clase android.content.pm.PackageManager.
Los controles de transporte de hardware compatibles con MIDI son los siguientes:
- Modo de host USB (sección 7.7, USB)
- Modo de periférico USB (sección 7.7, USB)
- MIDI a través de Bluetooth LE que actúa como central (sección 7.4.3, Bluetooth)
Si la implementación del dispositivo proporciona conectividad genérica no MIDI a través de un transporte de hardware específico compatible con MIDI que se indica más arriba, pero no admite MIDI a través de ese transporte de hardware, se aplica lo siguiente:
- [C-1-1] NO DEBE informar la compatibilidad con la función android.software.midi.
5.10. Audio profesional
Si las implementaciones de dispositivos informan que admiten la función android.hardware.audio.pro
a través de la clase android.content.pm.PackageManager, deben hacer lo siguiente:
- [C-1-1] DEBE informar la compatibilidad con la función
android.hardware.audio.low_latency
. - [C-1-2] DEBE tener la latencia de audio de ida y vuelta continua, como se define en la sección 5.6 Latencia de audio, DEBE ser de 20 milisegundos o menos, y DEBE ser de 10 milisegundos o menos en, al menos, una ruta compatible.
- [C-1-3] DEBE incluir uno o más puertos USB que admitan el modo de host USB y el modo de periférico USB.
- [C-1-4] DEBE informar la compatibilidad con la función
android.software.midi
. - [C-1-5] DEBE cumplir con los requisitos de latencia y audio USB con la API de cola de búfer PCM de OpenSL ES.
- DEBE proporcionar un nivel sostenible de rendimiento de la CPU mientras el audio está activo.
- DEBE minimizar la imprecisión y la desviación del reloj de audio en relación con la hora estándar.
- DEBE minimizar la desviación del reloj de audio en relación con la CPU
CLOCK_MONOTONIC
cuando ambos estén activos. - DEBE minimizar la latencia de audio en los transductores integrados en el dispositivo.
- DEBE minimizar la latencia de audio a través del audio digital USB.
- DEBE documentar las mediciones de latencia de audio en todas las rutas.
- DEBE minimizar la fluctuación en los tiempos de entrada de la devolución de llamada de finalización del búfer de audio, ya que esto afecta el porcentaje utilizable del ancho de banda completo de la CPU por parte de la devolución de llamada.
- DEBE proporcionar cero subejecuciones de audio (salida) o sobrejecuciones (entrada) durante el uso normal con la latencia informada.
- DEBE proporcionar una diferencia de latencia entre canales igual a cero.
- DEBE minimizar la latencia media de MIDI en todos los transportes.
- DEBE minimizar la variabilidad de la latencia de MIDI bajo carga (jitter) en todos los transportes.
- DEBE proporcionar marcas de tiempo MIDI precisas en todos los transportes.
- DEBE minimizar el ruido de la señal de audio en los transductores integrados en el dispositivo, incluido el período inmediatamente posterior al inicio en frío.
- DEBE proporcionar una diferencia de reloj de audio nula entre los lados de entrada y salida de los extremos correspondientes, cuando ambos estén activos. Algunos ejemplos de extremos correspondientes incluyen el micrófono y la bocina integrados en el dispositivo, o la entrada y salida del conector de audio.
- DEBE controlar las devoluciones de llamada de finalización del búfer de audio para los extremos correspondientes de entrada y salida en el mismo subproceso cuando ambos estén activos, y debe ingresar a la devolución de llamada de salida inmediatamente después de la devolución de la devolución de llamada de entrada. O bien, si no es factible controlar las devoluciones de llamada en el mismo subproceso, ingresa la devolución de llamada de salida poco después de ingresar la devolución de llamada de entrada para permitir que la aplicación tenga una sincronización coherente de los lados de entrada y salida.
- DEBE minimizar la diferencia de fase entre el almacenamiento en búfer de audio del HAL para los lados de entrada y salida de los extremos correspondientes.
- DEBE minimizar la latencia táctil.
- DEBE minimizar la variabilidad de la latencia táctil bajo carga (fluctuación).
Si las implementaciones de dispositivos cumplen con todos los requisitos anteriores, sucederá lo siguiente:
- [SR] SE RECOMIENDA ENCARECIDAMENTE informar la compatibilidad con la función
android.hardware.audio.pro
a través de la claseandroid.content.pm.PackageManager
.
Si las implementaciones en dispositivos cumplen con los requisitos a través de la API de la cola de búfer PCM de OpenSL ES, deben hacer lo siguiente:
- [SR] Se RECOMIENDA ENCARECIDAMENTE que también se cumplan los mismos requisitos a través de la API de AAudio.
Si las implementaciones de dispositivos incluyen un conector de audio de 3.5 mm con 4 conductores, deben cumplir con lo siguiente:
- [C-2-1] DEBE tener una latencia de audio continua de ida y vuelta de 20 milisegundos o menos a través de la ruta de acceso del conector de audio.
- [SR] SE RECOMIENDA ENCARECIDAMENTE cumplir con la sección Especificaciones del dispositivo móvil (conector) de la Especificación de auriculares con cable (v1.1).
- La latencia de audio de ida y vuelta continua DEBE ser de 10 milisegundos o menos a través de la ruta del conector de audio.
Si las implementaciones de dispositivos omiten un conector de audio de 3.5 mm con 4 conductores, deben cumplir con lo siguiente:
- [C-3-1] DEBE tener una latencia de audio continua de ida y vuelta de 20 milisegundos o menos.
- La latencia de audio continua de ida y vuelta DEBE ser de 10 milisegundos o menos a través del puerto en modo host USB con la clase de audio USB.
Si las implementaciones de dispositivos incluyen puertos USB que admiten el modo de host USB, deben cumplir con lo siguiente:
- [C-4-1] DEBE implementar la clase de audio USB.
Si las implementaciones de dispositivos incluyen un puerto HDMI, deben cumplir con lo siguiente:
- [C-5-1] DEBE admitir la salida en estéreo y ocho canales a una profundidad de 20 o 24 bits y 192 kHz sin pérdida de profundidad de bits ni nuevo muestreo.
5.11. Captura para sin procesar
Android incluye compatibilidad con la grabación de audio sin procesar a través de la fuente de audio android.media.MediaRecorder.AudioSource.UNPROCESSED
. En OpenSL ES, se puede acceder a él con el parámetro de configuración predeterminado de grabación SL_ANDROID_RECORDING_PRESET_UNPROCESSED
.
Si las implementaciones de dispositivos pretenden admitir la fuente de audio sin procesar y ponerla a disposición de las apps de terceros, deben cumplir con lo siguiente:
-
[C-1-1] DEBE informar la compatibilidad a través de la propiedad
android.media.AudioManager
PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED. -
[C-1-2] DEBE exhibir características de amplitud versus frecuencia aproximadamente planas en el rango de frecuencias medias: específicamente ±10 dB de 100 Hz a 7,000 Hz para cada micrófono que se use para grabar la fuente de audio sin procesar.
-
[C-1-3] DEBE mostrar niveles de amplitud en el rango de frecuencias bajas: específicamente, de ±20 dB de 5 Hz a 100 Hz en comparación con el rango de frecuencias medias para todos y cada uno de los micrófonos que se usen para grabar la fuente de audio sin procesar.
-
[C-1-4] DEBE mostrar niveles de amplitud en el rango de alta frecuencia: específicamente, de ±30 dB desde 7,000 Hz hasta 22 kHz en comparación con el rango de frecuencia media para todos y cada uno de los micrófonos que se usen para grabar la fuente de audio sin procesar.
-
[C-1-5] SE DEBE establecer la sensibilidad de entrada de audio de modo que una fuente de tono sinusoidal de 1,000 Hz reproducida a un nivel de presión acústica (SPL) de 94 dB produzca una respuesta con un valor RMS de 520 para muestras de 16 bits (o -36 dB a escala completa para muestras de punto flotante o de doble precisión) para cada micrófono que se use para grabar la fuente de audio sin procesar.
-
[C-1-6] DEBE tener una relación señal-ruido (SNR) de 60 dB o más para cada micrófono que se use para grabar la fuente de audio sin procesar. (mientras que la SNR se mide como la diferencia entre 94 dB SPL y el SPL equivalente del ruido propio, ponderado según A).
-
[C-1-7] DEBE tener una distorsión armónica total (THD) inferior al 1% para 1 kHz a un nivel de entrada de SPL de 90 dB en todos y cada uno de los micrófonos que se usen para grabar la fuente de audio sin procesar.
-
NO debe tener ningún otro procesamiento de señales (p.ej., control de ganancia automático, filtro de paso alto o cancelación de eco) en la ruta de acceso, excepto un multiplicador de nivel para llevar el nivel al rango deseado. En otras palabras:
- [C-1-8] Si hay algún procesamiento de señales en la arquitectura por algún motivo, DEBE inhabilitarse y no introducir ningún retraso o latencia adicional en la ruta de la señal.
- [C-1-9] Si bien se permite que el multiplicador de nivel esté en la ruta, NO DEBE introducir demora o latencia en la ruta de la señal.
Todas las mediciones de SPL se realizan directamente junto al micrófono que se está probando. En el caso de las configuraciones con varios micrófonos, estos requisitos se aplican a cada micrófono.
Si las implementaciones de dispositivos declaran android.hardware.microphone
, pero no admiten la fuente de audio sin procesar, deben hacer lo siguiente:
- [C-2-1] DEBE devolver
null
para el método de la API deAudioManager.getProperty(PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED)
, para indicar correctamente la falta de compatibilidad. - [SR] se sigue RECOMENDANDO EN GRAN MEDIDA para satisfacer la mayor cantidad posible de requisitos de la ruta de señal de la fuente de grabación sin procesar.
6. Compatibilidad con las opciones y herramientas para desarrolladores
6.1. Herramientas para desarrolladores
Implementaciones del dispositivo:
- [C-0-1] DEBE admitir las herramientas para desarrolladores de Android que se proporcionan en el SDK de Android.
-
- [C-0-2] DEBE admitir todas las funciones de adb según se documentan en el SDK de Android, incluido dumpsys.
- [C-0-3] NO DEBE alterar el formato ni el contenido de los eventos del sistema del dispositivo (batterystats , diskstats, fingerprint, graphicsstats, netstats, notification, procstats) registrados a través de dumpsys.
- [C-0-4] El daemon de adb del dispositivo DEBE estar inactivo de forma predeterminada, y DEBE haber un mecanismo accesible para el usuario para activar Android Debug Bridge.
- [C-0-5] DEBE admitir adb seguro. Android incluye compatibilidad con adb seguro. adb seguro habilita adb en hosts autenticados conocidos.
-
[C-0-6] DEBE proporcionar un mecanismo que permita conectar adb desde una máquina host. Por ejemplo:
- Las implementaciones de dispositivos sin un puerto USB que admitan el modo periférico DEBEN implementar adb a través de una red de área local (como Ethernet o Wi-Fi).
- DEBE proporcionar controladores para Windows 7, 9 y 10, lo que permite a los desarrolladores conectarse al dispositivo con el protocolo adb.
-
Servicio de supervisión de depuración de Dalvik (ddms)
- [C-0-7] DEBE admitir todas las funciones de ddms según se documentan en el SDK de Android. Como ddms usa adb, la compatibilidad con ddms DEBE estar inactiva de forma predeterminada, pero DEBE ser compatible siempre que el usuario haya activado Android Debug Bridge, como se indicó anteriormente.
-
Monkey
- [C-0-8] DEBE incluir el framework de Monkey y ponerlo a disposición de las aplicaciones para que lo usen.
-
SysTrace
- [C-0-9] DEBE admitir la herramienta systrace, como se documenta en el SDK de Android. Systrace debe estar inactivo de forma predeterminada, y DEBE haber un mecanismo accesible para el usuario para activar Systrace.
6.2. Opciones para desarrolladores
Android incluye compatibilidad para que los desarrolladores configuren parámetros relacionados con el desarrollo de aplicaciones.
Las implementaciones de dispositivos DEBEN proporcionar una experiencia coherente para las opciones para desarrolladores:
- [C-0-1] DEBE respetar el intent android.settings.APPLICATION_DEVELOPMENT_SETTINGS para mostrar la configuración relacionada con el desarrollo de aplicaciones. La implementación de Android upstream oculta el menú Opciones para desarrolladores de forma predeterminada y permite que los usuarios lo inicien después de presionar siete (7) veces el elemento de menú Configuración > Acerca del dispositivo > Número de compilación.
- [C-0-2] DEBE ocultar las Opciones para desarrolladores de forma predeterminada y DEBE proporcionar un mecanismo para habilitarlas sin necesidad de ninguna lista de entidades permitidas especial.
- Es POSIBLE que se limite temporalmente el acceso al menú Opciones para desarrolladores, ya sea ocultándolo visualmente o inhabilitándolo, para evitar distracciones en situaciones en las que la seguridad del usuario sea una preocupación.
7. Compatibilidad de hardware
Si un dispositivo incluye un componente de hardware en particular que tiene una API correspondiente para desarrolladores externos, sucede lo siguiente:
- [C-0-1] La implementación del dispositivo DEBE implementar esa API como se describe en la documentación del SDK de Android.
Si una API del SDK interactúa con un componente de hardware que se indica como opcional y la implementación del dispositivo no posee ese componente, se debe hacer lo siguiente:
- [C-0-2] Aún se DEBEN presentar las definiciones de clase completas (como se documentan en el SDK) para las APIs de componentes.
- [C-0-3] Los comportamientos de la API DEBEN implementarse como no-ops de alguna manera razonable.
- [C-0-4] Los métodos de la API DEBEN devolver valores nulos cuando lo permita la documentación del SDK.
- [C-0-5] Los métodos de la API DEBEN devolver implementaciones no operativas de clases en las que la documentación del SDK no permite valores nulos.
- [C-0-6] Los métodos de API NO DEBEN arrojar excepciones que no estén documentadas en la documentación del SDK.
- [C-0-7] Las implementaciones de dispositivos DEBEN informar de forma coherente información precisa sobre la configuración de hardware a través de los métodos
getSystemAvailableFeatures()
yhasSystemFeature(String)
en la clase android.content.pm.PackageManager para la misma huella digital de compilación.
Un ejemplo típico de una situación en la que se aplican estos requisitos es la API de telefonía: incluso en dispositivos que no son teléfonos, estas APIs se deben implementar como no-ops razonables.
7.1. Pantalla y gráficos
Android incluye funciones que ajustan automáticamente los recursos de la aplicación y los diseños de la IU de forma adecuada para el dispositivo, lo que garantiza que las aplicaciones de terceros se ejecuten correctamente en una variedad de configuraciones de hardware. Los dispositivos DEBEN implementar correctamente estas APIs y comportamientos, como se detalla en esta sección.
Las unidades a las que se hace referencia en los requisitos de esta sección se definen de la siguiente manera:
- Tamaño diagonal físico. Es la distancia en pulgadas entre dos esquinas opuestas de la parte iluminada de la pantalla.
- puntos por pulgada (DPI). Es la cantidad de píxeles que abarca un tramo lineal horizontal o vertical de 1". Cuando se indican valores de DPI, tanto el DPI horizontal como el vertical deben estar dentro del rango.
- relación de aspecto. Es la proporción de píxeles de la dimensión más larga con respecto a la dimensión más corta de la pantalla. Por ejemplo, una pantalla de 480 x 854 píxeles tendría una relación de aspecto de 854/480 = 1.779, o aproximadamente “16:9”.
- píxel independiente de la densidad (dp). Unidad de píxel virtual normalizada para una pantalla de 160 dpi, calculada de la siguiente manera: píxeles = dps * (densidad/160).
7.1.1. Configuración de pantalla
7.1.1.1. Tamaño de la pantalla
El framework de IU de Android admite una variedad de tamaños de diseño de pantalla lógicos diferentes y permite que las aplicaciones consulten el tamaño de diseño de pantalla de la configuración actual a través de Configuration.screenLayout
con SCREENLAYOUT_SIZE_MASK
y Configuration.smallestScreenWidthDp
.
-
[C-0-1] Las implementaciones de dispositivos DEBEN informar el tamaño de diseño correcto para
Configuration.screenLayout
, como se define en la documentación del SDK de Android. Específicamente, las implementaciones de dispositivos DEBEN informar las dimensiones correctas de la pantalla en píxeles independientes de la densidad (dp) lógicos, como se indica a continuación:- Los dispositivos con el atributo
Configuration.uiMode
establecido en cualquier valor que no sea UI_MODE_TYPE_WATCH y que informen un tamaño desmall
para el atributoConfiguration.screenLayout
DEBEN tener al menos 426 dp x 320 dp. - Los dispositivos que informan un tamaño de
normal
para elConfiguration.screenLayout
DEBEN tener al menos 480 dp x 320 dp. - Los dispositivos que informan un tamaño de
large
para elConfiguration.screenLayout
DEBEN tener al menos 640 dp x 480 dp. - Los dispositivos que informan un tamaño de
xlarge
para elConfiguration.screenLayout
DEBEN tener al menos 960 dp x 720 dp.
- Los dispositivos con el atributo
-
[C-0-2] Las implementaciones de dispositivos DEBEN cumplir correctamente con la compatibilidad declarada de las aplicaciones para los tamaños de pantalla a través del atributo <
supports-screens
> en el archivo AndroidManifest.xml, como se describe en la documentación del SDK de Android.
7.1.1.2. Relación de aspecto de la pantalla
Si bien no hay restricciones para el valor de la relación de aspecto de la pantalla física, la relación de aspecto de la pantalla lógica en la que se renderizan las apps de terceros, como se puede derivar de los valores de altura y ancho que se informan a través de las APIs de view.Display
y la API de Configuration, DEBE cumplir con los siguientes requisitos:
-
[C-0-1] Las implementaciones de dispositivos con
Configuration.uiMode
establecido comoUI_MODE_TYPE_NORMAL
DEBEN tener un valor de relación de aspecto entre 1.3333 (4:3) y 1.86 (aproximadamente 16:9), a menos que se considere que la app está lista para estirarse más cumpliendo una de las siguientes condiciones:- La app declaró que admite una relación de aspecto de pantalla más grande a través del valor de metadatos
android.max_aspect
. - La app declara que se puede cambiar su tamaño a través del atributo android:resizeableActivity.
- La app se orienta al nivel de API 24 o uno superior, y no declara un
android:MaxAspectRatio
que restrinja la relación de aspecto permitida.
- La app declaró que admite una relación de aspecto de pantalla más grande a través del valor de metadatos
-
[C-0-2] Las implementaciones de dispositivos con
Configuration.uiMode
establecido comoUI_MODE_TYPE_WATCH
DEBEN tener un valor de relación de aspecto establecido como 1.0 (1:1).
7.1.1.3. Densidad de la pantalla
El framework de IU de Android define un conjunto de densidades lógicas estándar para ayudar a los desarrolladores de aplicaciones a orientar los recursos de la aplicación.
-
[C-0-1] De forma predeterminada, las implementaciones de dispositivos DEBEN informar solo una de las siguientes densidades lógicas del framework de Android a través de la API de DENSITY_DEVICE_STABLE, y este valor NO DEBE cambiar en ningún momento. Sin embargo, el dispositivo PUEDE informar una densidad arbitraria diferente según los cambios en la configuración de la pantalla que realice el usuario (por ejemplo, el tamaño de la pantalla) después del inicio inicial.
- 120 dpi (ldpi)
- 160 dpi (mdpi)
- 213 DPI (tvdpi)
- 240 dpi (hdpi)
- 260 DPI (260dpi)
- 280 DPI (280dpi)
- 300 dpi
- 320 dpi (xhdpi)
- 340 dpi (340dpi)
- 360 dpi (360 DPI)
- 400 dpi (400dpi)
- 420 DPI (420DPI)
- 480 DPI (xxhdpi)
- 560 dpi
- 640 dpi (xxxhdpi)
-
Las implementaciones de dispositivos DEBEN definir la densidad estándar del framework de Android que sea numéricamente más cercana a la densidad física de la pantalla, a menos que esa densidad lógica reduzca el tamaño de pantalla informado por debajo del mínimo admitido. Si la densidad del framework de Android estándar que es numéricamente más cercana a la densidad física genera un tamaño de pantalla más pequeño que el tamaño de pantalla compatible más pequeño admitido (320 dp de ancho), las implementaciones de dispositivos DEBEN informar la siguiente densidad del framework de Android estándar más baja.
Si hay una opción para cambiar el tamaño de la pantalla del dispositivo, haz lo siguiente:
- [C-1-1] El tamaño de la pantalla NO DEBE aumentarse a más de 1.5 veces la densidad nativa ni producir una dimensión mínima efectiva de la pantalla inferior a 320 dp (equivalente al calificador de recursos sw320dp), lo que ocurra primero.
- [C-1-2] El tamaño de la pantalla NO DEBE reducirse a menos de 0.85 veces la densidad nativa.
- Para garantizar una buena usabilidad y tamaños de fuente coherentes, se RECOMIENDA proporcionar el siguiente ajuste de escala de las opciones de pantalla nativa (sin incumplir los límites especificados anteriormente).
- Pequeño: 0.85 veces
- Valor predeterminado: 1x (escala de pantalla nativa)
- Grande: 1.15x
- Más grande: 1.3 veces
- La más grande: 1.45x
7.1.2. Métricas de visualización
Si las implementaciones de dispositivos incluyen una pantalla o una salida de video, deben cumplir con lo siguiente:
- [C-1-1] DEBE informar los valores correctos para todas las métricas de visualización definidas en la API de
android.util.DisplayMetrics
.
Si las implementaciones de dispositivos no incluyen una pantalla integrada o salida de video, deben cumplir con lo siguiente:
- [C-2-1] DEBE informar valores razonables para todas las métricas de visualización definidas en la API de
android.util.DisplayMetrics
para elview.Display
predeterminado emulado.
7.1.3. Orientación de pantalla
Implementaciones del dispositivo:
- [C-0-1] DEBE informar qué orientaciones de pantalla admite (
android.hardware.screen.portrait
oandroid.hardware.screen.landscape
) y DEBE informar al menos una orientación admitida. Por ejemplo, un dispositivo con una pantalla horizontal de orientación fija, como una televisión o una laptop, SOLO DEBE informarandroid.hardware.screen.landscape
. - [C-0-2] DEBE informar el valor correcto de la orientación actual del dispositivo, siempre que se consulte a través de
android.content.res.Configuration.orientation
,android.view.Display.getOrientation()
o cualquier otra API.
Si las implementaciones de dispositivos admiten ambas orientaciones de pantalla, deben cumplir con lo siguiente:
- [C-1-1] DEBE admitir la orientación dinámica de las aplicaciones hacia la orientación de pantalla vertical u horizontal. Es decir, el dispositivo debe respetar la solicitud de la aplicación para una orientación de pantalla específica.
- [C-1-2] NO DEBE cambiar el tamaño o la densidad de la pantalla informados cuando se cambia la orientación.
- La MAY puede seleccionar la orientación vertical u horizontal como predeterminada.
7.1.4. Aceleración de gráficos 2D y 3D
7.1.4.1 OpenGL ES
Implementaciones del dispositivo:
- [C-0-1] DEBE identificar correctamente las versiones compatibles de OpenGL ES (1.1, 2.0, 3.0, 3.1, 3.2) a través de las APIs administradas (por ejemplo, con el método
GLES10.getString()
) y las APIs nativas. - [C-0-2] DEBE incluir la compatibilidad con todas las APIs administradas y nativas correspondientes para cada versión de OpenGL ES que se haya identificado como compatible.
Si las implementaciones de dispositivos incluyen una pantalla o una salida de video, deben cumplir con lo siguiente:
- [C-1-1] DEBE admitir OpenGL ES 1.0 y 2.0, tal como se describe y detalla en la documentación del SDK de Android.
- [SR] Se RECOMIENDA ENCARECIDAMENTE que se admita OpenGL ES 3.0.
- DEBE admitir OpenGL ES 3.1 o 3.2.
Si las implementaciones de dispositivos admiten alguna de las versiones de OpenGL ES, deben cumplir con lo siguiente:
- [C-2-1] DEBE informar a través de las APIs administradas de OpenGL ES y las APIs nativas cualquier otra extensión de OpenGL ES que haya implementado y, a la inversa, NO DEBE informar cadenas de extensión que no admita.
- [C-2-2] DEBE admitir las extensiones
EGL_KHR_image
,EGL_KHR_image_base
,EGL_ANDROID_image_native_buffer
,EGL_ANDROID_get_native_client_buffer
,EGL_KHR_wait_sync
,EGL_KHR_get_all_proc_addresses
,EGL_ANDROID_presentation_time
,EGL_KHR_swap_buffers_with_damage
yEGL_ANDROID_recordable
. - Se RECOMIENDA ENCARECIDAMENTE [SR] para admitir EGL_KHR_partial_update.
- DEBE informar con precisión, a través del método
getString()
, cualquier formato de compresión de texturas que admita, que suele ser específico del proveedor.
Si las implementaciones de dispositivos declaran compatibilidad con OpenGL ES 3.0, 3.1 o 3.2, deben cumplir con lo siguiente:
- [C-3-1] DEBE exportar los símbolos de función correspondientes para estas versiones, además de los símbolos de función de OpenGL ES 2.0 en la biblioteca libGLESv2.so.
Si las implementaciones de dispositivos admiten OpenGL ES 3.2, deben cumplir con lo siguiente:
- [C-4-1] DEBE admitir el Android Extension Pack para OpenGL ES en su totalidad.
Si las implementaciones de dispositivos admiten el Android Extension Pack de OpenGL ES en su totalidad, cumplen con los siguientes requisitos:
- [C-5-1] DEBE identificar la compatibilidad a través de la marca de función
android.hardware.opengles.aep
.
Si las implementaciones de dispositivos exponen compatibilidad con la extensión EGL_KHR_mutable_render_buffer
, deben hacer lo siguiente:
- [C-6-1] TAMBIÉN DEBE admitir la extensión
EGL_ANDROID_front_buffer_auto_refresh
.
7.1.4.2 Vulkan
Android incluye compatibilidad con Vulkan, una API multiplataforma de baja sobrecarga para gráficos 3D de alto rendimiento.
Si las implementaciones de dispositivos admiten OpenGL ES 3.0 o 3.1, deben cumplir con lo siguiente:
- [SR] SE RECOMIENDA ENCARECIDAMENTE incluir compatibilidad con Vulkan 1.0 .
Si las implementaciones de dispositivos incluyen una pantalla o una salida de video, deben cumplir con lo siguiente:
- DEBE incluir compatibilidad con Vulkan 1.0.
Implementaciones del dispositivo, si se incluye compatibilidad con Vulkan 1.0:
- [C-1-1] DEBE informar el valor entero correcto con los parámetros de configuración
android.hardware.vulkan.level
yandroid.hardware.vulkan.version
. - [C-1-2] DEBE enumerar, al menos, un
VkPhysicalDevice
para la API nativa de VulkanvkEnumeratePhysicalDevices()
. - [C-1-3] DEBE implementar por completo las APIs de Vulkan 1.0 para cada
VkPhysicalDevice
enumerado. - [C-1-4] DEBE enumerar las capas, incluidas en las bibliotecas nativas denominadas como
libVkLayer*.so
en el directorio de bibliotecas nativas del paquete de la aplicación, a través de las APIs nativas de VulkanvkEnumerateInstanceLayerProperties()
yvkEnumerateDeviceLayerProperties()
. - [C-1-5] NO DEBE enumerar las capas proporcionadas por bibliotecas fuera del paquete de la aplicación ni proporcionar otras formas de rastrear o interceptar la API de Vulkan, a menos que la aplicación tenga el atributo
android:debuggable
establecido comotrue
. - [C-1-6] DEBE informar todas las cadenas de extensión que admite a través de las APIs nativas de Vulkan y, a la inversa, NO DEBE informar las cadenas de extensión que no admite correctamente.
Implementaciones de dispositivos, si no incluyen compatibilidad con Vulkan 1.0:
- [C-2-1] NO DEBE declarar ninguna de las marcas de funciones de Vulkan (p.ej.,
android.hardware.vulkan.level
,android.hardware.vulkan.version
). - [C-2-2] NO DEBE enumerar ningún
VkPhysicalDevice
para la API nativa de VulkanvkEnumeratePhysicalDevices()
.
7.1.4.3 RenderScript
- [C-0-1] Las implementaciones de dispositivos DEBEN admitir Android RenderScript, como se detalla en la documentación del SDK de Android.
7.1.4.4 Aceleración de gráficos 2D
Android incluye un mecanismo para que las aplicaciones declaren que desean habilitar la aceleración de hardware para gráficos 2D a nivel de Application, Activity, Window o View a través del uso de una etiqueta de manifiesto android:hardwareAccelerated o llamadas directas a la API.
Implementaciones del dispositivo:
- [C-0-1] DEBE habilitar la aceleración de hardware de forma predeterminada y DEBE inhabilitarla si el desarrollador lo solicita configurando android:hardwareAccelerated="false" o inhabilitando la aceleración de hardware directamente a través de las APIs de Android View.
- [C-0-2] DEBE exhibir un comportamiento coherente con la documentación del SDK de Android sobre la aceleración de hardware.
Android incluye un objeto TextureView que permite a los desarrolladores integrar directamente texturas de OpenGL ES aceleradas por hardware como destinos de procesamiento en una jerarquía de IU.
Implementaciones del dispositivo:
- [C-0-3] DEBE admitir la API de TextureView y DEBE exhibir un comportamiento coherente con la implementación de Android upstream.
7.1.4.5 Pantallas con amplia gama de colores
Si las implementaciones de dispositivos indican que admiten pantallas de amplia gama a través de Configuration.isScreenWideColorGamut()
, deben cumplir con lo siguiente:
- [C-1-1] DEBE tener una pantalla calibrada en color.
- [C-1-2] DEBE tener una pantalla cuya gama cubra por completo la gama de colores sRGB en el espacio CIE 1931 xyY.
- [C-1-3] DEBE tener una pantalla cuyo gamut tenga un área de al menos el 90% del NTSC 1953 en el espacio CIE 1931 xyY.
- [C-1-4] DEBE admitir OpenGL ES 3.0, 3.1 o 3.2 y registrarlo correctamente.
- [C-1-5] DEBE anunciar la compatibilidad con las extensiones
EGL_KHR_no_config_context
,EGL_EXT_pixel_format_float
,EGL_KHR_gl_colorspace
,EGL_EXT_colorspace_scrgb_linear
yEGL_GL_colorspace_display_p3
. - [SR] Se RECOMIENDA ENCARECIDAMENTE que admitan
GL_EXT_sRGB
.
Por el contrario, si las implementaciones de dispositivos no admiten pantallas de amplia gama, deben hacer lo siguiente:
- [C-2-1] DEBE cubrir el 100% o más de sRGB en el espacio CIE 1931 xyY, aunque la gama de colores de la pantalla no esté definida.
7.1.5. Modo de compatibilidad con aplicaciones heredadas
Android especifica un “modo de compatibilidad” en el que el framework opera en un modo equivalente de tamaño de pantalla “normal” (ancho de 320 dp) para el beneficio de las aplicaciones heredadas que no se desarrollaron para versiones anteriores de Android que son anteriores a la independencia del tamaño de la pantalla.
7.1.6. Tecnología de pantalla
La plataforma de Android incluye APIs que permiten que las aplicaciones rendericen gráficos enriquecidos en la pantalla. Los dispositivos DEBEN admitir todas estas APIs según lo define el SDK de Android, a menos que se permita específicamente en este documento.
Implementaciones del dispositivo:
- [C-0-1] DEBE admitir pantallas capaces de renderizar gráficos en color de 16 bits.
- DEBE admitir pantallas capaces de mostrar gráficos de color de 24 bits.
- [C-0-2] DEBE admitir pantallas capaces de renderizar animaciones.
- [C-0-3] DEBE usar la tecnología de pantalla que tenga una relación de aspecto de píxel (PAR) entre 0.9 y 1.15. Es decir, la relación de aspecto del píxel DEBE ser casi cuadrada (1.0) con una tolerancia del 10 al 15%.
7.1.7. Pantallas secundarias
Android incluye compatibilidad con pantallas secundarias para habilitar las capacidades de uso compartido de contenido multimedia y las APIs para desarrolladores para acceder a pantallas externas.
Si las implementaciones de dispositivos admiten una pantalla externa a través de una conexión con cable, inalámbrica o una conexión de pantalla adicional integrada, deben cumplir con lo siguiente:
- [C-1-1] DEBE implementar el servicio y la API del sistema
DisplayManager
como se describe en la documentación del SDK de Android.
7.2. Dispositivos de entrada
Implementaciones del dispositivo:
- [C-0-1] DEBE incluir un mecanismo de entrada, como una pantalla táctil o una navegación sin contacto, para navegar entre los elementos de la IU.
7.2.1. Teclado
Si las implementaciones de dispositivos incluyen compatibilidad con aplicaciones de Editor de métodos de entrada (IME) de terceros, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE declarar la marca de función
android.software.input_methods
. - [C-1-2] DEBE implementar por completo
Input Management Framework
- [C-1-3] DEBE tener un teclado de software precargado.
Implementaciones de dispositivos: [C-0-1] NO DEBE incluir un teclado de hardware que no coincida con uno de los formatos especificados en android.content.res.Configuration.keyboard (QWERTY o 12 teclas). DEBE incluir implementaciones adicionales del teclado en pantalla. * PUEDE incluir un teclado de hardware.
7.2.2. Navegación no táctil
Android incluye compatibilidad con el pad direccional, la bola de seguimiento y la rueda como mecanismos para la navegación sin contacto.
Implementaciones del dispositivo:
- [C-0-1] DEBE informar el valor correcto para android.content.res.Configuration.navigation.
Si las implementaciones de dispositivos no tienen navegaciones sin contacto, sucede lo siguiente:
- [C-1-1] DEBE proporcionar un mecanismo alternativo razonable de interfaz de usuario para la selección y edición de texto, compatible con los motores de administración de entrada. La implementación de código abierto de Android upstream incluye un mecanismo de selección adecuado para usar con dispositivos que no tienen entradas de navegación táctil.
7.2.3. Teclas de navegación
Las funciones Inicio, Recientes y Atrás, que suelen proporcionarse a través de una interacción con un botón físico exclusivo o una parte distinta de la pantalla táctil, son esenciales para el paradigma de navegación de Android y, por lo tanto, cumplen con los siguientes requisitos:
- [C-0-1] DEBE proporcionar la función de Inicio.
- DEBE proporcionar botones para las funciones Recientes y Atrás.
Si se proporcionan las funciones de Inicio, Recientes o Atrás, se cumplen las siguientes condiciones:
- [C-1-1] DEBE ser accesible con una sola acción (p.ej., presión, doble clic o gesto) cuando cualquiera de ellas sea accesible.
- [C-1-2] DEBE proporcionar una indicación clara de qué acción única activaría cada función. Algunos ejemplos de este tipo de indicaciones son tener un ícono visible impreso en el botón, mostrar un ícono de software en la parte de la barra de navegación de la pantalla o guiar al usuario a través de un flujo de demostración guiado paso a paso durante la experiencia de configuración inicial.
Implementaciones del dispositivo:
- [SR] SE RECOMIENDA ENCARECIDAMENTE que no proporcione el mecanismo de entrada para la función de menú, ya que se dejó de usar en favor de la barra de acciones desde Android 4.0.
Si las implementaciones de dispositivos proporcionan la función Menú, deben cumplir con lo siguiente:
- [C-2-1] DEBE mostrar el botón de menú ampliado de acciones siempre que la ventana emergente del menú ampliado de acciones no esté vacía y la barra de acciones esté visible.
- [C-2-2] NO DEBE modificar la posición de la ventana emergente de desbordamiento de acciones que se muestra cuando se selecciona el botón de desbordamiento en la barra de acciones, pero PUEDE renderizar la ventana emergente de desbordamiento de acciones en una posición modificada en la pantalla cuando se muestra al seleccionar la función Menú.
Si las implementaciones de dispositivos no proporcionan la función de menú, para garantizar la compatibilidad con versiones anteriores, deben hacer lo siguiente: * [C-3-1] DEBEN poner la función de menú a disposición de las aplicaciones cuando targetSdkVersion
sea inferior a 10, ya sea a través de un botón físico, una tecla de software o gestos. Se debe poder acceder a esta función del menú, a menos que se oculte junto con otras funciones de navegación.
Si las implementaciones de dispositivos proporcionan la función de Asistencia, [C-4-1] DEBEN hacer que se pueda acceder a ella con una sola acción (p.ej., un toque, un doble clic o un gesto) cuando se pueda acceder a otras teclas de navegación. [SR] SE RECOMIENDA ENCARECIDAMENTE usar la función de mantener presionado en INICIO como esta interacción designada.
Si las implementaciones de dispositivos usan una parte distinta de la pantalla para mostrar las teclas de navegación, deben cumplir con los siguientes requisitos:
- [C-5-1] Las teclas de navegación DEBEN usar una parte distinta de la pantalla, que no esté disponible para las aplicaciones, y NO DEBEN obstruir ni interferir de ninguna otra manera con la parte de la pantalla disponible para las aplicaciones.
- [C-5-2] DEBE poner a disposición de las aplicaciones una parte de la pantalla que cumpla con los requisitos definidos en la sección 7.1.1.
- [C-5-3] DEBE respetar los parámetros de configuración establecidos por la app a través del método de la API de
View.setSystemUiVisibility()
, de modo que esta parte distinta de la pantalla (también conocida como barra de navegación) se oculte correctamente, como se documenta en el SDK.
7.2.4. Entrada táctil
Android incluye compatibilidad con una variedad de sistemas de entrada de puntero, como pantallas táctiles, paneles táctiles y dispositivos de entrada táctil simulada. Las implementaciones de dispositivos basadas en pantallas táctiles se asocian con una pantalla de modo que el usuario tenga la impresión de manipular directamente los elementos en la pantalla. Dado que el usuario toca la pantalla directamente, el sistema no requiere ninguna ayuda adicional para indicar los objetos que se manipulan.
Implementaciones del dispositivo:
- DEBE tener algún tipo de sistema de entrada de puntero (ya sea similar a un mouse o táctil).
- DEBE admitir punteros con seguimiento completamente independiente.
Si las implementaciones de dispositivos incluyen una pantalla táctil (de un solo toque o mejor), deben cumplir con lo siguiente:
- [C-1-1] Se DEBE informar
TOUCHSCREEN_FINGER
para el campo de la APIConfiguration.touchscreen
. - [C-1-2] DEBE informar los parámetros de configuración de
android.hardware.touchscreen
yandroid.hardware.faketouch
Si las implementaciones de dispositivos incluyen una pantalla táctil que puede hacer un seguimiento de más de un toque, deben cumplir con lo siguiente:
- [C-2-1] DEBE informar los parámetros de configuración de funciones adecuados
android.hardware.touchscreen.multitouch
,android.hardware.touchscreen.multitouch.distinct
yandroid.hardware.touchscreen.multitouch.jazzhand
que correspondan al tipo de pantalla táctil específica del dispositivo.
Si las implementaciones de dispositivos no incluyen una pantalla táctil (y solo dependen de un dispositivo de puntero) y cumplen con los requisitos de toque falso que se indican en la sección 7.2.5, deben hacer lo siguiente:
- [C-3-1] NO DEBE informar sobre ninguna marca de función que comience con
android.hardware.touchscreen
y SOLO DEBE informar sobreandroid.hardware.faketouch
.
7.2.5. Entrada táctil falsa
La interfaz táctil falsa proporciona un sistema de entrada del usuario que se aproxima a un subconjunto de las capacidades de la pantalla táctil. Por ejemplo, un mouse o un control remoto que hace funcionar un cursor en pantalla se aproxima al tacto, pero requiere que el usuario primero apunte o enfoque y, luego, haga clic. Numerosos dispositivos de entrada, como el mouse, el panel táctil, el mouse aéreo basado en giroscopio, el puntero giroscópico, el joystick y el panel táctil multitáctil, pueden admitir interacciones táctiles falsas. Android incluye la constante de función android.hardware.faketouch, que corresponde a un dispositivo de entrada de alta fidelidad que no es táctil (basado en puntero), como un mouse o un panel táctil, que puede emular de forma adecuada la entrada basada en el tacto (incluida la compatibilidad con gestos básicos) y que indica que el dispositivo admite un subconjunto emulado de la funcionalidad de la pantalla táctil.
Si las implementaciones de dispositivos no incluyen una pantalla táctil, pero sí otro sistema de entrada de puntero que desean poner a disposición, deben hacer lo siguiente:
- DEBE declarar la compatibilidad con la marca de función
android.hardware.faketouch
.
Si las implementaciones de dispositivos declaran compatibilidad con android.hardware.faketouch
, deben cumplir con lo siguiente:
- [C-1-1] DEBE informar las posiciones absolutas X e Y de la pantalla de la ubicación del puntero y mostrar un puntero visual en la pantalla.
- [C-1-2] DEBE informar el evento táctil con el código de acción que especifica el cambio de estado que se produce en el puntero cuando se mueve hacia arriba o hacia abajo en la pantalla.
- [C-1-3] DEBE admitir el puntero hacia abajo y hacia arriba en un objeto de la pantalla, lo que permite a los usuarios emular un toque en un objeto de la pantalla.
- [C-1-4] DEBE admitir el puntero hacia abajo, el puntero hacia arriba, el puntero hacia abajo y, luego, el puntero hacia arriba en el mismo lugar de un objeto en la pantalla dentro de un umbral de tiempo, lo que permite a los usuarios emular el doble toque en un objeto en la pantalla.
- [C-1-5] DEBE admitir la acción de puntero hacia abajo en un punto arbitrario de la pantalla, el movimiento del puntero a cualquier otro punto arbitrario de la pantalla y, luego, la acción de puntero hacia arriba, lo que permite a los usuarios emular un arrastre táctil.
- [C-1-6] DEBE admitir la acción de presionar el puntero y, luego, permitir que los usuarios muevan rápidamente el objeto a una posición diferente en la pantalla y, luego, levantar el puntero en la pantalla, lo que permite que los usuarios lancen un objeto en la pantalla.
- [C-1-7] DEBE informar
TOUCHSCREEN_NOTOUCH
para el campo de la API deConfiguration.touchscreen
.
Si las implementaciones de dispositivos declaran compatibilidad con android.hardware.faketouch.multitouch.distinct
, deben cumplir con lo siguiente:
- [C-2-1] DEBE declarar la compatibilidad con
android.hardware.faketouch
. - [C-2-2] DEBE admitir el seguimiento distinto de dos o más entradas de puntero independientes.
Si las implementaciones de dispositivos declaran compatibilidad con android.hardware.faketouch.multitouch.jazzhand
, deben cumplir con lo siguiente:
- [C-3-1] DEBE declarar la compatibilidad con
android.hardware.faketouch
. - [C-3-2] DEBE admitir el seguimiento distinto de 5 (seguimiento de una mano de dedos) o más entradas de puntero de forma completamente independiente.
7.2.6. Compatibilidad con controles de juegos
7.2.6.1. Asignaciones de botones
Si las implementaciones de dispositivos declaran el parámetro de configuración android.hardware.gamepad
, [C-1-1] DEBEN incorporar un controlador o incluir uno independiente en la caja que proporcione los medios para ingresar todos los eventos que se enumeran en las siguientes tablas. [C-1-2] DEBE poder asignar eventos HID a sus constantes view.InputEvent
de Android asociadas, como se indica en las siguientes tablas. La implementación de Android upstream incluye la implementación de controles de juegos que satisface este requisito.
Botón | Uso de HID2 | Botón de Android |
---|---|---|
A1 | 0x09 0x0001 | KEYCODE_BUTTON_A (96) |
B1 | 0x09 0x0002 | KEYCODE_BUTTON_B (97) |
X1 | 0x09 0x0004 | KEYCODE_BUTTON_X (99) |
Y1 | 0x09 0x0005 | KEYCODE_BUTTON_Y (100) |
Pad direccional hacia arriba1 Pad direccional hacia abajo1 |
0x01 0x00393 | AXIS_HAT_Y4 |
Pad direccional izquierdo1 Pad direccional derecho1 |
0x01 0x00393 | AXIS_HAT_X4 |
Botón izquierdo del hombro1 | 0x09 0x0007 | KEYCODE_BUTTON_L1 (102) |
Botón derecho del hombro1 | 0x09 0x0008 | KEYCODE_BUTTON_R1 (103) |
Clic en el joystick izquierdo1 | 0x09 0x000E | KEYCODE_BUTTON_THUMBL (106) |
Clic del joystick derecho1 | 0x09 0x000F | KEYCODE_BUTTON_THUMBR (107) |
Página principal1 | 0x0c 0x0223 | KEYCODE_HOME (3) |
Atrás1 | 0x0c 0x0224 | KEYCODE_BACK (4) |
1 KeyEvent
2 Los usos de HID anteriores se deben declarar dentro de una CA de Gamepad (0x01 0x0005).
3 Este uso debe tener un mínimo lógico de 0, un máximo lógico de 7, un mínimo físico de 0, un máximo físico de 315, unidades en grados y un tamaño de informe de 4. El valor lógico se define como la rotación en el sentido de las agujas del reloj desde el eje vertical. Por ejemplo, un valor lógico de 0 representa que no hay rotación y que se presionó el botón hacia arriba, mientras que un valor lógico de 1 representa una rotación de 45 grados y que se presionaron las teclas hacia arriba y hacia la izquierda.
Controles analógicos1 | Uso de HID | Botón de Android |
---|---|---|
Gatillo izquierdo | 0x02 0x00C5 | AXIS_LTRIGGER |
Gatillo derecho | 0x02 0x00C4 | AXIS_RTRIGGER |
Joystick izquierdo |
0x01 0x0030 0x01 0x0031 |
AXIS_X AXIS_Y |
Joystick derecho |
0x01 0x0032 0x01 0x0035 |
AXIS_Z AXIS_RZ |
7.2.7. Control remoto
Consulta la Sección 2.3.1 para conocer los requisitos específicos de cada dispositivo.
7.3. Sensores
Si las implementaciones de dispositivos incluyen un tipo de sensor en particular que tiene una API correspondiente para desarrolladores externos, la implementación del dispositivo DEBE implementar esa API como se describe en la documentación del SDK de Android y la documentación de Android Open Source sobre sensores.
Implementaciones del dispositivo:
- [C-0-1] DEBE informar con precisión la presencia o ausencia de sensores según la clase
android.content.pm.PackageManager
. - [C-0-2] DEBE devolver una lista precisa de los sensores admitidos a través de
SensorManager.getSensorList()
y métodos similares. - [C-0-3] DEBE comportarse de manera razonable para todas las demás APIs de sensores (por ejemplo, devolviendo
true
ofalse
según corresponda cuando las aplicaciones intenten registrar objetos de escucha, no llamando a los objetos de escucha de sensores cuando los sensores correspondientes no estén presentes, etcétera).
Si las implementaciones de dispositivos incluyen un tipo de sensor en particular que tiene una API correspondiente para desarrolladores externos, deben cumplir con lo siguiente:
- [C-1-1] DEBE informar todas las mediciones de los sensores con los valores pertinentes del Sistema Internacional de Unidades (métrico) para cada tipo de sensor, según se define en la documentación del SDK de Android.
- [C-1-2] DEBE informar los datos del sensor con una latencia máxima de 100 milisegundos.
- 2 * sample_time para el caso de un sensor transmitido con una latencia mínima requerida de 5 ms + 2 * sample_time cuando el procesador de aplicaciones está activo. Esta demora no incluye ninguna demora de filtrado.
- [C-1-3] DEBE informar la primera muestra del sensor en un plazo de 400 milisegundos + 2 * sample_time después de que se active el sensor. Se acepta que esta muestra tenga una precisión de 0.
-
[SR] DEBE informar la hora del evento en nanosegundos, según se define en la documentación del SDK de Android, que representa la hora en que ocurrió el evento y se sincronizó con el reloj SystemClock.elapsedRealtimeNano(). Se RECOMIENDA ENCARECIDAMENTE que los dispositivos Android existentes y nuevos cumplan con estos requisitos para que puedan actualizarse a las versiones futuras de la plataforma, en las que este podría convertirse en un componente OBLIGATORIO. El error de sincronización DEBE ser inferior a 100 milisegundos.
-
[C-1-4] Para cualquier API que la documentación del SDK de Android indique que es un sensor continuo, las implementaciones del dispositivo DEBEN proporcionar de forma continua muestras de datos periódicas que DEBEN tener una fluctuación inferior al 3%, en la que la fluctuación se define como la desviación estándar de la diferencia de los valores de marca de tiempo informados entre eventos consecutivos.
-
[C-1-5] DEBE garantizar que el flujo de eventos del sensor NO IMPIDA que la CPU del dispositivo entre en un estado de suspensión o se reactive desde un estado de suspensión.
- Cuando se activan varios sensores, el consumo de energía NO DEBE exceder la suma del consumo de energía informado de cada sensor.
La lista anterior no es exhaustiva. Se debe considerar como fuente oficial el comportamiento documentado del SDK de Android y la documentación de código abierto de Android sobre los sensores.
Algunos tipos de sensores son compuestos, lo que significa que se pueden derivar de los datos proporcionados por uno o más sensores. (Entre los ejemplos, se incluyen el sensor de orientación y el sensor de aceleración lineal).
Implementaciones del dispositivo:
- DEBE implementar estos tipos de sensores cuando incluyan los sensores físicos necesarios, como se describe en tipos de sensores.
Si las implementaciones de dispositivos incluyen un sensor compuesto, deben cumplir con lo siguiente:
- [C-2-1] DEBE implementar el sensor como se describe en la documentación de código abierto de Android sobre sensores compuestos.
7.3.1. Acelerómetro
- Las implementaciones de dispositivos DEBEN incluir un acelerómetro de 3 ejes.
Si las implementaciones de dispositivos incluyen un acelerómetro de 3 ejes, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE poder informar eventos con una frecuencia de al menos 50 Hz.
- [C-1-2] Se DEBE implementar y registrar el sensor
TYPE_ACCELEROMETER
. - [C-1-3] DEBE cumplir con el sistema de coordenadas del sensor de Android, como se detalla en las APIs de Android.
- [C-1-4] DEBE poder medir desde la caída libre hasta cuatro veces la gravedad(4 g) o más en cualquier eje.
- [C-1-5] DEBE tener una resolución de al menos 12 bits.
- [C-1-6] DEBE tener una desviación estándar no superior a 0.05 m/s², donde la desviación estándar se debe calcular por eje en las muestras recopiladas durante un período de al menos 3 segundos a la velocidad de muestreo más rápida.
- Se RECOMIENDA ENCARECIDAMENTE implementar el sensor compuesto
TYPE_SIGNIFICANT_MOTION
para [SR]. - Se RECOMIENDA ENCARECIDAMENTE que los [SR] implementen el sensor
TYPE_ACCELEROMETER_UNCALIBRATED
si está disponible la calibración en línea del acelerómetro. - DEBE implementar los sensores compuestos
TYPE_SIGNIFICANT_MOTION
,TYPE_TILT_DETECTOR
,TYPE_STEP_DETECTOR
yTYPE_STEP_COUNTER
como se describe en el documento del SDK de Android. - DEBE informar eventos con una frecuencia de hasta 200 Hz como mínimo.
- DEBE tener una resolución de al menos 16 bits.
- Se DEBE calibrar mientras se usa si las características cambian durante el ciclo de vida y se compensan, y se deben conservar los parámetros de compensación entre los reinicios del dispositivo.
- DEBE tener compensación de temperatura.
- También DEBE implementar el sensor
TYPE_ACCELEROMETER_UNCALIBRATED
.
Si las implementaciones de dispositivos incluyen un acelerómetro de 3 ejes y se implementa cualquiera de los sensores compuestos TYPE_SIGNIFICANT_MOTION
, TYPE_TILT_DETECTOR
, TYPE_STEP_DETECTOR
o TYPE_STEP_COUNTER
, se deben cumplir los siguientes requisitos:
- [C-2-1] La suma de su consumo de energía SIEMPRE debe ser inferior a 4 mW.
- Cada uno DEBE ser inferior a 2 mW y 0.5 mW cuando el dispositivo se encuentre en condiciones dinámicas o estáticas.
Si las implementaciones de dispositivos incluyen un acelerómetro de 3 ejes y un sensor de giroscopio, deben cumplir con lo siguiente:
- [C-3-1] DEBE implementar los sensores compuestos
TYPE_GRAVITY
yTYPE_LINEAR_ACCELERATION
. - DEBE implementar el sensor compuesto
TYPE_GAME_ROTATION_VECTOR
. - [SR] SE RECOMIENDA ENCARECIDAMENTE que los dispositivos Android existentes y nuevos implementen el sensor
TYPE_GAME_ROTATION_VECTOR
.
Si las implementaciones de dispositivos incluyen un acelerómetro de 3 ejes, un sensor de giroscopio y un sensor de magnetómetro, deben cumplir con lo siguiente:
- [C-4-1] DEBE implementar un sensor compuesto
TYPE_ROTATION_VECTOR
.
7.3.2. Magnetómetro
- Las implementaciones de dispositivos DEBEN incluir un magnetómetro de 3 ejes (brújula).
Si las implementaciones de dispositivos incluyen un magnetómetro de 3 ejes, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE implementar el sensor
TYPE_MAGNETIC_FIELD
. - [C-1-2] DEBE poder informar eventos con una frecuencia de al menos 10 Hz y DEBE informar eventos con una frecuencia de al menos 50 Hz.
- [C-1-3] DEBE cumplir con el sistema de coordenadas del sensor de Android, como se detalla en las APIs de Android.
- [C-1-4] DEBE poder medir entre -900 µT y +900 µT en cada eje antes de saturarse.
- [C-1-5] DEBE tener un valor de compensación de hierro duro inferior a 700 µT y DEBERÍA tener un valor inferior a 200 µT, colocando el magnetómetro lejos de los campos magnéticos dinámicos (inducidos por corriente) y estáticos (inducidos por imán).
- [C-1-6] DEBE tener una resolución igual o más densa que 0.6 µT.
- [C-1-7] DEBE admitir la calibración y la compensación en línea de la desviación por hierro duro, y conservar los parámetros de compensación entre los reinicios del dispositivo.
- [C-1-8] DEBE tener aplicada la compensación de hierro blando. La calibración se puede realizar durante el uso o durante la producción del dispositivo.
- [C-1-9] DEBE tener una desviación estándar, calculada por eje en muestras recopiladas durante un período de al menos 3 segundos a la velocidad de muestreo más rápida, no superior a 1.5 µT; DEBE tener una desviación estándar no superior a 0.5 µT.
- DEBE implementar el sensor
TYPE_MAGNETIC_FIELD_UNCALIBRATED
. - [SR] SE RECOMIENDA ENCARECIDAMENTE que los dispositivos Android existentes y nuevos implementen el sensor
TYPE_MAGNETIC_FIELD_UNCALIBRATED
.
Si las implementaciones de dispositivos incluyen un magnetómetro de 3 ejes, un sensor de acelerómetro y un sensor de giroscopio, deben cumplir con lo siguiente:
- [C-2-1] DEBE implementar un sensor compuesto
TYPE_ROTATION_VECTOR
.
Si las implementaciones de dispositivos incluyen un magnetómetro de 3 ejes y un acelerómetro, deben cumplir con lo siguiente:
- PUEDE implementar el sensor
TYPE_GEOMAGNETIC_ROTATION_VECTOR
.
Si las implementaciones de dispositivos incluyen un magnetómetro de 3 ejes, un acelerómetro y un sensor TYPE_GEOMAGNETIC_ROTATION_VECTOR
, deben cumplir con los siguientes requisitos:
- [C-3-1] DEBE consumir menos de 10 mW.
- DEBE consumir menos de 3 mW cuando el sensor se registra para el modo por lotes a 10 Hz.
7.3.3. GPS
Implementaciones del dispositivo:
- DEBE incluir un receptor de GPS/GNSS.
Si las implementaciones de dispositivos incluyen un receptor de GPS/GNSS y reportan la capacidad a las aplicaciones a través de la marca de función android.hardware.location.gps
, deben cumplir con lo siguiente:
- [C-1-1] DEBE admitir resultados de ubicación a una frecuencia de al menos 1 Hz cuando se solicitan a través de
LocationManager#requestLocationUpdate
. - [C-1-2] DEBE poder determinar la ubicación en condiciones de cielo abierto (señales fuertes, interferencia multitrayectoria insignificante, HDOP < 2) en un plazo de 10 segundos (tiempo rápido para la primera corrección), cuando se conecta a una conexión a Internet con una velocidad de datos de 0.5 Mbps o más rápida. Por lo general, este requisito se cumple con el uso de alguna forma de técnica de GPS/GNSS asistido o predictivo para minimizar el tiempo de fijación del GPS/GNSS (los datos de asistencia incluyen la hora de referencia, la ubicación de referencia y la efemérides o el reloj del satélite).
- [SR] Después de realizar ese cálculo de ubicación, se RECOMIENDA ENCARECIDAMENTE que el dispositivo pueda determinar su ubicación, en cielo abierto, en un plazo de 10 segundos, cuando se reinicien las solicitudes de ubicación, hasta una hora después del cálculo de ubicación inicial, incluso cuando la solicitud posterior se realice sin una conexión de datos o después de un ciclo de energía.
-
En condiciones de cielo abierto, después de determinar la ubicación, ya sea que estés quieto o te muevas con una aceleración inferior a 1 m/s²:
- [C-1-3] DEBE poder determinar la ubicación con una precisión de 20 metros y la velocidad con una precisión de 0.5 metros por segundo, al menos el 95% del tiempo.
- [C-1-4] DEBE hacer un seguimiento y generar informes de forma simultánea a través de
GnssStatus.Callback
de al menos 8 satélites de una constelación. - DEBE poder hacer un seguimiento simultáneo de al menos 24 satélites de varias constelaciones (p.ej., GPS y al menos una de Glonass, Beidou o Galileo).
- [C-1-5] DEBE informar la generación de tecnología de GNSS a través de la API de prueba "getGnssYearOfHardware".
- [SR] Sigue proporcionando resultados de ubicación normales de GPS/GNSS durante una llamada de emergencia.
- [SR] Informa las mediciones del GNSS de todas las constelaciones rastreadas (como se informa en los mensajes de GnssStatus), con la excepción de SBAS.
- [SR] Informe de AGC y frecuencia de la medición de GNSS.
- [SR] Informa todas las estimaciones de precisión (incluidos el rumbo, la velocidad y la precisión vertical) como parte de cada ubicación GPS.
- [SR] Se RECOMIENDA ENCARECIDAMENTE cumplir con la mayor cantidad posible de requisitos obligatorios adicionales para los dispositivos que informan el año "2016" o "2017" a través de la API de Test
LocationManager.getGnssYearOfHardware()
.
Si las implementaciones de dispositivos incluyen un receptor de GPS/GNSS y reportan la capacidad a las aplicaciones a través de la marca de función android.hardware.location.gps
, y la API de prueba LocationManager.getGnssYearOfHardware()
informa el año "2016" o posterior, deben cumplir con lo siguiente:
- [C-2-1] DEBE informar las mediciones de GPS tan pronto como se encuentren, incluso si aún no se informó una ubicación calculada a partir de GPS/GNSS.
- [C-2-2] DEBE informar las seudoranges y las tasas de seudoranges del GPS que, en condiciones de cielo abierto después de determinar la ubicación, mientras el dispositivo está estacionario o se mueve con una aceleración inferior a 0.2 metros por segundo al cuadrado, son suficientes para calcular la posición con una precisión de 20 metros y la velocidad con una precisión de 0.2 metros por segundo, al menos el 95% del tiempo.
Si las implementaciones de dispositivos incluyen un receptor de GPS/GNSS y reportan la capacidad a las aplicaciones a través de la marca de función android.hardware.location.gps
, y la API de prueba LocationManager.getGnssYearOfHardware()
informa el año "2017" o posterior, deben cumplir con lo siguiente:
- [C-3-1] DEBE seguir proporcionando resultados de ubicación normales del GPS/GNSS durante una llamada de emergencia.
- [C-3-2] DEBE informar las mediciones del GNSS de todas las constelaciones rastreadas (como se informa en los mensajes de GnssStatus), excepto SBAS.
- [C-3-3] Se DEBE informar el AGC y la frecuencia de la medición del GNSS.
- [C-3-4] DEBE informar todas las estimaciones de precisión (incluidos el rumbo, la velocidad y la precisión vertical) como parte de cada ubicación GPS.
7.3.4. Giroscopio
Implementaciones del dispositivo:
- DEBE incluir un giroscopio (sensor de cambio angular).
- NO DEBE incluir un sensor de giroscopio, a menos que también se incluya un acelerómetro de 3 ejes.
Si las implementaciones de dispositivos incluyen un giroscopio, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE poder informar eventos con una frecuencia de al menos 50 Hz.
- [C-1-2] DEBE implementar el sensor
TYPE_GYROSCOPE
y TAMBIÉN DEBE implementar el sensorTYPE_GYROSCOPE_UNCALIBRATED
. - [C-1-3] DEBE poder medir cambios de orientación de hasta 1,000 grados por segundo.
- [C-1-4] DEBE tener una resolución de 12 bits o más y DEBERÍA tener una resolución de 16 bits o más.
- [C-1-5] DEBE tener compensación de temperatura.
- [C-1-6] DEBE calibrarse y compensarse mientras se usa, y conservar los parámetros de compensación entre los reinicios del dispositivo.
- [C-1-7] DEBE tener una varianza no mayor que 1e-7 rad² / s² por Hz (varianza por Hz o rad² / s). La varianza puede variar con la tasa de muestreo, pero DEBE estar restringida por este valor. En otras palabras, si mides la varianza del giroscopio a una frecuencia de muestreo de 1 Hz, NO DEBERÍA ser mayor que 1e-7 rad²/s².
- [SR] SE RECOMIENDA ENCARECIDAMENTE que los dispositivos Android existentes y nuevos implementen el sensor
SENSOR_TYPE_GYROSCOPE_UNCALIBRATED
. - [SR] Se RECOMIENDA ENCARECIDAMENTE que el error de calibración sea inferior a 0.01 rad/s cuando el dispositivo está estacionario a temperatura ambiente.
- DEBE informar eventos con una frecuencia de hasta 200 Hz como mínimo.
Si las implementaciones de dispositivos incluyen un giroscopio, un sensor de acelerómetro y un sensor de magnetómetro, deben cumplir con los siguientes requisitos:
- [C-2-1] DEBE implementar un sensor compuesto
TYPE_ROTATION_VECTOR
.
Si las implementaciones de dispositivos incluyen un giroscopio y un sensor de acelerómetro, deben cumplir con lo siguiente:
- [C-3-1] DEBE implementar los sensores compuestos
TYPE_GRAVITY
yTYPE_LINEAR_ACCELERATION
. - [SR] SE RECOMIENDA ENCARECIDAMENTE que los dispositivos Android existentes y nuevos implementen el sensor
TYPE_GAME_ROTATION_VECTOR
. - DEBE implementar el sensor compuesto
TYPE_GAME_ROTATION_VECTOR
.
7.3.5. Barómetro
- Las implementaciones de dispositivos DEBEN incluir un barómetro (sensor de presión atmosférica).
Si las implementaciones de dispositivos incluyen un barómetro, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE implementar y registrar el sensor
TYPE_PRESSURE
. - [C-1-2] DEBE poder entregar eventos a 5 Hz o más.
- [C-1-3] DEBE tener compensación de temperatura.
- [SR] SE RECOMIENDA ENCARECIDAMENTE que se puedan registrar mediciones de presión en el rango de 300 hPa a 1,100 hPa.
- DEBE tener una precisión absoluta de 1 hPa.
- DEBE tener una precisión relativa de 0.12 hPa en un rango de 20 hPa (equivalente a una precisión de ~1 m en un cambio de ~200 m a nivel del mar).
7.3.6. Termómetro
Las implementaciones de dispositivos PUEDEN incluir un termómetro ambiental (sensor de temperatura). PUEDE incluir un sensor de temperatura de la CPU, pero NO DEBE hacerlo.
Si las implementaciones de dispositivos incluyen un termómetro ambiental (sensor de temperatura), deben cumplir con lo siguiente:
- [C-1-1] Se DEBE definir como
SENSOR_TYPE_AMBIENT_TEMPERATURE
y DEBE medir la temperatura ambiente (de la habitación o la cabina del vehículo) desde donde el usuario interactúa con el dispositivo en grados Celsius. - [C-1-2] SE DEBE definir como
SENSOR_TYPE_TEMPERATURE
. - [C-1-3] DEBE medir la temperatura de la CPU del dispositivo.
- [C-1-4] NO DEBE medir ninguna otra temperatura.
Ten en cuenta que el tipo de sensor SENSOR_TYPE_TEMPERATURE
quedó en desuso en Android 4.0.
7.3.7. Fotómetro
- Las implementaciones de dispositivos PUEDEN incluir un fotómetro (sensor de luz ambiente).
7.3.8. Sensor de proximidad
- Las implementaciones de dispositivos PUEDEN incluir un sensor de proximidad.
Si las implementaciones de dispositivos incluyen un sensor de proximidad, deben cumplir con lo siguiente:
- [C-1-1] DEBE medir la proximidad de un objeto en la misma dirección que la pantalla. Es decir, el sensor de proximidad DEBE estar orientado para detectar objetos cerca de la pantalla, ya que la intención principal de este tipo de sensor es detectar un teléfono que está usando el usuario. Si las implementaciones de dispositivos incluyen un sensor de proximidad con cualquier otra orientación, NO DEBE ser accesible a través de esta API.
- [C-1-2] DEBE tener 1 bit de precisión o más.
7.3.9. Sensores de alta fidelidad
Si las implementaciones de dispositivos incluyen un conjunto de sensores de mayor calidad, como se define en esta sección, y los ponen a disposición de las apps de terceros, deben cumplir con lo siguiente:
- [C-1-1] DEBE identificar la capacidad a través de la marca de función
android.hardware.sensor.hifi_sensors
.
Si las implementaciones de dispositivos declaran android.hardware.sensor.hifi_sensors
, deben cumplir con lo siguiente:
-
[C-2-1] DEBE tener un sensor
TYPE_ACCELEROMETER
que cumpla con los siguientes requisitos:- DEBE tener un rango de medición de al menos -8 g y +8 g.
- DEBE tener una resolución de medición de al menos 1,024 LSB/G.
- DEBE tener una frecuencia de medición mínima de 12.5 Hz o menos.
- DEBE tener una frecuencia de medición máxima de 400 Hz o más.
- DEBE tener un ruido de medición no superior a 400 uG/√Hz.
- DEBE implementar una forma de este sensor que no active el dispositivo y que tenga una capacidad de almacenamiento en búfer de al menos 3,000 eventos del sensor.
- DEBE tener un consumo de energía por lotes no superior a 3 mW.
- DEBE tener una estabilidad del sesgo de ruido estacionario de <15 μg/√Hz a partir de un conjunto de datos estáticos de 24 h.
- DEBE tener un cambio de sesgo en comparación con la temperatura de ≤ +/- 1 mg / °C.
- DEBE tener una no linealidad de la línea de mejor ajuste ≤ 0.5% y un cambio de sensibilidad en función de la temperatura ≤ 0.03%/C°.
- DEBE tener un espectro de ruido blanco para garantizar la calificación adecuada de la integridad del ruido del sensor.
-
[C-2-2] DEBE tener un
TYPE_ACCELEROMETER_UNCALIBRATED
con los mismos requisitos de calidad queTYPE_ACCELEROMETER
. -
[C-2-3] DEBE tener un sensor
TYPE_GYROSCOPE
que cumpla con los siguientes requisitos:- DEBE tener un rango de medición de al menos -1,000 y +1,000 DPS.
- DEBE tener una resolución de medición de al menos 16 LSB/dps.
- DEBE tener una frecuencia de medición mínima de 12.5 Hz o menos.
- DEBE tener una frecuencia de medición máxima de 400 Hz o más.
- DEBE tener un ruido de medición no superior a 0.014°/s/√Hz.
- DEBE tener una estabilidad del sesgo estacionario de < 0.0002 °/s √Hz a partir de un conjunto de datos estático de 24 horas.
- DEBE tener un cambio de sesgo en comparación con la temperatura de ≤ +/- 0.05 °/ s / °C.
- DEBE tener un cambio de sensibilidad en comparación con la temperatura de ≤ 0.02% / °C.
- DEBE tener una no linealidad de la línea de mejor ajuste de ≤ 0.2%.
- DEBE tener una densidad de ruido ≤ 0.007 °/s/√Hz.
- DEBE tener un espectro de ruido blanco para garantizar la calificación adecuada de la integridad del ruido del sensor.
- DEBE tener un error de calibración inferior a 0.002 rad/s en el rango de temperatura de 10 a 40 °C cuando el dispositivo está estacionario.
-
[C-2-4] DEBE tener un
TYPE_GYROSCOPE_UNCALIBRATED
con los mismos requisitos de calidad queTYPE_GYROSCOPE
. - [C-2-5] DEBE tener un sensor
TYPE_GEOMAGNETIC_FIELD
que cumpla con los siguientes requisitos:- DEBE tener un rango de medición de al menos -900 a +900 µT.
- DEBE tener una resolución de medición de al menos 5 LSB/uT.
- DEBE tener una frecuencia de medición mínima de 5 Hz o menos.
- DEBE tener una frecuencia de medición máxima de 50 Hz o más.
- DEBE tener un ruido de medición no superior a 0.5 uT.
- [C-2-6] DEBE tener un
TYPE_MAGNETIC_FIELD_UNCALIBRATED
con los mismos requisitos de calidad queTYPE_GEOMAGNETIC_FIELD
y, además, lo siguiente:- DEBE implementar una forma de este sensor que no active el dispositivo, con una capacidad de almacenamiento en búfer de al menos 600 eventos del sensor.
- DEBE tener un espectro de ruido blanco para garantizar la calificación adecuada de la integridad del ruido del sensor.
- [C-2-7] DEBE tener un sensor
TYPE_PRESSURE
que cumpla con los siguientes requisitos:- DEBE tener un rango de medición de al menos 300 a 1,100 hPa.
- DEBE tener una resolución de medición de al menos 80 LSB/hPa.
- DEBE tener una frecuencia de medición mínima de 1 Hz o menos.
- DEBE tener una frecuencia de medición máxima de 10 Hz o más.
- DEBE tener un ruido de medición no superior a 2 Pa/√Hz.
- DEBE implementar una forma de este sensor que no active el dispositivo y que tenga una capacidad de almacenamiento en búfer de al menos 300 eventos del sensor.
- DEBE tener un consumo de energía por lotes no superior a 2 mW.
- [C-2-8] DEBE tener un sensor
TYPE_GAME_ROTATION_VECTOR
que cumpla con los siguientes requisitos:- DEBE implementar una forma de este sensor que no active el dispositivo y que tenga una capacidad de almacenamiento en búfer de al menos 300 eventos del sensor.
- DEBE tener un consumo de energía por lotes no superior a 4 mW.
- [C-2-9] DEBE tener un sensor
TYPE_SIGNIFICANT_MOTION
que cumpla con los siguientes requisitos:- DEBE tener un consumo de energía no superior a 0.5 mW cuando el dispositivo está estático y 1.5 mW cuando el dispositivo está en movimiento.
- [C-2-10] DEBE tener un sensor
TYPE_STEP_DETECTOR
que cumpla con los siguientes requisitos:- DEBE implementar una forma de este sensor que no active el dispositivo y que tenga una capacidad de almacenamiento en búfer de al menos 100 eventos del sensor.
- DEBE tener un consumo de energía no superior a 0.5 mW cuando el dispositivo está estático y 1.5 mW cuando el dispositivo está en movimiento.
- DEBE tener un consumo de energía por lotes no superior a 4 mW.
- [C-2-11] DEBE tener un sensor
TYPE_STEP_COUNTER
que cumpla con los siguientes requisitos:- DEBE tener un consumo de energía no superior a 0.5 mW cuando el dispositivo está estático y 1.5 mW cuando el dispositivo está en movimiento.
- [C-2-12] DEBE tener un sensor
TILT_DETECTOR
que cumpla con los siguientes requisitos:- DEBE tener un consumo de energía no superior a 0.5 mW cuando el dispositivo está estático y 1.5 mW cuando el dispositivo está en movimiento.
- [C-2-13] La marca de tiempo del evento físico que registran el acelerómetro, el sensor de giroscopio y el magnetómetro DEBE tener una diferencia máxima de 2.5 milisegundos entre sí.
- [C-2-14] DEBE tener marcas de tiempo de eventos del sensor de giroscopio en la misma base de tiempo que el subsistema de la cámara y con un error de 1 milisegundo.
- [C-2-15] DEBE entregar muestras a las aplicaciones en un plazo de 5 milisegundos desde el momento en que los datos están disponibles en cualquiera de los sensores físicos mencionados anteriormente para la aplicación.
- [C-2-16] NO DEBE tener un consumo de energía superior a 0.5 mW cuando el dispositivo está estático y 2.0 mW cuando el dispositivo está en movimiento cuando se habilita cualquier combinación de los siguientes sensores:
-
SENSOR_TYPE_SIGNIFICANT_MOTION
-
SENSOR_TYPE_STEP_DETECTOR
-
SENSOR_TYPE_STEP_COUNTER
-
SENSOR_TILT_DETECTORS
-
- [C-2-17] PUEDE tener un sensor de
TYPE_PROXIMITY
, pero, si lo tiene, DEBE tener una capacidad de búfer mínima de 100 eventos del sensor.
Ten en cuenta que todos los requisitos de consumo de energía de esta sección no incluyen el consumo de energía del procesador de aplicaciones. Incluye la energía que consume toda la cadena de sensores: el sensor, los circuitos de soporte, cualquier sistema de procesamiento de sensores dedicado, etcétera.
Si las implementaciones de dispositivos incluyen compatibilidad directa con sensores, deben cumplir con los siguientes requisitos:
- [C-3-1] DEBE declarar correctamente la compatibilidad con los tipos de canales directos y el nivel de tasas de informes directos a través de las APIs de
isDirectChannelTypeSupported
ygetHighestDirectReportRateLevel
. - [C-3-2] DEBE admitir al menos uno de los dos tipos de canales directos del sensor para todos los sensores que declaren compatibilidad con el canal directo del sensor.
-
TYPE_HARDWARE_BUFFER
-
TYPE_MEMORY_FILE
- DEBE admitir el registro de eventos a través del canal directo del sensor para el sensor principal (variante no de activación) de los siguientes tipos:
-
TYPE_ACCELEROMETER
-
TYPE_ACCELEROMETER_UNCALIBRATED
-
TYPE_GYROSCOPE
-
TYPE_GYROSCOPE_UNCALIBRATED
-
TYPE_MAGNETIC_FIELD
-
TYPE_MAGNETIC_FIELD_UNCALIBRATED
7.3.10. Sensor de huellas dactilares
Si las implementaciones de dispositivos incluyen una pantalla de bloqueo segura, deben cumplir con los siguientes requisitos:
- DEBE incluir un sensor de huellas dactilares.
Si las implementaciones de dispositivos incluyen un sensor de huellas dactilares y lo ponen a disposición de las apps de terceros, deben cumplir con lo siguiente:
- [C-1-1] DEBE declarar la compatibilidad con la función
android.hardware.fingerprint
. - [C-1-2] DEBE implementar por completo la API correspondiente, tal como se describe en la documentación del SDK de Android.
- [C-1-3] DEBE tener una tasa de aceptación falsa no superior al 0.002%.
- [C-1-4] DEBE limitar la velocidad de los intentos durante al menos 30 segundos después de cinco intentos fallidos de verificación de huella dactilar.
- [C-1-5] DEBE tener una implementación de almacén de claves respaldado por hardware y realizar la correlación de huellas digitales en un entorno de ejecución confiable (TEE) o en un chip con un canal seguro para el TEE.
- [C-1-6] DEBE tener todos los datos de huellas digitales identificables encriptados y autenticados de forma criptográfica para que no se puedan adquirir, leer ni alterar fuera del entorno de ejecución confiable (TEE), como se documenta en los lineamientos de implementación del sitio del Proyecto de código abierto de Android.
- [C-1-7] DEBE impedir que se agregue una huella dactilar sin establecer primero una cadena de confianza, lo que implica que el usuario debe confirmar una credencial de dispositivo existente o agregar una nueva (PIN, patrón o contraseña) protegida por el TEE. La implementación del Proyecto de código abierto de Android proporciona el mecanismo en el framework para hacerlo.
- [C-1-8] NO DEBE habilitar que las aplicaciones de terceros distingan entre huellas digitales individuales.
- [C-1-9] DEBE respetar el parámetro DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT.
- [C-1-10] DEBE, cuando se actualiza desde una versión anterior a Android 6.0, migrar de forma segura los datos de huellas digitales para cumplir con los requisitos anteriores o quitarlos.
- [SR] SE RECOMIENDA ENCARECIDAMENTE tener una tasa de rechazo falsa inferior al 10%, según se mide en el dispositivo.
- [SR] SE RECOMIENDA ENCARECIDAMENTE tener una latencia inferior a 1 segundo, medida desde que se toca el sensor de huellas dactilares hasta que se desbloquea la pantalla, para un dedo registrado.
- DEBE usar el ícono de huella digital de Android que se proporciona en el Proyecto de código abierto de Android.
7.3.11. Sensores exclusivos de Android Automotive
Los sensores específicos para automóviles se definen en android.car.CarSensorManager API
.
7.3.11.1. Marcha actual
Consulta la Sección 2.5.1 para conocer los requisitos específicos de cada dispositivo.
7.3.11.2. Modo noche día
Consulta la Sección 2.5.1 para conocer los requisitos específicos de cada dispositivo.
7.3.11.3. Estado de conducción
Consulta la Sección 2.5.1 para conocer los requisitos específicos de cada dispositivo.
7.3.11.4. Velocidad de las ruedas
Consulta la Sección 2.5.1 para conocer los requisitos específicos de cada dispositivo.
7.3.12. Sensor de posición
Implementaciones del dispositivo:
- Es POSIBLE que admita el sensor de posición con 6 grados de libertad.
Si las implementaciones de dispositivos admiten el sensor de posición con 6 grados de libertad, deben cumplir con lo siguiente:
- [C-1-1] DEBE implementar y registrar el sensor
TYPE_POSE_6DOF
. - [C-1-2] DEBE ser más preciso que el vector de rotación por sí solo.
7.4. Conectividad de datos
7.4.1. Telefonía
El término "telefonía" que se usa en las APIs de Android y en este documento se refiere específicamente al hardware relacionado con la realización de llamadas de voz y el envío de mensajes SMS a través de una red GSM o CDMA. Si bien estas llamadas de voz pueden o no conmutarse por paquetes, para Android se consideran independientes de cualquier conectividad de datos que se pueda implementar con la misma red. En otras palabras, la funcionalidad y las APIs de "telefonía" de Android se refieren específicamente a las llamadas de voz y los SMS. Por ejemplo, las implementaciones de dispositivos que no pueden realizar llamadas ni enviar o recibir mensajes SMS no se consideran dispositivos telefónicos, independientemente de si usan una red celular para la conectividad de datos.
- Android SE PUEDE usar en dispositivos que no incluyen hardware de telefonía. Es decir, Android es compatible con dispositivos que no son teléfonos.
Si las implementaciones de dispositivos incluyen telefonía GSM o CDMA, deben cumplir con lo siguiente:
- [C-1-1] DEBE declarar la marca de función
android.hardware.telephony
y otras marcas de subfunciones según la tecnología. - [C-1-2] DEBE implementar la compatibilidad total con la API para esa tecnología.
Si las implementaciones de dispositivos no incluyen hardware de telefonía, deben cumplir con lo siguiente:
- [C-2-1] DEBE implementar las APIs completas como no-ops.
7.4.1.1. Compatibilidad con el bloqueo de números
Si las implementaciones de dispositivos informan el android.hardware.telephony feature
, significa que:
- [C-1-1] DEBE incluir compatibilidad con el bloqueo de números
- [C-1-2] DEBE implementar por completo
BlockedNumberContract
y la API correspondiente, como se describe en la documentación del SDK. - [C-1-3] DEBE bloquear todas las llamadas y los mensajes de un número de teléfono en "BlockedNumberProvider" sin ninguna interacción con las apps. La única excepción es cuando se levanta temporalmente el bloqueo de números, como se describe en la documentación del SDK.
- [C-1-4] NO DEBE escribir en el proveedor de registros de llamadas de la plataforma para una llamada bloqueada.
- [C-1-5] NO DEBE escribir en el proveedor de telefonía para un mensaje bloqueado.
- [C-1-6] DEBE implementar una IU de administración de números bloqueados, que se abre con el intent que devuelve el método
TelecomManager.createManageBlockedNumbersIntent()
. - [C-1-7] NO DEBE permitir que los usuarios secundarios vean o editen los números bloqueados en el dispositivo, ya que la plataforma de Android supone que el usuario principal tiene control total de los servicios de telefonía, una sola instancia, en el dispositivo. TODA la IU relacionada con el bloqueo DEBE ocultarse para los usuarios secundarios, y la lista de bloqueo DEBE seguir respetándose.
- DEBE migrar los números bloqueados al proveedor cuando un dispositivo se actualiza a Android 7.0.
7.4.2. IEEE 802.11 (Wi-Fi)
Implementaciones del dispositivo:
- DEBE incluir compatibilidad con una o más formas de 802.11.
Si las implementaciones de dispositivos incluyen compatibilidad con 802.11 y exponen la funcionalidad a una aplicación de terceros, deben cumplir con lo siguiente:
- [C-1-1] DEBE implementar la API de Android correspondiente.
- [C-1-2] DEBE informar el parámetro de configuración de la función de hardware
android.hardware.wifi
. - [C-1-3] DEBE implementar la API de multidifusión como se describe en la documentación del SDK.
- [C-1-4] DEBE admitir DNS multicast (mDNS) y NO DEBE filtrar paquetes mDNS (224.0.0.251) en ningún momento de la operación, incluidos los siguientes:
- Incluso cuando la pantalla no está en un estado activo.
- Para las implementaciones de dispositivos de televisión Android, incluso cuando se encuentran en estados de energía en espera.
- DEBE aleatorizar la dirección MAC de origen y el número de secuencia de los fotogramas de solicitud de sondeo, una vez al comienzo de cada análisis, mientras la STA está desconectada.
- Cada grupo de tramas de solicitud de sondeo que componen un análisis debe usar una dirección MAC coherente (NO se debe aleatorizar la dirección MAC a mitad de un análisis).
- El número de secuencia de la solicitud de sondeo debe iterarse de forma normal (secuencial) entre las solicitudes de sondeo en un análisis.
- El número de secuencia de la solicitud de sondeo debe ser aleatorio entre la última solicitud de sondeo de un análisis y la primera solicitud de sondeo del siguiente análisis.
- SOLO DEBE permitir los siguientes elementos de información en los fotogramas de solicitud de sondeo mientras la STA está desconectada:
- Conjunto de parámetros de SSID (0)
- Conjunto de parámetros de DS (3)
7.4.2.1. Wi-Fi directo
Implementaciones del dispositivo:
- DEBE incluir compatibilidad con Wi-Fi Direct (Wi-Fi entre pares).
Si las implementaciones de dispositivos incluyen compatibilidad con Wi-Fi Direct, deben cumplir con lo siguiente:
- [C-1-1] DEBE implementar la API de Android correspondiente como se describe en la documentación del SDK.
- [C-1-2] DEBE informar la función de hardware
android.hardware.wifi.direct
. - [C-1-3] DEBE admitir el funcionamiento normal de Wi-Fi.
- DEBE admitir operaciones de Wi-Fi y Wi-Fi Direct de forma simultánea.
7.4.2.2. Configuración de Wi-Fi Tunneled Direct Link
Implementaciones del dispositivo:
- DEBE incluir compatibilidad con la configuración de vínculo directo con túnel Wi-Fi (TDLS), como se describe en la documentación del SDK de Android.
Si las implementaciones de dispositivos incluyen compatibilidad con TDLS y la API de WifiManager habilita TDLS, se cumplen las siguientes condiciones:
- [C-1-1] Se DEBE declarar la compatibilidad con TDLS a través de
WifiManager.isTdlsSupported
. - DEBE usar TDLS solo cuando sea posible Y beneficioso.
- DEBE tener alguna heurística y NO usar TDLS cuando su rendimiento podría ser peor que el de la conexión a través del punto de acceso Wi-Fi.
7.4.2.3. Reconocimiento de Wi-Fi
Implementaciones del dispositivo:
- DEBE incluir compatibilidad con Reconocimiento de Wi-Fi.
Si las implementaciones de dispositivos incluyen compatibilidad con Wi-Fi Aware y exponen la funcionalidad a apps de terceros, deben cumplir con lo siguiente:
- [C-1-1] DEBE implementar las APIs de
WifiAwareManager
como se describe en la documentación del SDK. - [C-1-2] DEBE declarar la marca de función
android.hardware.wifi.aware
. - [C-1-3] DEBE admitir operaciones de Wi-Fi y Wi-Fi Aware de forma simultánea.
- [C-1-4] DEBE aleatorizar la dirección de la interfaz de administración de Wi-Fi Aware en intervalos no superiores a 30 minutos y cada vez que se habilite Wi-Fi Aware.
7.4.2.4. Wi-Fi Passpoint
Implementaciones del dispositivo:
- DEBE incluir compatibilidad con Wi-Fi Passpoint.
Si las implementaciones de dispositivos incluyen compatibilidad con Wi-Fi Passpoint, deben cumplir con los siguientes requisitos:
- [C-1-1] Se DEBEN implementar las APIs de
WifiManager
relacionadas con Passpoint, como se describe en la documentación del SDK. - [C-1-2] DEBE admitir el estándar IEEE 802.11u, específicamente en relación con la detección y selección de redes, como el servicio de publicidad genérico (GAS) y el protocolo de consulta de redes de acceso (ANQP).
Por el contrario, si las implementaciones de dispositivos no incluyen compatibilidad con Wi-Fi Passpoint, ocurrirá lo siguiente:
- [C-2-1] La implementación de las APIs de
WifiManager
relacionadas con Passpoint DEBE arrojar unUnsupportedOperationException
.
7.4.3. Bluetooth
Si las implementaciones de dispositivos admiten el perfil de audio Bluetooth, deben cumplir con lo siguiente:
- DEBE admitir códecs de audio avanzados y códecs de audio Bluetooth (p.ej., LDAC).
Si las implementaciones de dispositivos declaran la función android.hardware.vr.high_performance
, deben hacer lo siguiente:
- [C-1-1] DEBE admitir Bluetooth 4.2 y la extensión de longitud de datos de Bluetooth LE.
Android incluye compatibilidad con Bluetooth y Bluetooth de bajo consumo.
Si las implementaciones de dispositivos incluyen compatibilidad con Bluetooth y Bluetooth de bajo consumo, deben cumplir con lo siguiente:
- [C-2-1] DEBE declarar las funciones de la plataforma pertinentes (
android.hardware.bluetooth
yandroid.hardware.bluetooth_le
, respectivamente) y, luego, implementar las APIs de la plataforma. - DEBE implementar los perfiles de Bluetooth pertinentes, como A2DP, AVCP, OBEX, etc., según corresponda al dispositivo.
Si las implementaciones de dispositivos incluyen compatibilidad con Bluetooth de bajo consumo, deben cumplir con lo siguiente:
- [C-3-1] DEBE declarar la función de hardware
android.hardware.bluetooth_le
. - [C-3-2] DEBE habilitar las APIs de Bluetooth basadas en GATT (perfil de atributo genérico) como se describe en la documentación del SDK y android.bluetooth.
- [C-3-3] DEBE informar el valor correcto para
BluetoothAdapter.isOffloadedFilteringSupported()
para indicar si se implementó la lógica de filtrado para las clases de la API de ScanFilter. - [C-3-4] DEBE informar el valor correcto para
BluetoothAdapter.isMultipleAdvertisementSupported()
para indicar si se admite la publicidad de bajo consumo. - DEBE admitir la descarga de la lógica de filtrado en el chipset de Bluetooth cuando se implementa la API de ScanFilter.
- DEBE admitir la descarga del análisis por lotes en el chipset de Bluetooth.
-
DEBE admitir varios anuncios con al menos 4 espacios.
-
[SR] SE RECOMIENDA ENCARECIDAMENTE implementar un tiempo de espera de dirección privada resoluble (RPA) de no más de 15 minutos y rotar la dirección al agotarse el tiempo de espera para proteger la privacidad del usuario.
7.4.4. Comunicaciones de campo cercano
Implementaciones del dispositivo:
- DEBE incluir un transceptor y hardware relacionado para la comunicación de campo cercano (NFC).
- [C-0-1] DEBE implementar las APIs de
android.nfc.NdefMessage
yandroid.nfc.NdefRecord
, incluso si no incluyen compatibilidad con NFC o no declaran la funciónandroid.hardware.nfc
, ya que las clases representan un formato de representación de datos independiente del protocolo.
Si las implementaciones de dispositivos incluyen hardware NFC y planean ponerlo a disposición de apps de terceros, deben hacer lo siguiente:
- [C-1-1] DEBE informar la función
android.hardware.nfc
desde el métodoandroid.content.pm.PackageManager.hasSystemFeature()
. - DEBE poder leer y escribir mensajes NDEF a través de los siguientes estándares de NFC:
- [C-1-2] DEBE poder actuar como lector/grabador de NFC Forum (según se define en la especificación técnica de NFC Forum NFCForum-TS-DigitalProtocol-1.0) a través de los siguientes estándares de NFC:
- NfcA (ISO14443-3A)
- NfcB (ISO14443-3B)
- NfcF (JIS X 6319-4)
- IsoDep (ISO 14443-4)
- Tipos de etiquetas 1, 2, 3, 4 y 5 del NFC Forum (definidos por el NFC Forum)
-
[SR] SE RECOMIENDA ENCARECIDAMENTE que sea capaz de leer y escribir mensajes NDEF, así como datos sin procesar a través de los siguientes estándares de NFC. Ten en cuenta que, si bien los estándares de NFC se indican como ALTAMENTE RECOMENDADOS, se prevé que la Definición de compatibilidad para una versión futura los cambie a OBLIGATORIOS. Estos estándares son opcionales en esta versión, pero serán obligatorios en versiones futuras. Se recomienda encarecidamente que los dispositivos existentes y nuevos que ejecuten esta versión de Android cumplan con estos requisitos ahora para que puedan actualizarse a las versiones futuras de la plataforma.
-
[C-1-3] DEBE poder transmitir y recibir datos a través de los siguientes estándares y protocolos peer-to-peer:
- ISO 18092
- LLCP 1.2 (definido por el Foro NFC)
- SDP 1.0 (definido por el NFC Forum)
- Protocolo de envío de NDEF
- SNEP 1.0 (definido por el NFC Forum)
- [C-1-4] DEBE incluir compatibilidad con Android Beam y DEBE habilitar Android Beam de forma predeterminada.
- [C-1-5] DEBE poder enviar y recibir contenido con Android Beam cuando esta función esté habilitada o cuando se active otro modo P2P de NFC propietario.
- [C-1-6] Se DEBE implementar el servidor predeterminado de SNEP. Los mensajes NDEF válidos que recibe el servidor SNEP predeterminado SE DEBEN enviar a las aplicaciones con el intent
android.nfc.ACTION_NDEF_DISCOVERED
. Inhabilitar Android Beam en la configuración NO DEBE inhabilitar el envío del mensaje NDEF entrante. - [C-1-7] DEBE respetar la intención
android.settings.NFCSHARING_SETTINGS
para mostrar la configuración de uso compartido por NFC. - [C-1-8] Se DEBE implementar el servidor de NPP. Los mensajes que recibe el servidor de NPP DEBEN procesarse de la misma manera que el servidor predeterminado de SNEP.
- [C-1-9] DEBE implementar un cliente de SNEP y tratar de enviar NDEF P2P saliente al servidor de SNEP predeterminado cuando Android Beam esté habilitado. Si no se encuentra ningún servidor SNEP predeterminado, el cliente DEBE intentar enviar la solicitud a un servidor NPP.
- [C-1-10] DEBE permitir que las actividades en primer plano establezcan el mensaje NDEF P2P saliente con
android.nfc.NfcAdapter.setNdefPushMessage
,android.nfc.NfcAdapter.setNdefPushMessageCallback
yandroid.nfc.NfcAdapter.enableForegroundNdefPush
. - DEBE usar un gesto o una confirmación en pantalla, como "Toca para Beam", antes de enviar mensajes NDEF P2P salientes.
- [C-1-11] DEBE admitir la transferencia de conexión NFC a Bluetooth cuando el dispositivo admita el perfil de inserción de objetos Bluetooth.
- [C-1-12] DEBE admitir la transferencia de conexión a Bluetooth cuando se usa
android.nfc.NfcAdapter.setBeamPushUris
, para lo cual debe implementar las especificaciones “Connection Handover version 1.2” y “Bluetooth Secure Simple Pairing Using NFC version 1.0” del NFC Forum. Esta implementación DEBE implementar el servicio LLCP de transferencia con el nombre de servicio “urn:nfc:sn:handover” para intercambiar los registros de solicitud o selección de transferencia a través de NFC, y DEBE usar el perfil de transferencia de objetos Bluetooth para la transferencia de datos Bluetooth real. Por motivos heredados (para seguir siendo compatible con dispositivos Android 4.1), la implementación AÚN DEBE aceptar solicitudes GET de SNEP para intercambiar los registros de solicitud o selección de transferencia a través de NFC. Sin embargo, una implementación NO DEBE enviar solicitudes GET de SNEP para realizar la transferencia de conexión. - [C-1-13] DEBE sondear todas las tecnologías admitidas mientras está en el modo de detección de NFC.
- DEBE estar en modo de detección de NFC mientras el dispositivo está activo con la pantalla activa y la pantalla de bloqueo desbloqueada.
- DEBE poder leer el código de barras y la URL (si están codificados) de los productos Thinfilm NFC Barcode.
(Ten en cuenta que los vínculos disponibles públicamente no están disponibles para las especificaciones de JIS, ISO y NFC Forum citadas anteriormente).
Android incluye compatibilidad con el modo de emulación de tarjeta de host (HCE) de NFC.
Si las implementaciones de dispositivos incluyen un chipset de controlador NFC capaz de HCE (para NfcA o NfcB) y admiten el enrutamiento del ID de aplicación (AID), deben cumplir con lo siguiente:
- [C-2-1] DEBE informar la constante de función
android.hardware.nfc.hce
. - [C-2-2] DEBE admitir las APIs de HCE de NFC según se definen en el SDK de Android.
Si las implementaciones de dispositivos incluyen un chipset de controlador NFC capaz de HCE para NfcF y, además, implementan la función para aplicaciones de terceros, deben cumplir con lo siguiente:
- [C-3-1] DEBE informar la constante de función
android.hardware.nfc.hcef
. - [C-3-2] DEBE implementar las APIs de emulación de tarjetas NfcF según se definen en el SDK de Android.
Si las implementaciones de dispositivos incluyen compatibilidad general con NFC, como se describe en esta sección, y admiten tecnologías MIFARE (MIFARE Classic, MIFARE Ultralight, NDEF en MIFARE Classic) en el rol de lector/grabador, deben cumplir con lo siguiente:
- [C-4-1] DEBE implementar las APIs de Android correspondientes según lo documenta el SDK de Android.
- [C-4-2] DEBE informar la función
com.nxp.mifare
desde el métodoandroid.content.pm.PackageManager.hasSystemFeature
(). Ten en cuenta que esta no es una función estándar de Android y, como tal, no aparece como una constante en la claseandroid.content.pm.PackageManager
.
7.4.5. Capacidad de red mínima
Implementaciones del dispositivo:
- [C-0-1] DEBE incluir compatibilidad con una o más formas de redes de datos. Específicamente, las implementaciones de dispositivos DEBEN incluir compatibilidad con al menos un estándar de datos capaz de alcanzar los 200 Kbit/s o más. Entre los ejemplos de tecnologías que satisfacen este requisito, se incluyen EDGE, HSPA, EV-DO, 802.11g, Ethernet, PAN de Bluetooth, etcétera.
- [C-0-2] DEBE incluir una pila de redes IPv6 y admitir la comunicación IPv6 con las APIs administradas, como
java.net.Socket
yjava.net.URLConnection
, así como las APIs nativas, como los socketsAF_INET6
. - [C-0-3] DEBE habilitar IPv6 de forma predeterminada.
- DEBE garantizar que la comunicación IPv6 sea tan confiable como la IPv4, por ejemplo.
- [C-0-4] DEBE mantener la conectividad IPv6 en el modo de suspensión.
- [C-0-5] La limitación de velocidad NO DEBE provocar que el dispositivo pierda la conectividad IPv6 en ninguna red compatible con IPv6 que use tiempos de vida de RA de al menos 180 segundos.
- También DEBE incluir compatibilidad con al menos un estándar de datos inalámbricos común, como 802.11 (Wi-Fi), cuando un estándar de redes físicas (como Ethernet) sea la conexión de datos principal.
- PUEDE implementar más de una forma de conectividad de datos.
El nivel requerido de compatibilidad con IPv6 depende del tipo de red, como se indica a continuación:
Si las implementaciones de dispositivos admiten redes Wi-Fi, deben cumplir con lo siguiente:
- [C-1-1] DEBE admitir el funcionamiento de pila doble y solo IPv6 en Wi-Fi.
Si las implementaciones de dispositivos admiten redes Ethernet, deben cumplir con los siguientes requisitos:
- [C-2-1] DEBE admitir el funcionamiento de pila doble en Ethernet.
Si las implementaciones de dispositivos admiten datos móviles, deben cumplir con lo siguiente:
- [C-3-1] DEBE cumplir simultáneamente con estos requisitos en cada red a la que se conecta cuando un dispositivo se conecta simultáneamente a más de una red (p.ej., Wi-Fi y datos móviles).
- DEBE admitir el funcionamiento de IPv6 (solo IPv6 y, posiblemente, pila doble) en datos celulares.
7.4.6. Configuración de sincronización
Implementaciones del dispositivo:
- [C-0-1] DEBE tener la configuración de sincronización automática principal activada de forma predeterminada para que el método
getMasterSyncAutomatically()
devuelva “true”.
7.4.7. Ahorro de datos
Si las implementaciones de dispositivos incluyen una conexión medida, se aplican las siguientes condiciones:
- [SR] SE RECOMIENDA ENCARECIDAMENTE proporcionar el modo de ahorro de datos.
Si las implementaciones de dispositivos proporcionan el modo de ahorro de datos, deben cumplir con lo siguiente:
- [C-1-1] DEBE admitir todas las APIs de la clase
ConnectivityManager
, como se describe en la documentación del SDK - [C-1-2] DEBE proporcionar una interfaz de usuario en la configuración que controle la intención
Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS
, lo que permitirá a los usuarios agregar o quitar aplicaciones de la lista de entidades permitidas.
Si las implementaciones de dispositivos no proporcionan el modo Ahorro de datos, deben hacer lo siguiente:
- [C-2-1] DEBE devolver el valor
RESTRICT_BACKGROUND_STATUS_DISABLED
paraConnectivityManager.getRestrictBackgroundStatus()
- [C-2-2] NO DEBE emitir
ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED
. - [C-2-3] DEBE tener una actividad que controle el intent
Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS
, pero PUEDE implementarlo como una operación no operativa.
7.5. Cámaras
Si las implementaciones de dispositivos incluyen al menos una cámara, deben cumplir con lo siguiente:
- [C-1-1] DEBE declarar la marca de función
android.hardware.camera.any
. - [C-1-2] DEBE ser posible que una aplicación asigne de forma simultánea 3 mapas de bits RGBA_8888 iguales al tamaño de las imágenes que produce el sensor de cámara de mayor resolución del dispositivo, mientras la cámara está abierta para la vista previa básica y la captura de fotos.
7.5.1. Cámara posterior
Una cámara trasera es una cámara ubicada en el lado del dispositivo opuesto a la pantalla, es decir, capta imágenes de escenas en el lado lejano del dispositivo, como una cámara tradicional.
Implementaciones del dispositivo:
- DEBE incluir una cámara posterior.
Si las implementaciones de dispositivos incluyen al menos una cámara trasera, deben cumplir con lo siguiente:
- [C-1-1] DEBE informar los parámetros de configuración
android.hardware.camera
yandroid.hardware.camera.any
. - [C-1-2] DEBE tener una resolución de al menos 2 megapíxeles.
- DEBE tener enfoque automático por hardware o por software implementado en el controlador de la cámara (transparente para el software de la aplicación).
- PUEDE tener hardware de enfoque fijo o EDOF (profundidad de campo extendida).
- PUEDE incluir un flash.
Si la cámara incluye un flash, haz lo siguiente:
- [C-2-1] La lámpara del flash NO DEBE encenderse mientras se haya registrado una instancia de
android.hardware.Camera.PreviewCallback
en una superficie de vista previa de la cámara, a menos que la aplicación haya habilitado explícitamente el flash habilitando los atributosFLASH_MODE_AUTO
oFLASH_MODE_ON
de un objetoCamera.Parameters
. Ten en cuenta que esta restricción no se aplica a la aplicación de cámara integrada en el sistema del dispositivo, sino solo a las aplicaciones de terceros que usanCamera.PreviewCallback
.
7.5.2. Cámara frontal
Una cámara frontal es una cámara ubicada en el mismo lado del dispositivo que la pantalla, es decir, una cámara que se usa normalmente para tomar imágenes del usuario, como para videoconferencias y aplicaciones similares.
Implementaciones del dispositivo:
- PUEDE incluir una cámara frontal.
Si las implementaciones de dispositivos incluyen al menos una cámara frontal, deben cumplir con lo siguiente:
- [C-1-1] DEBE informar los parámetros de configuración
android.hardware.camera.any
yandroid.hardware.camera.front
. - [C-1-2] DEBE tener una resolución de, al menos, VGA (640 x 480 píxeles).
- [C-1-3] NO DEBE usar una cámara frontal como la predeterminada para la API de Camera y NO DEBE configurar la API para que trate una cámara frontal como la cámara posterior predeterminada, incluso si es la única cámara del dispositivo.
- [C-1-4] La vista previa de la cámara DEBE duplicarse horizontalmente en relación con la orientación especificada por la aplicación cuando la aplicación actual haya solicitado explícitamente que se rote la pantalla de la cámara a través de una llamada al método
android.hardware.Camera.setDisplayOrientation()
. Por el contrario, la vista previa DEBE duplicarse a lo largo del eje horizontal predeterminado del dispositivo cuando la aplicación actual no solicita de forma explícita que se rote la pantalla de la cámara a través de una llamada al métodoandroid.hardware.Camera.setDisplayOrientation()
. - [C-1-5] NO DEBE reflejar la imagen estática final capturada ni los flujos de video que se devuelven a las devoluciones de llamada de la aplicación o que se confirman en el almacenamiento de medios.
- [C-1-6] DEBE reflejar la imagen que muestra la vista previa de la publicación de la misma manera que el flujo de imágenes de la vista previa de la cámara.
- PUEDE incluir funciones (como enfoque automático, flash, etcétera) disponibles para las cámaras posteriores, según se describe en el artículo 7.5.1.
Si las implementaciones de dispositivos pueden rotarse por el usuario (por ejemplo, automáticamente a través de un acelerómetro o manualmente a través de la entrada del usuario), haz lo siguiente:
- [C-2-1] La vista previa de la cámara DEBE reflejarse horizontalmente en relación con la orientación actual del dispositivo.
7.5.3. Cámara externa
Implementaciones del dispositivo:
- PUEDE incluir compatibilidad con una cámara externa que no necesariamente esté siempre conectada.
Si las implementaciones de dispositivos incluyen compatibilidad con una cámara externa, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE declarar las marcas de funciones de la plataforma
android.hardware.camera.external
yandroid.hardware camera.any
. - [C-1-2] DEBE admitir la clase de video USB (UVC 1.0 o posterior) si la cámara externa se conecta a través del puerto USB.
- DEBE admitir compresiones de video, como MJPEG, para permitir la transferencia de transmisiones sin codificar de alta calidad (es decir, transmisiones de imágenes sin procesar o comprimidas de forma independiente).
- MAY admite varias cámaras.
- PUEDE admitir la codificación de video basada en la cámara.
Si se admite la codificación de video basada en la cámara, haz lo siguiente:
- [C-2-1] La implementación del dispositivo DEBE tener acceso a una transmisión simultánea sin codificar o MJPEG (resolución QVGA o superior).
7.5.4. Comportamiento de la API de Camera
Android incluye dos paquetes de APIs para acceder a la cámara. La API de android.hardware.camera2 más reciente expone el control de la cámara de nivel inferior a la app, incluidos los flujos eficientes de ráfaga o transmisión sin copia y los controles por fotograma de exposición, ganancia, ganancias de balance de blancos, conversión de color, reducción de ruido, nitidez y mucho más.
El paquete de API anterior, android.hardware.Camera
, se marcó como en desuso en Android 5.0, pero debería seguir disponible para que las apps lo usen. Las implementaciones de dispositivos Android DEBEN garantizar la compatibilidad continua con la API, como se describe en esta sección y en el SDK de Android.
Las implementaciones de dispositivos DEBEN implementar los siguientes comportamientos para las APIs relacionadas con la cámara, en todas las cámaras disponibles. Implementaciones del dispositivo:
- [C-0-1] DEBE usar
android.hardware.PixelFormat.YCbCr_420_SP
para los datos de vista previa proporcionados a las devoluciones de llamada de la aplicación cuando una aplicación nunca llamó aandroid.hardware.Camera.Parameters.setPreviewFormat(int)
. - [C-0-2] DEBE estar en formato de codificación NV21 cuando una aplicación registra una instancia de
android.hardware.Camera.PreviewCallback
y el sistema llama al métodoonPreviewFrame()
, y el formato de vista previa es YCbCr_420_SP, los datos en el byte[] que se pasa aonPreviewFrame()
. Es decir, NV21 DEBE ser el valor predeterminado. - [C-0-3] DEBE admitir el formato YV12 (como lo indica la constante
android.graphics.ImageFormat.YV12
) para las vistas previas de la cámara frontal y posterior paraandroid.hardware.Camera
. (El codificador de video y la cámara de hardware pueden usar cualquier formato de píxel nativo, pero la implementación del dispositivo DEBE admitir la conversión a YV12). - [C-0-4] DEBE admitir los formatos
android.hardware.ImageFormat.YUV_420_888
yandroid.hardware.ImageFormat.JPEG
como salidas a través de la API deandroid.media.ImageReader
paraandroid.hardware.camera2
. - [C-0-5] DEBE implementar la API de Camera completa incluida en la documentación del SDK de Android, independientemente de si el dispositivo incluye enfoque automático por hardware o cualquier otra capacidad. Por ejemplo, las cámaras que no tienen enfoque automático DEBEN llamar a las instancias de
android.hardware.Camera.AutoFocusCallback
registradas (aunque esto no sea relevante para una cámara sin enfoque automático). Ten en cuenta que esto se aplica a las cámaras frontales. Por ejemplo, aunque la mayoría de las cámaras frontales no admiten el enfoque automático, las devoluciones de llamada de la API deben “simularse” como se describe. - [C-0-6] DEBE reconocer y respetar cada nombre de parámetro definido como una constante en la clase
android.hardware.Camera.Parameters
. Por el contrario, las implementaciones de dispositivos NO DEBEN reconocer ni respetar las constantes de cadena que se pasan al métodoandroid.hardware.Camera.setParameters()
, excepto las que se documentan como constantes enandroid.hardware.Camera.Parameters
. Es decir, las implementaciones de dispositivos DEBEN admitir todos los parámetros estándar de la cámara si el hardware lo permite y NO DEBEN admitir tipos de parámetros personalizados de la cámara. Por ejemplo, las implementaciones de dispositivos que admiten la captura de imágenes con técnicas de imágenes de alto rango dinámico (HDR) DEBEN admitir el parámetro de cámaraCamera.SCENE_MODE_HDR
. - [C-0-7] DEBE informar el nivel de compatibilidad adecuado con la propiedad
android.info.supportedHardwareLevel
, como se describe en el SDK de Android, y los marcas de funciones del framework correspondientes. - [C-0-8] TAMBIÉN DEBE declarar las capacidades individuales de la cámara de
android.hardware.camera2
a través de la propiedadandroid.request.availableCapabilities
y declarar los parámetros de configuración de funciones adecuados. DEBE definir el parámetro de configuración de funciones si alguno de los dispositivos de cámara adjuntos admite la función. - [C-0-9] DEBE transmitir la intención
Camera.ACTION_NEW_PICTURE
cada vez que la cámara tome una foto nueva y se agregue la entrada de la foto al almacén de medios. - [C-0-10] DEBE transmitir la intención
Camera.ACTION_NEW_VIDEO
cada vez que la cámara grabe un video nuevo y se agregue la entrada de la imagen al almacén de medios.
7.5.5. Orientación de la cámara
Si las implementaciones de dispositivos tienen una cámara frontal o posterior, estas cámaras deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE orientarse de modo que la dimensión larga de la cámara se alinee con la dimensión larga de la pantalla. Es decir, cuando el dispositivo se sostiene en orientación horizontal, las cámaras DEBEN capturar imágenes en esa orientación. Esto se aplica independientemente de la orientación natural del dispositivo, es decir, se aplica tanto a los dispositivos con orientación horizontal principal como a los dispositivos con orientación vertical principal.
7.6. Memoria y almacenamiento
7.6.1. Memoria y almacenamiento mínimos
Implementaciones del dispositivo:
- [C-0-1] DEBE incluir un Administrador de descargas que las aplicaciones PUEDEN usar para descargar archivos de datos y DEBEN poder descargar archivos individuales de al menos 100 MB de tamaño en la ubicación predeterminada de “caché”.
7.6.2. Almacenamiento compartido de la aplicación
Implementaciones del dispositivo:
- [C-0-1] DEBE ofrecer almacenamiento para que lo compartan las aplicaciones, también conocido como "almacenamiento externo compartido", "almacenamiento compartido de aplicaciones" o por la ruta de Linux "/sdcard" en la que se monta.
- [C-0-2] DEBE configurarse con el almacenamiento compartido activado de forma predeterminada, es decir, “listo para usar”, independientemente de si el almacenamiento se implementa en un componente de almacenamiento interno o en un medio de almacenamiento extraíble (p.ej., ranura para tarjeta Secure Digital).
- [C-0-3] DEBE montar el almacenamiento compartido de la aplicación directamente en la ruta de Linux
sdcard
o incluir un vínculo simbólico de Linux desdesdcard
hasta el punto de montaje real. - [C-0-4] DEBE aplicar el permiso
android.permission.WRITE_EXTERNAL_STORAGE
en este almacenamiento compartido, como se documenta en el SDK. De lo contrario, cualquier aplicación que obtenga ese permiso DEBE poder escribir en el almacenamiento compartido.
Las implementaciones de dispositivos PUEDEN cumplir con los requisitos anteriores de cualquiera de las siguientes maneras:
- Almacenamiento extraíble al que puede acceder el usuario, como una ranura para tarjetas Secure Digital (SD).
- Una parte del almacenamiento interno (no extraíble) tal como se implementa en el Proyecto de código abierto de Android (AOSP).
Si las implementaciones de dispositivos usan almacenamiento extraíble para satisfacer los requisitos anteriores, deben cumplir con lo siguiente:
- [C-1-1] DEBE implementar una interfaz de usuario emergente o de notificación que advierta al usuario cuando no haya ningún medio de almacenamiento insertado en la ranura.
- [C-1-2] DEBE incluir un medio de almacenamiento con formato FAT (p.ej., una tarjeta SD) o mostrar en la caja y en otro material disponible en el momento de la compra que el medio de almacenamiento se debe comprar por separado.
Si las implementaciones de dispositivos usan una parte del almacenamiento no extraíble para satisfacer los requisitos anteriores, deben hacer lo siguiente:
- DEBE usar la implementación del AOSP del almacenamiento compartido interno de la aplicación.
- PUEDE compartir el espacio de almacenamiento con los datos privados de la aplicación.
Si las implementaciones de dispositivos incluyen varias rutas de almacenamiento compartido (como una ranura para tarjeta SD y almacenamiento interno compartido), deben cumplir con lo siguiente:
- [C-2-1] SOLO DEBE permitir que las aplicaciones para Android preinstaladas y con privilegios que tengan el permiso
WRITE_EXTERNAL_STORAGE
escriban en el almacenamiento externo secundario, excepto cuando escriban en sus directorios específicos del paquete o dentro delURI
que se devuelve cuando se activa el intentACTION_OPEN_DOCUMENT_TREE
.
Si las implementaciones de dispositivos tienen un puerto USB con compatibilidad con el modo periférico USB, deben cumplir con lo siguiente:
- [C-3-1] DEBE proporcionar un mecanismo para acceder a los datos del almacenamiento compartido de la aplicación desde una computadora host.
- DEBE exponer el contenido de ambas rutas de almacenamiento de forma transparente a través del servicio de análisis de medios de Android y
android.provider.MediaStore
. - PUEDE usar el almacenamiento masivo USB, pero DEBE usar el protocolo de transferencia de medios para satisfacer este requisito.
Si las implementaciones de dispositivos tienen un puerto USB con modo periférico USB y admiten el Protocolo de transferencia de medios, deben cumplir con lo siguiente:
- DEBE ser compatible con el host de referencia de MTP de Android, Android File Transfer.
- DEBE informar una clase de dispositivo USB de 0x00.
- DEBE informar un nombre de interfaz USB de "MTP".
7.6.3. Almacenamiento adoptable
Si se espera que el dispositivo sea móvil, a diferencia de la televisión, las implementaciones del dispositivo son las siguientes:
- [SR] SE RECOMIENDA ENCARECIDAMENTE implementar el almacenamiento adaptable en una ubicación estable a largo plazo, ya que desconectarlo accidentalmente puede causar pérdida o corrupción de datos.
Si el puerto del dispositivo de almacenamiento extraíble se encuentra en una ubicación estable a largo plazo, como dentro del compartimiento de la batería o de otra cubierta protectora, las implementaciones del dispositivo son las siguientes:
- [SR] SE RECOMIENDA ENCARECIDAMENTE implementar el almacenamiento adoptable.
7.7. USB
Si las implementaciones de dispositivos tienen un puerto USB, deben cumplir con los siguientes requisitos:
- DEBE admitir el modo periférico USB y DEBE admitir el modo host USB.
7.7.1. Modo de periférico USB
Si las implementaciones de dispositivos incluyen un puerto USB que admite el modo periférico, se deben cumplir los siguientes requisitos:
- [C-1-1] El puerto DEBE poder conectarse a un host USB que tenga un puerto USB estándar de tipo A o tipo C.
- [C-1-2] DEBE informar el valor correcto de
iSerialNumber
en el descriptor de dispositivo estándar de USB a través deandroid.os.Build.SERIAL
. - [C-1-3] DEBE detectar cargadores de 1.5 A y 3.0 A según el estándar de resistencia de Type-C y DEBE detectar cambios en el anuncio si admiten USB Type-C.
- [SR] El puerto DEBE usar un factor de forma USB micro-B, micro-AB o tipo C. SE RECOMIENDA ENCARECIDAMENTE que los dispositivos Android existentes y nuevos cumplan con estos requisitos para que puedan actualizarse a las versiones futuras de la plataforma.
- [SR] El puerto DEBE ubicarse en la parte inferior del dispositivo (según la orientación natural) o habilitar la rotación de pantalla por software para todas las apps (incluida la pantalla principal), de modo que la pantalla se dibuje correctamente cuando el dispositivo esté orientado con el puerto en la parte inferior. SE RECOMIENDA ENCARECIDAMENTE que los dispositivos Android existentes y nuevos cumplan con estos requisitos para que puedan actualizarse a versiones futuras de la plataforma.
- [SR] DEBE implementar la compatibilidad para extraer una corriente de 1.5 A durante el chirp de alta velocidad y el tráfico, como se especifica en la especificación de carga de batería por USB, revisión 1.2. SE RECOMIENDA ENCARECIDAMENTE que los dispositivos Android existentes y nuevos cumplan con estos requisitos para que puedan actualizarse a las versiones futuras de la plataforma.
- [SR] SE RECOMIENDA ENCARECIDAMENTE no admitir métodos de carga propietarios que modifiquen el voltaje de Vbus más allá de los niveles predeterminados o que alteren los roles de fuente o receptor, ya que esto puede generar problemas de interoperabilidad con los cargadores o dispositivos que admiten los métodos estándar de USB Power Delivery. Si bien se indica como "ALTAMENTE RECOMENDADO", en futuras versiones de Android, es posible que EXIJAMOS que todos los dispositivos tipo C admitan la interoperabilidad completa con los cargadores tipo C estándar.
- [SR] SE RECOMIENDA ENCARECIDAMENTE admitir Power Delivery para el intercambio de roles de datos y alimentación cuando admitan USB Type-C y el modo de host USB.
- DEBE admitir Power Delivery para la carga de alto voltaje y los modos alternativos, como la salida de pantalla.
- DEBE implementar la API y la especificación de Android Open Accessory (AOA) como se documenta en la documentación del SDK de Android.
Si las implementaciones de dispositivos incluyen un puerto USB, y se implementa la especificación de AOA, se cumplen las siguientes condiciones:
- [C-2-1] DEBE declarar la compatibilidad con la función de hardware
android.hardware.usb.accessory
. - [C-2-2] La clase de almacenamiento masivo USB DEBE incluir la cadena "android" al final de la cadena
iInterface
de descripción de la interfaz del almacenamiento masivo USB.
7.7.2. Modo de host USB
Si las implementaciones de dispositivos incluyen un puerto USB que admite el modo de host, deben cumplir con lo siguiente:
- [C-1-1] DEBE implementar la API de host USB de Android como se documenta en el SDK de Android y DEBE declarar la compatibilidad con la función de hardware
android.hardware.usb.host
. - [C-1-2] DEBE implementar compatibilidad para conectar periféricos USB estándar, es decir, DEBE hacer una de las siguientes acciones:
- Tener un puerto tipo C en el dispositivo o incluir cables que adapten un puerto propietario del dispositivo a un puerto USB estándar tipo C (dispositivo USB Type-C)
- Tener un puerto tipo A en el dispositivo o incluir cables que adapten un puerto propietario del dispositivo a un puerto USB estándar tipo A
- Tener un puerto micro-AB en el dispositivo, que DEBE incluir un cable adaptador a un puerto estándar de tipo A
- [C-1-3] NO DEBE incluir un adaptador que convierta puertos USB tipo A o micro-AB en un puerto tipo C (receptáculo).
- [SR] SE RECOMIENDA ENCARECIDAMENTE implementar la clase de audio USB como se documenta en la documentación del SDK de Android.
- DEBE admitir la carga del dispositivo periférico USB conectado mientras está en modo de host, anunciando una corriente de fuente de al menos 1.5 A, como se especifica en la sección Termination Parameters de la USB Type-C Cable and Connector Specification Revision 1.2 para los conectores USB Type-C, o bien usando el rango de corriente de salida del puerto de carga de bajada(CDP) como se especifica en las especificaciones de carga de batería USB, revisión 1.2 para los conectores Micro-AB.
- DEBE implementar y admitir los estándares de USB Type-C.
Si las implementaciones de dispositivos incluyen un puerto USB que admite el modo de host y la clase de audio USB, deben cumplir con lo siguiente:
- [C-2-1] DEBE admitir la clase HID de USB.
- [C-2-2] DEBE admitir la detección y la asignación de los siguientes campos de datos de HID especificados en las Tablas de uso de HID de USB y la Solicitud de uso de comandos por voz a las constantes de
KeyEvent
como se indica a continuación:- Página de uso (0xC), ID de uso (0x0CD):
KEYCODE_MEDIA_PLAY_PAUSE
- Página de uso (0xC), ID de uso (0x0E9):
KEYCODE_VOLUME_UP
- Página de uso (0xC), ID de uso (0x0EA):
KEYCODE_VOLUME_DOWN
- Página de uso (0xC), ID de uso (0x0CF):
KEYCODE_VOICE_ASSIST
- Página de uso (0xC), ID de uso (0x0CD):
Si las implementaciones de dispositivos incluyen un puerto USB que admite el modo de host y el framework de acceso al almacenamiento (SAF), deben cumplir con lo siguiente:
- [C-3-1] DEBE reconocer cualquier dispositivo MTP (protocolo de transferencia multimedia) conectado de forma remota y hacer que su contenido sea accesible a través de los intents
ACTION_GET_CONTENT
,ACTION_OPEN_DOCUMENT
yACTION_CREATE_DOCUMENT
. .
Si las implementaciones de dispositivos incluyen un puerto USB que admite el modo de host y USB Type-C, deben cumplir con lo siguiente:
- [C-4-1] DEBE implementar la funcionalidad de puerto de doble función según se define en la especificación de USB Type-C (sección 4.5.1.3.3).
- [SR] SE RECOMIENDA ENCARECIDAMENTE que admitan DisplayPort, DEBEN admitir velocidades de datos USB SuperSpeed y SE RECOMIENDA ENCARECIDAMENTE que admitan Power Delivery para el intercambio de roles de datos y energía.
- [SR] SE RECOMIENDA ENCARECIDAMENTE NO admitir el modo de accesorio del adaptador de audio, como se describe en el Apéndice A de la Especificación de cable y conector USB Type-C, revisión 1.2.
- DEBE implementar el modelo Try.* que sea más adecuado para el factor de forma del dispositivo. Por ejemplo, un dispositivo portátil DEBE implementar el modelo Try.SNK.
7.8. Audio
7.8.1. Micrófono
Si las implementaciones de dispositivos incluyen un micrófono, deben cumplir con lo siguiente:
- [C-1-1] DEBE informar la constante de función
android.hardware.microphone
. - [C-1-2] DEBE cumplir con los requisitos de grabación de audio que se indican en la sección 5.4.
- [C-1-3] DEBE cumplir con los requisitos de latencia de audio que se indican en la sección 5.6.
- [SR] Se RECOMIENDA ENCARECIDAMENTE que admitan la grabación de cerca del ultrasonido, como se describe en la sección 7.8.3.
Si las implementaciones de dispositivos omiten un micrófono, deben cumplir con lo siguiente:
- [C-2-1] NO DEBE informar la constante de función
android.hardware.microphone
. - [C-2-2] DEBE implementar la API de grabación de audio al menos como no-ops, según la sección 7.
7.8.2. Salida de audio
Si las implementaciones de dispositivos incluyen un altavoz o un puerto de salida de audio o multimedia para un periférico de salida de audio, como un conector de audio de 3.5 mm de 4 conductores o un puerto en modo host USB que use la clase de audio USB, deben cumplir con lo siguiente:
- [C-1-1] DEBE informar la constante de función
android.hardware.audio.output
. - [C-1-2] DEBE cumplir con los requisitos de reproducción de audio de la sección 5.5.
- [C-1-3] DEBE cumplir con los requisitos de latencia de audio que se indican en la sección 5.6.
- [SR] SE RECOMIENDA ENCARECIDAMENTE admitir la reproducción de sonido casi ultrasónico, como se describe en la sección 7.8.3.
Si las implementaciones de dispositivos no incluyen una bocina o un puerto de salida de audio, deben cumplir con lo siguiente:
- [C-2-1] NO DEBE informar la función
android.hardware.audio output
. - [C-2-2] DEBE implementar las APIs relacionadas con la salida de audio como no-ops, al menos.
A los efectos de esta sección, un "puerto de salida" es una interfaz física, como un conector de audio de 3.5 mm, HDMI o un puerto en modo host USB con clase de audio USB. La compatibilidad con la salida de audio a través de protocolos basados en radio, como Bluetooth, Wi-Fi o redes celulares, no se considera como la inclusión de un "puerto de salida".
7.8.2.1. Puertos de audio analógicos
Para que sean compatibles con los auriculares y otros accesorios de audio que usan el conector de audio de 3.5 mm en todo el ecosistema de Android, si una implementación de dispositivo incluye uno o más puertos de audio analógicos, al menos uno de los puertos de audio DEBE ser un conector de audio de 3.5 mm de 4 conductores.
Si las implementaciones de dispositivos tienen un conector de audio de 3.5 mm con 4 conductores, deben cumplir con lo siguiente:
- [C-1-1] DEBE admitir la reproducción de audio en auriculares estéreo y auriculares estéreo con micrófono.
- [C-1-2] DEBE admitir conectores de audio TRRS con el orden de pines de CTIA.
- [C-1-3] DEBE admitir la detección y la asignación a los códigos de teclas de los siguientes 3 rangos de impedancia equivalente entre los conductores del micrófono y de tierra en el conector de audio:
-
70 ohmios o menos:
KEYCODE_HEADSETHOOK
-
210 a 290 ohm:
KEYCODE_VOLUME_UP
-
360 a 680 ohm:
KEYCODE_VOLUME_DOWN
-
70 ohmios o menos:
- [C-1-4] DEBE activar
ACTION_HEADSET_PLUG
cuando se inserta un conector, pero solo después de que todos los contactos del conector toquen sus segmentos correspondientes en el conector hembra. - [C-1-5] DEBE ser capaz de generar al menos 150 mV ± 10% de voltaje de salida en una impedancia de bocina de 32 ohmios.
- [C-1-6] DEBE tener un voltaje de polarización del micrófono entre 1.8 V y 2.9 V.
- [SR] SE RECOMIENDA ENCARECIDAMENTE detectar y asignar el código de tecla para el siguiente rango de impedancia equivalente entre los conductores del micrófono y de tierra en el conector de audio:
-
110 a 180 ohm:
KEYCODE_VOICE_ASSIST
-
110 a 180 ohm:
- DEBE admitir conectores de audio con el orden de pines de OMTP.
- DEBE admitir la grabación de audio desde auriculares estéreo con micrófono.
Si las implementaciones de dispositivos tienen un conector de audio de 3.5 mm con 4 conductores y admiten un micrófono, y transmiten android.intent.action.HEADSET_PLUG
con el micrófono de valor adicional establecido en 1, cumplen con las siguientes condiciones:
- [C-2-1] DEBE admitir la detección del micrófono en el accesorio de audio conectado.
7.8.3. Cercano al ultrasonido
El audio casi ultrasónico se encuentra en la banda de 18.5 a 20 kHz.
Implementaciones del dispositivo:
- DEBE informar correctamente la compatibilidad con la capacidad de audio casi ultrasónico a través de la API de AudioManager.getProperty de la siguiente manera:
Si PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND
es "true", las fuentes de audio VOICE_RECOGNITION
y UNPROCESSED
DEBEN cumplir con los siguientes requisitos:
- [C-1-1] La respuesta de potencia media del micrófono en la banda de 18.5 kHz a 20 kHz NO DEBE ser inferior en más de 15 dB a la respuesta en 2 kHz.
- [C-1-2] La relación señal-ruido no ponderada del micrófono en el rango de 18.5 a 20 kHz para un tono de 19 kHz a -26 dBFS DEBE ser de al menos 50 dB.
Si PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND
es "true", haz lo siguiente:
- [C-2-1] La respuesta media del altavoz en el rango de 18.5 kHz a 20 kHz NO DEBE ser inferior a 40 dB por debajo de la respuesta a 2 kHz.
7.9. Realidad virtual
Android incluye APIs y herramientas para crear aplicaciones de "realidad virtual" (RV), incluidas experiencias de RV móvil de alta calidad. Las implementaciones de dispositivos DEBEN implementar correctamente estas APIs y comportamientos, como se detalla en esta sección.
7.9.1. Modo de realidad virtual
Android incluye compatibilidad con el modo VR, una función que controla la renderización estereoscópica de las notificaciones y que inhabilita los componentes de la IU del sistema monoculares mientras una aplicación de VR tiene el enfoque del usuario.
7.9.2. Alto rendimiento en realidad virtual
Si las implementaciones de dispositivos identifican la compatibilidad con la RV de alto rendimiento durante períodos más largos para el usuario a través de la marca de función android.hardware.vr.high_performance
, deben hacer lo siguiente:
- [C-1-1] DEBE tener al menos 2 núcleos físicos.
- [C-1-2] SE DEBE declarar
android.software.vr.mode feature
. - [C-1-3] DEBE admitir el modo de rendimiento sostenido.
- [C-1-4] DEBE admitir OpenGL ES 3.2.
- [C-1-5] DEBE admitir el nivel de hardware 0 de Vulkan y DEBERÍA admitir el nivel de hardware 1 de Vulkan.
- [C-1-6] DEBE implementar
EGL_KHR_mutable_render_buffer
,EGL_ANDROID_front_buffer_auto_refresh
,EGL_ANDROID_get_native_client_buffer
,EGL_KHR_fence_sync
,EGL_KHR_wait_sync
,EGL_IMG_context_priority
,EGL_EXT_protected_content
y exponer las extensiones en la lista de extensiones de EGL disponibles. - [C-1-7] La GPU y la pantalla DEBEN poder sincronizar el acceso al búfer frontal compartido de modo que la renderización de ojos alternados del contenido de RV a 60 FPS con dos contextos de renderización se muestre sin artefactos de desgarro visibles.
- [C-1-8] DEBE implementar
GL_EXT_multisampled_render_to_texture
,GL_OVR_multiview
,GL_OVR_multiview2
,GL_OVR_multiview_multisampled_render_to_texture
,GL_EXT_protected_textures
y exponer las extensiones en la lista de extensiones de GL disponibles. - [C-1-9] DEBE implementar la compatibilidad con las marcas
AHardwareBuffer
AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER
yAHARDWAREBUFFER_USAGE_SENSOR_DIRECT_DATA
como se describe en el NDK. - [C-1-10] DEBE implementar la compatibilidad con
AHardwareBuffers
con más de una capa. - [C-1-11] DEBE admitir la decodificación H.264 con una resolución de al menos 3840 x 2160 a 30 fps y 40 Mbps (equivalente a 4 instancias de 1920 x 1080 a 30 fps y 10 Mbps o 2 instancias de 1920 x 1080 a 60 fps y 20 Mbps).
- [C-1-12] DEBE admitir HEVC y VP9, DEBE poder decodificar al menos 1920 x 1080@30 fps y 10 Mbps, y DEBE poder decodificar 3840 x 2160@30 fps y 20 Mbps (equivalente a 4 instancias de 1920 x 1080@30 fps y 5 Mbps).
- [C-1-13] DEBE admitir la API de
HardwarePropertiesManager.getDeviceTemperatures
y devolver valores precisos para la temperatura cutánea. - [C-1-14] DEBE tener una pantalla integrada, y su resolución DEBE ser al menos Full HD(1080p) y SE RECOMIENDA ENCARECIDAMENTE que sea Quad HD (1440p) o superior.
- [C-1-15] La pantalla DEBE actualizarse a una frecuencia de al menos 60 Hz en el modo de VR.
- [C-1-16] La latencia de la pantalla en el tiempo de conmutación de gris a gris, de blanco a negro y de negro a blanco DEBE ser ≤ 3 ms.
- [C-1-17] La pantalla DEBE admitir un modo de baja persistencia con una persistencia ≤5 ms, donde la persistencia se define como la cantidad de tiempo durante la cual un píxel emite luz.
- [C-1-18] DEBE admitir Bluetooth 4.2 y la extensión de longitud de datos de Bluetooth LE sección 7.4.3.
- [SR] Se RECOMIENDA ENCARECIDAMENTE admitir la función
android.hardware.sensor.hifi_sensors
y se DEBEN cumplir los requisitos relacionados con el giroscopio, el acelerómetro y el magnetómetro paraandroid.hardware.hifi_sensors
. - PUEDE proporcionar un núcleo exclusivo a la aplicación en primer plano y PUEDE admitir la API de
Process.getExclusiveCores
para devolver la cantidad de núcleos de CPU que son exclusivos para la aplicación en primer plano superior.
Si se admite el uso exclusivo del núcleo, este debe cumplir con los siguientes requisitos:
- [C-2-1] NO DEBE permitir que se ejecuten otros procesos de espacio de usuario (excepto los controladores de dispositivos que usa la aplicación), pero PUEDE permitir que se ejecuten algunos procesos del kernel según sea necesario.
8. Rendimiento y potencia
Algunos criterios mínimos de rendimiento y potencia son fundamentales para la experiencia del usuario y afectan las suposiciones básicas que los desarrolladores tendrían al crear una app.
8.1. Coherencia de la experiencia del usuario
Se puede proporcionar una interfaz de usuario fluida al usuario final si se cumplen ciertos requisitos mínimos para garantizar una velocidad de fotogramas y tiempos de respuesta coherentes para las aplicaciones y los juegos. Las implementaciones de dispositivos, según el tipo de dispositivo, PUEDEN tener requisitos medibles para la latencia de la interfaz de usuario y el cambio de tareas, como se describe en la sección 2.
8.2. Rendimiento del acceso a E/S de archivos
Proporcionar un valor de referencia común para un rendimiento coherente del acceso a archivos en el almacenamiento de datos privados de la aplicación (partición /data
) permite a los desarrolladores de apps establecer una expectativa adecuada que ayude al diseño de su software. Las implementaciones de dispositivos, según el tipo de dispositivo, PUEDEN tener ciertos requisitos que se describen en la sección 2 para las siguientes operaciones de lectura y escritura:
- Rendimiento de escritura secuencial Se mide escribiendo un archivo de 256 MB con un búfer de escritura de 10 MB.
- Rendimiento de escritura aleatoria Se midió escribiendo un archivo de 256 MB con un búfer de escritura de 4 KB.
- Rendimiento de lectura secuencial Se mide leyendo un archivo de 256 MB con un búfer de escritura de 10 MB.
- Rendimiento de lectura aleatoria Se mide leyendo un archivo de 256 MB con un búfer de escritura de 4 KB.
8.3. Modos de ahorro de energía
Android incluye los modos de ahorro de energía App Standby y Descanso para optimizar el uso de la batería. [SR] SE RECOMIENDA ENCARECIDAMENTE que todas las apps exentas de estos modos sean visibles para el usuario final. [SR] Se RECOMIENDA ENFÁTICAMENTE que los algoritmos de activación, mantenimiento y activación, y el uso de la configuración global del sistema de estos modos de ahorro de energía NO se desvíen del Proyecto de código abierto de Android.
Además de los modos de ahorro de energía, las implementaciones de dispositivos Android PUEDEN implementar cualquiera de los 4 estados de energía de suspensión definidos por la Interfaz avanzada de configuración y energía (ACPI).
Si las implementaciones de dispositivos implementan los estados de energía S3 y S4 según lo define ACPI, deben cumplir con lo siguiente:
- [C-1-1] SOLO DEBE ingresar a estos estados cuando se cierra una tapa que forma parte física del dispositivo.
8.4. Contabilización del consumo de energía
Un registro y un informe más precisos del consumo de energía proporcionan al desarrollador de la app los incentivos y las herramientas para optimizar el patrón de uso de energía de la aplicación.
Implementaciones del dispositivo:
- [SR] SE RECOMIENDA ENCARECIDAMENTE proporcionar un perfil de energía por componente que defina el valor de consumo de corriente para cada componente de hardware y el agotamiento aproximado de la batería que causan los componentes con el tiempo, como se documenta en el sitio del Proyecto de código abierto de Android.
- [SR] SE RECOMIENDA ENCARECIDAMENTE informar todos los valores de consumo de energía en miliamperios-hora (mAh).
- [SR] SE RECOMIENDA ENCARECIDAMENTE informar el consumo de energía de la CPU para el UID de cada proceso. El Proyecto de código abierto de Android cumple con el requisito a través de la implementación del módulo del kernel
uid_cputime
. - [SR] SE RECOMIENDA ENCARECIDAMENTE que este uso de energía esté disponible a través del comando de shell
adb shell dumpsys batterystats
para el desarrollador de la app. - Se DEBE atribuir al componente de hardware en sí si no se puede atribuir el uso de energía del componente de hardware a una aplicación.
8.5. Rendimiento coherente
El rendimiento puede fluctuar drásticamente en el caso de las apps de alto rendimiento y larga duración, ya sea por las otras apps que se ejecutan en segundo plano o por la regulación de la CPU debido a los límites de temperatura. Android incluye interfaces programáticas para que, cuando el dispositivo sea capaz, la aplicación en primer plano superior pueda solicitar que el sistema optimice la asignación de los recursos para abordar esas fluctuaciones.
Implementaciones del dispositivo:
-
[C-0-1] DEBE informar con precisión la compatibilidad con el modo de rendimiento sostenido a través del método de la API de
PowerManager.isSustainedPerformanceModeSupported()
. -
DEBE admitir el modo de rendimiento sostenido.
Si las implementaciones de dispositivos informan que admiten el modo de rendimiento sostenido, deben hacer lo siguiente:
- [C-1-1] DEBE proporcionar a la aplicación en primer plano superior un nivel de rendimiento constante durante al menos 30 minutos, cuando la app lo solicite.
- [C-1-2] DEBE cumplir con la API de
Window.setSustainedPerformanceMode()
y otras APIs relacionadas.
Si las implementaciones de dispositivos incluyen dos o más núcleos de CPU, deben cumplir con los siguientes requisitos:
- DEBE proporcionar al menos un núcleo exclusivo que pueda reservar la aplicación en primer plano superior.
Si las implementaciones de dispositivos admiten la reserva de un núcleo exclusivo para la aplicación en primer plano superior, deben cumplir con los siguientes requisitos:
- [C-2-1] DEBE informar a través del método de la API de
Process.getExclusiveCores()
los números de ID de los núcleos exclusivos que puede reservar la aplicación en primer plano superior. - [C-2-2] NO DEBE permitir ningún proceso de espacio del usuario, excepto los controladores de dispositivos que usa la aplicación para ejecutarse en los núcleos exclusivos, pero PUEDE permitir que se ejecuten algunos procesos del kernel según sea necesario.
Si las implementaciones de dispositivos no admiten un núcleo exclusivo, deben cumplir con lo siguiente:
- [C-3-1] DEBE devolver una lista vacía a través del método de la API de
Process.getExclusiveCores()
.
9. Compatibilidad del modelo de seguridad
Implementaciones del dispositivo:
-
[C-0-1] DEBE implementar un modelo de seguridad coherente con el modelo de seguridad de la plataforma de Android, tal como se define en el documento de referencia de Seguridad y permisos en las APIs de la documentación para desarrolladores de Android.
-
[C-0-2] DEBE admitir la instalación de aplicaciones autofirmadas sin requerir permisos o certificados adicionales de terceros o autoridades. Específicamente, los dispositivos compatibles DEBEN admitir los mecanismos de seguridad que se describen en las siguientes subsecciones.
9.1. Permisos
Implementaciones del dispositivo:
-
[C-0-1] DEBE admitir el modelo de permisos de Android según se define en la documentación para desarrolladores de Android. Específicamente, DEBEN aplicar cada permiso definido según se describe en la documentación del SDK. No se pueden omitir, alterar ni ignorar permisos.
-
PUEDE agregar permisos adicionales, siempre que las nuevas cadenas de ID de permiso no estén en el espacio de nombres
android.\*
. -
[C-0-2] Los permisos con un
protectionLevel
dePROTECTION_FLAG_PRIVILEGED
SOLO se deben otorgar a las apps precargadas en las rutas privilegiadas de la imagen del sistema y dentro del subconjunto de permisos incluidos explícitamente en la lista de entidades permitidas para cada app. La implementación de AOSP cumple con este requisito leyendo y respetando los permisos incluidos en la lista de entidades permitidas para cada app de los archivos en la rutaetc/permissions/
y usando la rutasystem/priv-app
como la ruta privilegiada.
Los permisos con un nivel de protección peligroso son permisos de tiempo de ejecución. Las aplicaciones con targetSdkVersion
> 22 los solicitan durante el tiempo de ejecución.
Implementaciones del dispositivo:
- [C-0-3] DEBE mostrar una interfaz exclusiva para que el usuario decida si otorga los permisos de tiempo de ejecución solicitados y también proporcionar una interfaz para que el usuario administre los permisos de tiempo de ejecución.
- [C-0-4] DEBE tener una sola implementación de ambas interfaces de usuario.
- [C-0-5] NO DEBE otorgar permisos de tiempo de ejecución a las apps preinstaladas, a menos que se cumpla una de las siguientes condiciones:
- Se puede obtener el consentimiento del usuario antes de que la aplicación lo use.
- Los permisos de tiempo de ejecución están asociados a un patrón de intents para el que la aplicación preinstalada se establece como controlador predeterminado.
Si las implementaciones de dispositivos incluyen una app preinstalada o desean permitir que las apps de terceros accedan a las estadísticas de uso, deben hacer lo siguiente:
- [SR] SE RECOMIENDA ENCARECIDAMENTE proporcionar un mecanismo accesible para el usuario que permita otorgar o revocar el acceso a las estadísticas de uso en respuesta a la intención
android.settings.ACTION_USAGE_ACCESS_SETTINGS
para las apps que declaran el permisoandroid.permission.PACKAGE_USAGE_STATS
.
Si las implementaciones de dispositivos tienen la intención de no permitir que ninguna app, incluidas las apps preinstaladas, acceda a las estadísticas de uso, deben hacer lo siguiente:
- [C-1-1] DEBE tener una actividad que controle el patrón de intent
android.settings.ACTION_USAGE_ACCESS_SETTINGS
, pero DEBE implementarlo como una operación sin efecto, es decir, tener un comportamiento equivalente al que se produce cuando se rechaza el acceso del usuario.
9.2. Aislamiento de UID y procesos
Implementaciones del dispositivo:
- [C-0-1] DEBE admitir el modelo de zona de pruebas de la aplicación para Android, en el que cada aplicación se ejecuta como un UID único de estilo Unix y en un proceso independiente.
- [C-0-2] DEBE admitir la ejecución de varias aplicaciones con el mismo ID de usuario de Linux, siempre que las aplicaciones estén firmadas y construidas correctamente, como se define en la referencia de Seguridad y permisos.
9.3. Permisos del sistema de archivos
Implementaciones del dispositivo:
- [C-0-1] DEBE admitir el modelo de permisos de acceso a archivos de Android, como se define en la referencia de seguridad y permisos.
9.4. Entornos de ejecución alternativos
Las implementaciones de dispositivos DEBEN mantener la coherencia del modelo de seguridad y permisos de Android, incluso si incluyen entornos de ejecución que ejecutan aplicaciones con algún otro software o tecnología que no sean el formato ejecutable de Dalvik o el código nativo. En otras palabras:
-
[C-0-1] Los tiempos de ejecución alternativos DEBEN ser aplicaciones para Android y cumplir con el modelo de seguridad estándar de Android, como se describe en otra parte de la sección 9.
-
[C-0-2] Los tiempos de ejecución alternativos NO DEBEN tener acceso a los recursos protegidos por permisos que no se solicitaron en el archivo
AndroidManifest.xml
del tiempo de ejecución a través del mecanismo <uses-permission
>. -
[C-0-3] Los tiempos de ejecución alternativos NO DEBEN permitir que las aplicaciones usen funciones protegidas por permisos de Android restringidos a las aplicaciones del sistema.
-
[C-0-4] Los tiempos de ejecución alternativos DEBEN cumplir con el modelo de zona de pruebas de Android, y las aplicaciones instaladas que usen un tiempo de ejecución alternativo NO DEBEN reutilizar la zona de pruebas de ninguna otra app instalada en el dispositivo, excepto a través de los mecanismos estándar de Android de ID de usuario compartido y certificado de firma.
-
[C-0-5] Los tiempos de ejecución alternativos NO DEBEN iniciarse con acceso a las zonas de pruebas correspondientes a otras aplicaciones para Android, ni otorgar o recibir acceso a ellas.
-
[C-0-6] Los tiempos de ejecución alternativos NO DEBEN iniciarse con privilegios de superusuario (root) o de cualquier otro ID de usuario, ni otorgar o recibir privilegios de superusuario (root) o de cualquier otro ID de usuario de otras aplicaciones.
-
[C-0-7] Cuando los archivos
.apk
de los tiempos de ejecución alternativos se incluyen en la imagen del sistema de las implementaciones de dispositivos, DEBEN firmarse con una clave distinta de la que se usa para firmar otras aplicaciones incluidas en las implementaciones de dispositivos. -
[C-0-8] Cuando se instalan aplicaciones, los tiempos de ejecución alternativos DEBEN obtener el consentimiento del usuario para los permisos de Android que usa la aplicación.
-
[C-0-9] Cuando una aplicación necesita usar un recurso del dispositivo para el que hay un permiso de Android correspondiente (como la cámara, el GPS, etcétera), el tiempo de ejecución alternativo DEBE informar al usuario que la aplicación podrá acceder a ese recurso.
-
[C-0-10] Cuando el entorno de ejecución no registra las capacidades de la aplicación de esta manera, DEBE enumerar todos los permisos que tiene el entorno de ejecución cuando se instala cualquier aplicación que use ese entorno de ejecución.
-
Los tiempos de ejecución alternativos DEBEN instalar apps a través de
PackageManager
en zonas de pruebas de Android separadas (IDs de usuario de Linux, etc.). -
Los tiempos de ejecución alternativos PUEDEN proporcionar una sola zona de pruebas de Android compartida por todas las aplicaciones que usan el tiempo de ejecución alternativo.
9.5. Compatibilidad con múltiples usuarios
Android incluye compatibilidad con varios usuarios y proporciona compatibilidad con el aislamiento completo del usuario.
- Las implementaciones de dispositivos PUEDEN, pero NO DEBEN habilitar la función multiusuario si usan medios extraíbles para el almacenamiento externo principal.
Si las implementaciones de dispositivos incluyen varios usuarios, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE cumplir con los siguientes requisitos relacionados con la compatibilidad con varios usuarios.
- [C-1-2] DEBE, para cada usuario, implementar un modelo de seguridad coherente con el modelo de seguridad de la plataforma Android, tal como se define en el documento de referencia de Seguridad y permisos en las APIs.
- [C-1-3] DEBE tener directorios de almacenamiento de aplicaciones compartidos (también conocidos como
/sdcard
) separados y aislados para cada instancia de usuario. - [C-1-4] DEBE garantizar que las aplicaciones que pertenecen a un usuario determinado y se ejecutan en su nombre no puedan enumerar, leer ni escribir en los archivos que pertenecen a cualquier otro usuario, incluso si los datos de ambos usuarios se almacenan en el mismo volumen o sistema de archivos.
- [C-1-5] DEBE encriptar el contenido de la tarjeta SD cuando se habilita el modo multiusuario con una clave almacenada solo en medios no extraíbles a los que solo puede acceder el sistema si las implementaciones del dispositivo usan medios extraíbles para las APIs de almacenamiento externo. Como esto hará que la PC host no pueda leer el contenido multimedia, las implementaciones de dispositivos deberán cambiar a MTP o a un sistema similar para proporcionar a las PCs host acceso a los datos del usuario actual.
Si las implementaciones de dispositivos incluyen varios usuarios y no declaran el parámetro android.hardware.telephony
, sucede lo siguiente:
- [C-2-1] DEBE admitir perfiles restringidos, una función que permite a los propietarios del dispositivo administrar usuarios adicionales y sus capacidades en el dispositivo. Con los perfiles restringidos, los propietarios de dispositivos pueden configurar rápidamente entornos separados para que trabajen usuarios adicionales, con la posibilidad de administrar restricciones más detalladas en las apps que están disponibles en esos entornos.
Si las implementaciones de dispositivos incluyen varios usuarios y declaran la marca de función android.hardware.telephony
, deben hacer lo siguiente:
- [C-3-1] NO DEBE admitir perfiles restringidos, pero DEBE alinearse con la implementación de AOSP de los controles para habilitar o inhabilitar el acceso de otros usuarios a las llamadas de voz y los SMS.
9.6. Advertencia de SMS premium
Android incluye compatibilidad para advertir a los usuarios sobre cualquier mensaje SMS premium saliente. Los mensajes SMS Premium son mensajes de texto que se envían a un servicio registrado con un operador y que pueden generar un cargo para el usuario.
Si las implementaciones de dispositivos declaran compatibilidad con android.hardware.telephony
, deben cumplir con lo siguiente:
- [C-1-1] DEBE advertir a los usuarios antes de enviar un mensaje SMS a los números identificados por las expresiones regulares definidas en el archivo
/data/misc/sms/codes.xml
del dispositivo. El Proyecto de código abierto de Android upstream proporciona una implementación que satisface este requisito.
9.7. Funciones de seguridad del kernel
La zona de pruebas de Android incluye funciones que usan el sistema de control de acceso obligatorio (MAC) de Security-Enhanced Linux (SELinux), la zona de pruebas de seccomp y otras funciones de seguridad en el kernel de Linux. Implementaciones del dispositivo:
- [C-0-1] DEBE mantener la compatibilidad con las aplicaciones existentes, incluso cuando SELinux o cualquier otra función de seguridad se implementen debajo del framework de Android.
- [C-0-2] NO DEBE tener una interfaz de usuario visible cuando se detecta una vulneración de seguridad y la función de seguridad implementada debajo del framework de Android la bloquea correctamente, pero PUEDE tener una interfaz de usuario visible cuando se produce una vulneración de seguridad no bloqueada que genera un exploit exitoso.
- [C-0-3] NO DEBE permitir que el usuario o el desarrollador de la app configuren SELinux ni ninguna otra función de seguridad implementada debajo del framework de Android.
- [C-0-4] NO DEBE permitir que una aplicación que pueda afectar a otra aplicación a través de una API (como una API de administración de dispositivos) configure una política que interrumpa la compatibilidad.
- [C-0-5] SE DEBE dividir el framework de medios en varios procesos para que sea posible otorgar acceso de forma más limitada a cada proceso, como se describe en el sitio del Proyecto de código abierto de Android.
- [C-0-6] DEBE implementar un mecanismo de aislamiento de aplicaciones del kernel que permita filtrar las llamadas al sistema con una política configurable de programas multiproceso. El Proyecto de código abierto de Android upstream cumple con este requisito habilitando seccomp-BPF con sincronización de grupos de subprocesos (TSYNC), como se describe en la sección Configuración del kernel de source.android.com.
Las funciones de integridad y autoprotección del kernel son fundamentales para la seguridad de Android. Implementaciones del dispositivo:
- [C-0-7] SE DEBEN implementar mecanismos de protección contra desbordamiento de búfer de pila del kernel.
CC_STACKPROTECTOR_REGULAR
yCONFIG_CC_STACKPROTECTOR_STRONG
son ejemplos de estos mecanismos. - [C-0-8] DEBE implementar protecciones estrictas de la memoria del kernel en las que el código ejecutable sea de solo lectura, los datos de solo lectura no sean ejecutables ni se puedan escribir, y los datos que se puedan escribir no sean ejecutables (p.ej.,
CONFIG_DEBUG_RODATA
oCONFIG_STRICT_KERNEL_RWX
). - [SR] SE RECOMIENDA ENCARECIDAMENTE mantener los datos del kernel que se escriben solo durante la inicialización marcados como de solo lectura después de la inicialización (p.ej.,
__ro_after_init
). - [SR} SE RECOMIENDA ENCARECIDAMENTE implementar la verificación de límites de tamaño de objetos estáticos y dinámicos de copias entre el espacio del usuario y el espacio del kernel (p.ej.,
CONFIG_HARDENED_USERCOPY
). - [SR] SE RECOMIENDA ENCARECIDAMENTE que nunca se ejecute memoria del espacio del usuario cuando se ejecute en el kernel (p.ej., PXN de hardware o emulado a través de
CONFIG_CPU_SW_DOMAIN_PAN
oCONFIG_ARM64_SW_TTBR0_PAN
). - [SR] SE RECOMIENDA ENCARECIDAMENTE nunca leer ni escribir memoria del espacio del usuario en el kernel fuera de las APIs de acceso normales de usercopy (p.ej., PAN de hardware o emulado a través de
CONFIG_CPU_SW_DOMAIN_PAN
oCONFIG_ARM64_SW_TTBR0_PAN
). - [SR] SE RECOMIENDA ENCARECIDAMENTE aleatorizar el diseño del código y la memoria del kernel, y evitar las exposiciones que comprometan la aleatorización (p.ej.,
CONFIG_RANDOMIZE_BASE
con entropía del cargador de arranque a través de/chosen/kaslr-seed Device Tree node
oEFI_RNG_PROTOCOL
).
Si las implementaciones de dispositivos usan un kernel de Linux, deben cumplir con lo siguiente:
- [C-1-1] SE DEBE implementar SELinux.
- [C-1-2] DEBE establecer SELinux en modo de aplicación global.
- [C-1-3] Se DEBEN configurar todos los dominios en modo de aplicación. No se permiten dominios en modo permisivo, incluidos los dominios específicos de un dispositivo o proveedor.
- [C-1-4] NO DEBE modificar, omitir ni reemplazar las reglas neverallow presentes en la carpeta system/sepolicy proporcionada en el Proyecto de código abierto de Android (AOSP) upstream, y la política DEBE compilarse con todas las reglas neverallow presentes, tanto para los dominios SELinux del AOSP como para los dominios específicos del dispositivo o del proveedor.
- DEBE conservar la política de SELinux predeterminada que se proporciona en la carpeta system/sepolicy del Proyecto de código abierto de Android upstream y solo agregar más a esta política para su propia configuración específica del dispositivo.
Si las implementaciones de dispositivos usan un kernel que no es de Linux, deben cumplir con lo siguiente:
- [C-2-1] DEBE usar un sistema de control de acceso obligatorio que sea equivalente a SELinux.
9.8. Privacidad
9.8.1. Historial de uso
Android almacena el historial de las elecciones del usuario y lo administra con UsageStatsManager.
Implementaciones del dispositivo:
- [C-0-1] DEBE mantener un período de retención razonable de dicho historial del usuario.
- [SR] Se RECOMIENDA ENCARECIDAMENTE mantener el período de retención de 14 días tal como está configurado de forma predeterminada en la implementación del AOSP.
9.8.2. Grabando
Si las implementaciones de dispositivos incluyen funciones en el sistema que capturan el contenido que se muestra en la pantalla o graban el flujo de audio que se reproduce en el dispositivo, deben cumplir con lo siguiente:
- [C-1-1] DEBE mostrar una notificación continua al usuario cada vez que esta función esté habilitada y capture o grabe de forma activa.
Si las implementaciones de dispositivos incluyen un componente habilitado de forma predeterminada que puede grabar audio ambiental para inferir información útil sobre el contexto del usuario, deben cumplir con lo siguiente:
- [C-2-1] NO DEBE almacenar en el almacenamiento persistente del dispositivo ni transmitir fuera del dispositivo el audio sin procesar grabado ni ningún formato que se pueda convertir en el audio original o en una copia casi exacta, excepto con el consentimiento explícito del usuario.
9.8.3. Conectividad
Si las implementaciones de dispositivos tienen un puerto USB con compatibilidad con el modo periférico USB, deben cumplir con lo siguiente:
- [C-1-1] DEBE presentar una interfaz de usuario que solicite el consentimiento del usuario antes de permitir el acceso al contenido del almacenamiento compartido a través del puerto USB.
9.8.4. Tráfico de red
Implementaciones del dispositivo:
- [C-0-1] DEBE preinstalar los mismos certificados raíz para el almacén de la autoridad certificadora (CA) de confianza del sistema que los proporcionados en el proyecto de código abierto de Android upstream.
- [C-0-2] DEBE incluir un almacén de AC raíz del usuario vacío.
- [C-0-3] DEBE mostrar una advertencia al usuario que indique que se puede supervisar el tráfico de red cuando se agrega una CA raíz del usuario.
Si el tráfico del dispositivo se enruta a través de una VPN, las implementaciones del dispositivo deben cumplir con lo siguiente:
- [C-1-1] DEBE mostrar una advertencia al usuario que indique una de las siguientes opciones:
- Es posible que se supervise ese tráfico de red.
- Ese tráfico de red se enruta a través de la aplicación de VPN específica que proporciona la VPN.
Si las implementaciones de dispositivos tienen un mecanismo, habilitado de forma predeterminada, que enruta el tráfico de datos de red a través de un servidor proxy o una puerta de enlace de VPN (por ejemplo, precargando un servicio de VPN con android.permission.CONTROL_VPN
otorgado), deben cumplir con lo siguiente:
- [C-2-1] DEBE solicitar el consentimiento del usuario antes de habilitar ese mecanismo, a menos que el Controlador de políticas del dispositivo habilite esa VPN a través de
DevicePolicyManager.setAlwaysOnVpnPackage()
, en cuyo caso el usuario no necesita proporcionar un consentimiento independiente, sino que SOLO DEBE recibir una notificación.
9.9. Encriptación del almacenamiento de datos
Si las implementaciones de dispositivos admiten una pantalla de bloqueo segura, como se describe en la sección 9.11.1, deben cumplir con lo siguiente:
- [C-1-1] DEBE admitir la encriptación del almacenamiento de datos privados de la aplicación (
/data partition
), así como la partición de almacenamiento compartido de la aplicación (/sdcard partition
) si es una parte permanente y no extraíble del dispositivo.
Si las implementaciones de dispositivos admiten una pantalla de bloqueo segura, como se describe en la sección 9.11.1, y admiten la encriptación del almacenamiento de datos con un rendimiento criptográfico del Estándar de encriptación avanzada (AES) superior a 50 MiB/s, deben cumplir con lo siguiente:
-
[C-2-1] DEBE habilitar la encriptación del almacenamiento de datos de forma predeterminada cuando el usuario haya completado la experiencia de configuración inicial. Si las implementaciones de dispositivos ya se lanzaron en una versión anterior de Android con la encriptación inhabilitada de forma predeterminada, ese dispositivo no puede cumplir con el requisito a través de una actualización de software del sistema y, por lo tanto, PUEDE estar exento.
-
DEBE cumplir con el requisito de encriptación de almacenamiento de datos anterior a través de la implementación de la encriptación basada en archivos (FBE).
9.9.1. Inicio directo
Implementaciones del dispositivo:
-
[C-0-1] DEBE implementar las APIs del modo de inicio directo, incluso si no admiten el cifrado de almacenamiento.
-
[C-0-2] Los intents
ACTION_LOCKED_BOOT_COMPLETED
yACTION_USER_UNLOCKED
AÚN SE DEBEN transmitir para indicar a las aplicaciones compatibles con el inicio directo que las ubicaciones de almacenamiento encriptado por dispositivo (DE) y encriptado por credenciales (CE) están disponibles para el usuario.
9.9.2. Encriptación basada en archivos
Si las implementaciones de dispositivos admiten el FBE, deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE iniciarse sin solicitarle credenciales al usuario y permitir que las apps compatibles con el inicio directo accedan al almacenamiento encriptado por dispositivo (DE) después de que se transmita el mensaje
ACTION_LOCKED_BOOT_COMPLETED
. - [C-1-2] SOLO DEBE permitir el acceso al almacenamiento encriptado por credenciales (CE) después de que el usuario desbloquee el dispositivo proporcionando sus credenciales (p. ej., contraseña, PIN, patrón o huella dactilar) y se transmita el mensaje
ACTION_USER_UNLOCKED
. - [C-1-3] NO DEBE ofrecer ningún método para desbloquear el almacenamiento protegido por CE sin las credenciales proporcionadas por el usuario.
- [C-1-4] DEBE admitir el inicio verificado y garantizar que las claves de DE estén vinculadas de forma criptográfica a la raíz de confianza de hardware del dispositivo.
- [C-1-5] DEBE admitir la encriptación del contenido de archivos con AES y una longitud de clave de 256 bits en modo XTS.
-
[C-1-6] DEBE admitir la encriptación del nombre de archivo con AES y una longitud de clave de 256 bits en el modo CBC-CTS.
-
Las claves que protegen las áreas de almacenamiento de CE y DE:
-
[C-1-7] DEBE estar vinculada de forma criptográfica a un almacén de claves respaldado por hardware.
- [C-1-8] Las claves de CE DEBEN estar vinculadas a las credenciales de la pantalla de bloqueo del usuario.
- [C-1-9] Las claves de CE DEBEN estar vinculadas a un código predeterminado cuando el usuario no haya especificado credenciales de pantalla de bloqueo.
-
[C-1-10] DEBE ser único y distinto, es decir, la clave de CE o DE de ningún usuario debe coincidir con la clave de CE o DE de ningún otro usuario.
-
[C-1-11] Se DEBEN usar los algoritmos de cifrado, las longitudes de clave y los modos compatibles de forma obligatoria de forma predeterminada.
-
DEBE hacer que las apps esenciales precargadas (p.ej., Alarma, Teléfono y Mensajes) sean compatibles con el inicio directo.
- Es POSIBLE que admita otros algoritmos de cifrado, longitudes de clave y modos para la encriptación del contenido y el nombre de los archivos.
El proyecto de código abierto de Android upstream proporciona una implementación preferida de esta función basada en la función de encriptación ext4 del kernel de Linux.
9.9.3. Encriptación de disco completo
Si las implementaciones de dispositivos admiten la encriptación de disco completo (FDE), deben cumplir con los siguientes requisitos:
- [C-1-1] DEBE usar AES con una clave de 128 bits (o más) y un modo diseñado para el almacenamiento (por ejemplo, AES-XTS, AES-CBC-ESSIV).
- [C-1-2] DEBE usar un código predeterminado para proteger la clave de encriptación y NO DEBE escribir la clave de encriptación en el almacenamiento en ningún momento sin encriptar.
- [C-1-3] DEBE proporcionar al usuario la posibilidad de encriptar con AES la clave de encriptación, excepto cuando esté en uso activo, con las credenciales de la pantalla de bloqueo extendidas con un algoritmo de extensión lento (p.ej., PBKDF2 o scrypt).
- [C-1-4] El algoritmo de expansión de contraseñas predeterminado anterior DEBE estar vinculado de forma criptográfica a ese almacén de claves cuando el usuario no haya especificado credenciales de pantalla de bloqueo o haya inhabilitado el uso del código para la encriptación, y el dispositivo proporcione un almacén de claves con copia de seguridad en hardware.
- [C-1-5] NO DEBE enviar la clave de encriptación fuera del dispositivo (incluso cuando esté protegida con la contraseña del usuario o la clave vinculada al hardware).
El proyecto de código abierto de Android upstream proporciona una implementación preferida de esta función, basada en la función dm-crypt del kernel de Linux.
9.10. Integridad del dispositivo
Los siguientes requisitos garantizan la transparencia del estado de la integridad del dispositivo. Implementaciones del dispositivo:
- [C-0-1] DEBE informar correctamente a través del método de la API del sistema
PersistentDataBlockManager.getFlashLockState()
si el estado del bootloader permite la escritura de la imagen del sistema. El estadoFLASH_LOCK_UNKNOWN
se reserva para las implementaciones de dispositivos que se actualizan desde una versión anterior de Android en la que no existía este nuevo método de la API del sistema.
El inicio verificado es una función que garantiza la integridad del software del dispositivo. Si la implementación de un dispositivo admite la función, se cumplen las siguientes condiciones:
- [C-1-1] DEBE declarar la marca de función de la plataforma
android.software.verified_boot
. - [C-1-2] DEBE realizar la verificación en cada secuencia de inicio.
- [C-1-3] DEBE iniciar la verificación desde una clave de hardware inmutable que sea la raíz de confianza y llegar hasta la partición del sistema.
- [C-1-4] DEBE implementar cada etapa de verificación para comprobar la integridad y autenticidad de todos los bytes en la siguiente etapa antes de ejecutar el código en la siguiente etapa.
- [C-1-5] DEBE usar algoritmos de verificación tan seguros como las recomendaciones actuales del NIST para los algoritmos de hash (SHA-256) y los tamaños de clave pública (RSA-2048).
- [C-1-6] NO DEBE permitir que se complete el inicio cuando falla la verificación del sistema, a menos que el usuario acepte intentar el inicio de todos modos, en cuyo caso NO se deben usar los datos de los bloques de almacenamiento no verificados.
- [C-1-7] NO DEBE permitir que se modifiquen las particiones verificadas en el dispositivo, a menos que el usuario haya desbloqueado explícitamente el cargador de arranque.
- [SR] Si hay varios chips discretos en el dispositivo (p.ej., radio, procesador de imágenes especializado), se RECOMIENDA ENCARECIDAMENTE que el proceso de arranque de cada uno de esos chips verifique cada etapa al arrancar.
- [SR] SE RECOMIENDA ENCARECIDAMENTE usar almacenamiento a prueba de manipulaciones: para cuando el bootloader esté desbloqueado. El almacenamiento a prueba de manipulaciones significa que el cargador de arranque puede detectar si se manipuló el almacenamiento desde el HLOS (sistema operativo de alto nivel).
- [SR] SE RECOMIENDA ENCARECIDAMENTE que se le solicite al usuario, mientras usa el dispositivo, que confirme físicamente antes de permitir una transición del modo de bootloader bloqueado al modo de bootloader desbloqueado.
- [SR] SE RECOMIENDA ENCARECIDAMENTE implementar la protección contra reversión para el HLOS (p.ej., particiones de arranque y del sistema) y usar almacenamiento a prueba de manipulaciones para almacenar los metadatos que se usan para determinar la versión mínima permitida del SO.
- DEBE implementar protección contra reversiones para cualquier componente con firmware persistente (p.ej., módem, cámara) y DEBE usar almacenamiento a prueba de manipulaciones para almacenar los metadatos que se usan para determinar la versión mínima permitida.
El Proyecto de código abierto de Android upstream proporciona una implementación preferida de esta función en el repositorio external/avb/
, que se puede integrar en el cargador de arranque que se usa para cargar Android.
Implementaciones de dispositivos con un rendimiento criptográfico del estándar de encriptación avanzada (AES) superior a 50 MiB/s:
- [C-2-1] DEBE admitir el inicio verificado para la integridad del dispositivo.
Si ya se lanzó la implementación de un dispositivo sin admitir el inicio verificado en una versión anterior de Android, ese dispositivo no puede agregar compatibilidad con esta función con una actualización de software del sistema y, por lo tanto, está exento del requisito.
9.11. Claves y credenciales
El sistema Android Keystore permite que los desarrolladores de apps almacenen claves criptográficas en un contenedor y las usen en operaciones criptográficas a través de la API de KeyChain o la API de Keystore. Implementaciones del dispositivo:
- [C-0-1] DEBE permitir la importación de más de 8,192 claves como mínimo.
- [C-0-2] La autenticación de la pantalla de bloqueo DEBE limitar la frecuencia de los intentos y DEBE tener un algoritmo de retirada exponencial. Después de 150 intentos fallidos, la demora DEBE ser de al menos 24 horas por intento.
- NO DEBE limitar la cantidad de claves que se pueden generar
Cuando la implementación del dispositivo admite una pantalla de bloqueo segura, sucede lo siguiente:
- [C-1-1] DEBE hacer una copia de seguridad de la implementación del almacén de claves con hardware seguro.
- [C-1-2] DEBE tener implementaciones de los algoritmos criptográficos RSA, AES, ECDSA y HMAC, y las funciones hash de la familia MD5, SHA1 y SHA-2 para admitir correctamente los algoritmos admitidos del sistema Android Keystore en un área aislada de forma segura del código que se ejecuta en el kernel y en niveles superiores. El aislamiento seguro DEBE bloquear todos los mecanismos potenciales por los que el código del kernel o del espacio de usuario podría acceder al estado interno del entorno aislado, incluido el DMA. El Proyecto de código abierto de Android (AOSP) upstream cumple con este requisito a través de la implementación de Trusty, pero otra solución basada en ARM TrustZone o una implementación segura revisada por terceros de un aislamiento adecuado basado en hipervisor son opciones alternativas.
- [C-1-3] DEBE realizar la autenticación de la pantalla de bloqueo en el entorno de ejecución aislado y, solo si se realiza correctamente, permitir que se usen las claves vinculadas a la autenticación. El Proyecto de código abierto de Android upstream proporciona la capa de abstracción de hardware (HAL) de Gatekeeper y Trusty, que se pueden usar para satisfacer este requisito.
- [C-1-4] DEBE admitir la certificación de claves en la que la clave de firma de certificación esté protegida por hardware seguro y la firma se realice en hardware seguro. Las claves de firma de certificación DEBEN compartirse en una cantidad de dispositivos lo suficientemente grande como para evitar que se usen como identificadores de dispositivos. Una forma de cumplir con este requisito es compartir la misma clave de certificación, a menos que se produzcan al menos 100,000 unidades de un SKU determinado. Si se producen más de 100,000 unidades de un SKU, se PUEDE usar una clave diferente para cada 100,000 unidades.
Ten en cuenta que, si la implementación de un dispositivo ya se lanzó en una versión anterior de Android, dicho dispositivo está exento del requisito de tener un almacén de claves respaldado por hardware y admitir la certificación de claves, a menos que declare la función android.hardware.fingerprint
, que requiere un almacén de claves respaldado por hardware.
9.11.1. Pantalla de bloqueo segura
Si las implementaciones de dispositivos tienen una pantalla de bloqueo segura y uno o más agentes de confianza que implementan la API de TrustAgentService
System, entonces:
- [C-1-1] DEBE indicar al usuario en la interfaz de usuario de Configuración y pantalla de bloqueo las situaciones en las que se pospone el bloqueo automático de la pantalla o el agente de confianza puede desbloquear el bloqueo de pantalla. El AOSP cumple con el requisito mostrando una descripción de texto para los menús "Parámetro de configuración de bloqueo automático" y "Parámetro de configuración de bloqueo instantáneo con el botón de encendido", y un ícono distinguible en la pantalla de bloqueo.
- [C-1-2] DEBE respetar y, por completo, implementar todas las APIs de agentes de confianza en la clase
DevicePolicyManager
, como la constanteKEYGUARD_DISABLE_TRUST_AGENTS
. - [C-1-3] NO DEBE implementar por completo la función
TrustAgentService.addEscrowToken()
en un dispositivo que se use como dispositivo personal principal (p.ej., de mano), pero PUEDE implementar por completo la función en implementaciones de dispositivos que se suelen compartir. - [C-1-4] DEBE encriptar los tokens agregados por
TrustAgentService.addEscrowToken()
antes de almacenarlos en el dispositivo. - [C-1-5] NO DEBE almacenar la clave de encriptación en el dispositivo.
- [C-1-6] DEBE informar al usuario sobre las implicaciones de seguridad antes de habilitar el token de depósito en garantía para desencriptar el almacenamiento de datos.
Si las implementaciones de dispositivos agregan o modifican los métodos de autenticación para desbloquear la pantalla de bloqueo, para que dicho método de autenticación se considere una forma segura de bloquear la pantalla, debe cumplir con los siguientes requisitos:
- [C-2-1] DEBE ser el método de autenticación del usuario como se describe en Solicita la autenticación del usuario para el uso de la clave.
- [C-2-2] DEBE desbloquear todas las claves para que una app de desarrollador externa las use cuando el usuario desbloquee la pantalla de bloqueo segura. Por ejemplo, todas las claves DEBEN estar disponibles para una app de desarrollador externa a través de las APIs pertinentes, como
createConfirmDeviceCredentialIntent
ysetUserAuthenticationRequired
.
Si las implementaciones de dispositivos agregan o modifican los métodos de autenticación para desbloquear la pantalla de bloqueo si se basan en un secreto conocido, para que dicho método de autenticación se considere una forma segura de bloquear la pantalla, deben cumplir con los siguientes requisitos:
- [C-3-1] La entropía de la longitud más corta permitida de las entradas DEBE ser mayor que 10 bits.
- [C-3-2] La entropía máxima de todas las entradas posibles DEBE ser superior a 18 bits.
- [C-3-3] NO DEBE reemplazar ninguno de los métodos de autenticación existentes (PIN,patrón, contraseña) implementados y proporcionados en AOSP.
- [C-3-4] DEBE inhabilitarse cuando la aplicación del controlador de política de dispositivo (DPC) haya establecido la política de calidad de la contraseña a través del método
DevicePolicyManager.setPasswordQuality()
con una constante de calidad más restrictiva quePASSWORD_QUALITY_SOMETHING
.
Si las implementaciones de dispositivos agregan o modifican los métodos de autenticación para desbloquear la pantalla de bloqueo si se basan en un token físico o la ubicación, para que dicho método de autenticación se considere una forma segura de bloquear la pantalla, deben cumplir con los siguientes requisitos:
- [C-4-1] DEBE tener un mecanismo de resguardo para usar uno de los métodos de autenticación principales que se basa en un secreto conocido y cumple con los requisitos para considerarse un bloqueo de pantalla seguro.
- [C-4-2] DEBE inhabilitarse y solo permitir que la autenticación principal desbloquee la pantalla cuando la aplicación del controlador de políticas del dispositivo (DPC) haya establecido la política con el método
DevicePolicyManager.setKeyguardDisabledFeatures(KEYGUARD_DISABLE_TRUST_AGENTS)
o el métodoDevicePolicyManager.setPasswordQuality()
con una constante de calidad más restrictiva quePASSWORD_QUALITY_UNSPECIFIED
. - [C-4-3] Se DEBE solicitar al usuario la autenticación principal (p.ej., PIN, patrón o contraseña) al menos una vez cada 72 horas o menos.
Si las implementaciones de dispositivos agregan o modifican los métodos de autenticación para desbloquear la pantalla de bloqueo según la biometría, para que dicho método de autenticación se considere una forma segura de bloquear la pantalla, debe cumplir con los siguientes requisitos:
- [C-5-1] DEBE tener un mecanismo de resguardo para usar uno de los métodos de autenticación principales que se basa en un secreto conocido y cumple con los requisitos para considerarse una pantalla de bloqueo segura.
- [C-5-2] DEBE inhabilitarse y solo permitir que la autenticación principal desbloquee la pantalla cuando la aplicación del controlador de política de dispositivo (DPC) haya establecido la política de funciones de keguard llamando al método
DevicePolicyManager.setKeyguardDisabledFeatures(KEYGUARD_DISABLE_FINGERPRINT)
. - [C-5-3] DEBE tener una tasa de aceptación falsa igual o mejor que la que se requiere para un sensor de huellas dactilares, como se describe en la sección 7.3.10, o bien DEBE inhabilitarse y solo permitir que la autenticación principal desbloquee la pantalla cuando la aplicación de Device Policy Controller (DPC) haya establecido la política de calidad de la contraseña a través del método
DevicePolicyManager.setPasswordQuality()
con una constante de calidad más restrictiva quePASSWORD_QUALITY_BIOMETRIC_WEAK
. - [C-5-4] Se DEBE solicitar al usuario la autenticación principal (p.ej., PIN, patrón o contraseña) al menos una vez cada 72 horas o menos.
Si las implementaciones de dispositivos agregan o modifican los métodos de autenticación para desbloquear la pantalla de bloqueo y si se usará un método de autenticación de este tipo para desbloquear el keyguard, pero no se tratará como una pantalla de bloqueo segura, entonces:
- [C-6-1] DEBE devolver
false
para los métodosKeyguardManager.isKeyguardSecure()
yKeyguardManager.isDeviceSecure()
. - [C-6-2] DEBE inhabilitarse cuando la aplicación de Device Policy Controller (DPC) haya establecido la política de calidad de la contraseña a través del método
DevicePolicyManager.setPasswordQuality()
con una constante de calidad más restrictiva quePASSWORD_QUALITY_UNSPECIFIED
. - [C-6-3] NO DEBE restablecer los temporizadores de caducidad de contraseña establecidos por
DevicePolicyManager.setPasswordExpirationTimeout()
. - [C-6-4] NO DEBE autenticar el acceso a los almacenes de claves si la aplicación llamó a
KeyGenParameterSpec.Builder.setUserAuthenticationRequired(true)
).
9.12. Eliminación de Datos
Todas las implementaciones de dispositivos:
- [C-0-1] DEBE proporcionar a los usuarios un mecanismo para realizar un "restablecimiento de la configuración de fábrica".
- [C-0-2] Se DEBEN borrar todos los datos generados por el usuario. Es decir, todos los datos, excepto los siguientes:
- La imagen del sistema
- Todos los archivos del sistema operativo que requiere la imagen del sistema
- [C-0-3] DEBE borrar los datos de manera que satisfaga los estándares de la industria pertinentes, como NIST SP800-88.
- [C-0-4] DEBE activar el proceso de "Restablecimiento de la configuración de fábrica" anterior cuando la app de controlador de política de dispositivo del usuario principal llame a la API de
DevicePolicyManager.wipeData()
. - PUEDE proporcionar una opción de borrado rápido de datos que solo realice un borrado lógico de los datos.
9.13. Modo de inicio seguro
Android proporciona el modo seguro, que permite a los usuarios iniciar el dispositivo en un modo en el que solo se pueden ejecutar las apps del sistema preinstaladas y se inhabilitan todas las apps de terceros. Este modo, conocido como "Modo de arranque seguro", le permite al usuario desinstalar apps de terceros potencialmente dañinas.
Las implementaciones de dispositivos son las siguientes:
- [SR] SE RECOMIENDA ENCARECIDAMENTE implementar el modo de inicio seguro.
Si las implementaciones de dispositivos implementan el modo de inicio seguro, deben hacer lo siguiente:
-
[C-1-1] DEBE proporcionar al usuario una opción para ingresar al modo seguro de forma tal que no se interrumpa desde las apps de terceros instaladas en el dispositivo, excepto cuando la app de terceros sea un controlador de políticas del dispositivo y haya establecido el parámetro
UserManager.DISALLOW_SAFE_BOOT
como verdadero. -
[C-1-2] DEBE proporcionar al usuario la capacidad de desinstalar cualquier app de terceros en el modo seguro.
-
DEBE proporcionar al usuario una opción para ingresar al Modo de arranque seguro desde el menú de arranque con un flujo de trabajo diferente al de un arranque normal.
9.14. Aislamiento del sistema del vehículo automotriz
Se espera que los dispositivos Android Automotive intercambien datos con subsistemas críticos del vehículo a través de la HAL del vehículo para enviar y recibir mensajes a través de redes del vehículo, como el bus CAN.
El intercambio de datos se puede proteger implementando funciones de seguridad debajo de las capas del framework de Android para evitar la interacción maliciosa o no intencional con estos subsistemas.
10. Pruebas de compatibilidad de software
Las implementaciones de dispositivos DEBEN aprobar todas las pruebas que se describen en esta sección. Sin embargo, ten en cuenta que ningún paquete de pruebas de software es completamente integral. Por este motivo, se RECOMIENDA ENCARECIDAMENTE a los implementadores de dispositivos que realicen la menor cantidad posible de cambios en la implementación de referencia y preferida de Android disponible en Android Open Source Project. Esto minimizará el riesgo de introducir errores que creen incompatibilidades que requieran volver a trabajar y posibles actualizaciones del dispositivo.
10.1. Conjunto de pruebas de compatibilidad (CTS)
Implementaciones del dispositivo:
-
[C-0-1] DEBE aprobar el Conjunto de pruebas de compatibilidad (CTS) de Android disponible en el Proyecto de código abierto de Android, con el software final de envío en el dispositivo.
-
[C-0-2] DEBE garantizar la compatibilidad en casos de ambigüedad en el CTS y para cualquier reimplementación de partes del código fuente de referencia.
El CTS está diseñado para ejecutarse en un dispositivo real. Al igual que cualquier software, el CTS puede contener errores. El CTS tendrá versiones independientes de esta Definición de compatibilidad, y es posible que se lancen varias revisiones del CTS para Android 8.0.
Implementaciones del dispositivo:
-
[C-0-3] DEBE aprobar la versión más reciente de CTS disponible en el momento en que se complete el software del dispositivo.
-
DEBE usar la implementación de referencia en el árbol de código abierto de Android tanto como sea posible.
10.2. Verificador del CTS
El verificador del CTS se incluye en el Conjunto de pruebas de compatibilidad y está diseñado para que un operador humano lo ejecute y pruebe la funcionalidad que no puede probar un sistema automatizado, como el funcionamiento correcto de una cámara y los sensores.
Implementaciones del dispositivo:
- [C-0-1] DEBE ejecutar correctamente todos los casos aplicables en el verificador de CTS.
El verificador del CTS tiene pruebas para muchos tipos de hardware, incluido hardware opcional.
Implementaciones del dispositivo:
- [C-0-2] DEBE aprobar todas las pruebas del hardware que posee. Por ejemplo, si un dispositivo tiene un acelerómetro, DEBE ejecutar correctamente el caso de prueba del acelerómetro en el CTS Verifier.
Los casos de prueba para las funciones que se indican como opcionales en este documento de Definición de Compatibilidad SE PUEDEN omitir.
- [C-0-2] Cada dispositivo y cada compilación DEBEN ejecutar correctamente el CTS Verifier, como se indicó anteriormente. Sin embargo, dado que muchas compilaciones son muy similares, no se espera que los implementadores de dispositivos ejecuten explícitamente el CTS Verifier en compilaciones que solo difieran de manera trivial. Específicamente, las implementaciones de dispositivos que difieren de una implementación que aprobó el verificador del CTS solo por el conjunto de configuraciones regionales incluidas, la marca, etcétera, PUEDEN omitir la prueba del verificador del CTS.
11. Software actualizable
- [C-0-1] Las implementaciones de dispositivos DEBEN incluir un mecanismo para reemplazar la totalidad del software del sistema. El mecanismo no necesita realizar actualizaciones “en vivo”, es decir, ES POSIBLE que se requiera un reinicio del dispositivo.
Se puede usar cualquier método, siempre y cuando pueda reemplazar la totalidad del software preinstalado en el dispositivo. Por ejemplo, cualquiera de los siguientes enfoques satisfará este requisito:
- Descargas “inalámbricas (OTA)” con actualización sin conexión a través del reinicio.
- Actualizaciones “vinculadas” por USB desde una PC host
-
Actualizaciones “sin conexión” a través de un reinicio y una actualización desde un archivo en un almacenamiento extraíble
-
[C-0-2] El mecanismo de actualización que se use DEBE admitir actualizaciones sin borrar los datos del usuario. Es decir, el mecanismo de actualización DEBE conservar los datos privados de la aplicación y los datos compartidos de la aplicación. Ten en cuenta que el software de Android upstream incluye un mecanismo de actualización que satisface este requisito.
Si las implementaciones del dispositivo incluyen compatibilidad con una conexión de datos sin medición, como el perfil 802.11 o PAN (red de área personal) de Bluetooth, entonces:
- [C-1-1] DEBE admitir descargas OTA con actualización sin conexión a través del reinicio.
En el caso de las implementaciones de dispositivos que se lanzan con Android 6.0 y versiones posteriores, el mecanismo de actualización DEBE admitir la verificación de que la imagen del sistema es idéntica en términos binarios al resultado esperado después de una actualización OTA. La implementación de OTA basada en bloques en el Proyecto de código abierto de Android upstream, que se agregó desde Android 5.1, satisface este requisito.
Además, las implementaciones de dispositivos DEBEN admitir actualizaciones del sistema A/B. El AOSP implementa esta función con el HAL de control de arranque.
Si se encuentra un error en la implementación de un dispositivo después de su lanzamiento, pero dentro de su vida útil razonable, que se determina en consulta con el equipo de compatibilidad de Android y que afecta la compatibilidad de las aplicaciones de terceros, se hará lo siguiente:
- [C-2-1] El implementador del dispositivo DEBE corregir el error a través de una actualización de software disponible que se pueda aplicar según el mecanismo que se acaba de describir.
Android incluye funciones que permiten que la app de propietario del dispositivo (si está presente) controle la instalación de actualizaciones del sistema. Si el subsistema de actualización del sistema para dispositivos informa android.software.device_admin, entonces:
- [C-3-1] DEBE implementar el comportamiento que se describe en la clase SystemUpdatePolicy.
12. Registro de cambios del documento
Para obtener un resumen de los cambios en la Definición de compatibilidad en esta versión, haz lo siguiente:
A continuación, se incluye un resumen de los cambios en las secciones para individuos:
- Introducción
- Tipos de dispositivos
- Software
- Empaquetado de la aplicación
- Multimedia
- Herramientas y opciones para desarrolladores
- Compatibilidad de hardware
- Rendimiento y poder
- Modelo de seguridad
- Pruebas de compatibilidad de software
- Software Actualizable
- Document Changelog
- Comunicarte con nosotros
12.1. Sugerencias para ver el registro de cambios
Los cambios se marcan de la siguiente manera:
-
CDD
Cambios sustanciales en los requisitos de compatibilidad. -
Documentos
Cambios cosméticos o relacionados con la compilación.
Para una mejor visualización, agrega los parámetros de URL pretty=full
y no-merges
a las URLs de tu registro de cambios.
13. Comunícate con nosotros
Puedes unirte al foro de compatibilidad con Android y solicitar aclaraciones o plantear cualquier problema que creas que el documento no aborda.