Revisión 1
Última actualización: 27 de noviembre de 2013
Copyright © 2013, Google Inc. Todos los derechos reservados.
compatibility@android.com
Índice
2. Recursos
3. Software
3.2. Compatibilidad de API flexible
3.3. Compatibilidad con la API nativa
3.4. Compatibilidad web
3.5. Compatibilidad de comportamiento de las APIs
3.6. Espacios de nombres de la API
3.7. Compatibilidad con máquinas virtuales
3.8. Compatibilidad de la interfaz de usuario
3.8.2. Widgets
3.8.3. Notificaciones
3.8.4. Buscar
3.8.5. Toasts
3.8.6. Temas
3.8.7. Fondos de pantalla animados
3.8.8. Pantalla de aplicaciones recientes
3.8.9. Administración de entradas
3.8.10. Control remoto multimedia de la pantalla de bloqueo
3.8.11. Dreams
3.8.12. Ubicación
3.8.13. Unicode
3.10 Accesibilidad
3.11 Texto a voz
5. Compatibilidad multimedia
5.2. Codificación de video
5.3. Decodificación de video
5.4. Grabación de audio
5.5. Latencia de audio
5.6. Protocolos de red
7. Compatibilidad de hardware
7.1.2. Métricas de Display
7.1.3. Orientación de la pantalla
7.1.4. Aceleración de gráficos 2D y 3D
7.1.5. Modo de compatibilidad de aplicaciones heredadas
7.1.6. Tipos de pantallas
7.1.7. Tecnología de la pantalla
7.1.8. Pantallas externas
7.2.2. Navegación sin tacto
7.2.3. Teclas de navegación
7.2.4. Entrada táctil
7.2.5. Entrada táctil falsa
7.2.6. Micrófono
7.3.2. Magnetómetro
7.3.3. GPS
7.3.4. Giroscopio
7.3.5. Barómetro
7.3.6. Termómetro
7.3.7. Fotómetro
7.3.8. Sensor de proximidad
7.4.2. IEEE 802.11 (Wi-Fi)
7.4.3. Bluetooth
7.4.4. Comunicación de campo cercano
7.4.5. Capacidad de red mínima
7.4.6. Configuración de sincronización
7.5.2. Cámara frontal
7.5.3. Comportamiento de la API de la cámara
7.5.4. Orientación de la cámara
7.7. USB
9. Compatibilidad de modelos de seguridad
9.2. UID y aislamiento de procesos
9.3. Permisos del sistema de archivos
9.4. Entornos de ejecución alternativos
9.5. Compatibilidad con varios usuarios
9.6. Advertencia sobre SMS premium
9.7. Funciones de seguridad del kernel
9.8. Privacidad
9.9. Encriptación de disco completo
11. Software actualizable
12. Registro de cambios del documento
13. Comunícate con nosotros
1. Introducción
En este documento, se enumeran los requisitos que deben cumplirse para que los dispositivos sean compatibles con Android 4.4.
El uso de “debes”, “no debes”, “obligatorio”, “deberás”, “no deberás”, “deberías”, “no deberías”, “recomendado”, “puedes” y “opcional” se realiza de acuerdo con el estándar de la IETF definido en RFC2119 [Recursos, 1].
En el uso que se hace de este documento, un "implementador de dispositivos" o "implementador" es una persona o una organización que desarrolla una solución de hardware o software que ejecuta Android 4.4. Una “implementación de dispositivos” o “implementación” es la solución de hardware y software que se desarrolló.
Para que se consideren compatibles con Android 4.4, 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 que se describen en la Sección 10 no se mencionan, son 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 [Recursos, 3] 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, en teoría, algunos componentes se pueden reemplazar por implementaciones alternativas, se desaconseja 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 completa 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.
2. Recursos
- Niveles de requisitos de la RFC2119 del IETF: http://www.ietf.org/rfc/rfc2119.txt
- Descripción general del programa de compatibilidad de Android: http://source.android.com/docs/compatibility/index.html
- Proyecto de código abierto de Android: http://source.android.com/
- Definiciones y documentación de la API: http://developer.android.com/reference/packages.html
- Referencia de permisos de Android: http://developer.android.com/reference/android/Manifest.permission.html
- Referencia de android.os.Build: http://developer.android.com/reference/android/os/Build.html
- Cadenas de versión permitidas de Android 4.4: http://source.android.com/docs/compatibility/4.4/versions.html
- Renderscript: http://developer.android.com/guide/topics/graphics/renderscript.html
- Aceleración de hardware: http://developer.android.com/guide/topics/graphics/hardware-accel.html
- Clase android.webkit.WebView: http://developer.android.com/reference/android/webkit/WebView.html
- HTML5: http://www.whatwg.org/specs/web-apps/current-work/multipage/
- Funciones sin conexión de HTML5: http://dev.w3.org/html5/spec/Overview.html#offline
- Etiqueta de video HTML5: http://dev.w3.org/html5/spec/Overview.html#video
- API de Geolocation de HTML5/W3C: http://www.w3.org/TR/geolocation-API/
- API de almacenamiento web de HTML5/W3C: http://www.w3.org/TR/webstorage/
- API de IndexedDB de HTML5/W3C: http://www.w3.org/TR/IndexedDB/
- Especificación de la máquina virtual de Dalvik: Disponible en el código fuente de Android, en dalvik/docs
- AppWidgets: http://developer.android.com/guide/practices/ui_guidelines/widget_design.html
- Notificaciones: http://developer.android.com/guide/topics/ui/notifiers/notifications.html
- Recursos de la aplicación: http://code.google.com/android/reference/available-resources.html
- Guía de estilo de íconos de la barra de estado: http://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar.html
- Administrador de búsqueda: http://developer.android.com/reference/android/app/SearchManager.html
- Toasts: http://developer.android.com/reference/android/widget/Toast.html
- Temas: http://developer.android.com/guide/topics/ui/themes.html
- Clase R.style: http://developer.android.com/reference/android/R.style.html
- Fondos de pantalla animados: https://android-developers.googleblog.com/2010/02/live-wallpapers.html
- Administración de dispositivos Android: http://developer.android.com/guide/topics/admin/device-admin.html
- Referencia de DevicePolicyManager: http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html
- APIs de Android Accessibility Service: http://developer.android.com/reference/android/accessibilityservice/package-summary.html
- APIs de accesibilidad de Android: http://developer.android.com/reference/android/view/accessibility/package-summary.html
- Proyecto Eyes Free: http://code.google.com/p/eyes-free
- APIs de Text-to-Speech: http://developer.android.com/reference/android/speech/tts/package-summary.html
- Documentación de herramientas de referencia (para adb, aapt, ddms y systrace): http://developer.android.com/guide/developing/tools/index.html
- Descripción del archivo APK de Android: http://developer.android.com/guide/topics/fundamentals.html
- Archivos de manifiesto: http://developer.android.com/guide/topics/manifest/manifest-intro.html
- Herramienta de prueba de Monkey: https://developer.android.com/studio/test/other-testing-tools/monkey
- Clase android.content.pm.PackageManager de Android y lista de funciones de hardware: http://developer.android.com/reference/android/content/pm/PackageManager.html
- Compatibilidad con varias pantallas: http://developer.android.com/guide/practices/screens_support.html
- android.util.DisplayMetrics: http://developer.android.com/reference/android/util/DisplayMetrics.html
- android.content.res.Configuration: http://developer.android.com/reference/android/content/res/Configuration.html
- android.hardware.SensorEvent: http://developer.android.com/reference/android/hardware/SensorEvent.html
- API de Bluetooth: http://developer.android.com/reference/android/bluetooth/package-summary.html
- Protocolo de envío de NDEF: http://source.android.com/docs/compatibility/ndef-push-protocol.pdf
- MIFARE MF1S503X: http://www.nxp.com/documents/data_sheet/MF1S503x.pdf
- MIFARE MF1S703X: http://www.nxp.com/documents/data_sheet/MF1S703x.pdf
- MIFARE MF0ICU1: http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf
- MIFARE MF0ICU2: http://www.nxp.com/documents/short_data_sheet/MF0ICU2_SDS.pdf
- MIFARE AN130511: http://www.nxp.com/documents/application_note/AN130511.pdf
- MIFARE AN130411: http://www.nxp.com/documents/application_note/AN130411.pdf
- API de orientación de la cámara: http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)
- Cámara: http://developer.android.com/reference/android/hardware/Camera.html
- Accesorios abiertos de Android: http://developer.android.com/guide/topics/usb/accessory.html
- API de host USB: http://developer.android.com/guide/topics/usb/host.html
- Referencia de seguridad y permisos de Android: http://developer.android.com/guide/topics/security/permissions.html
- Apps para Android: http://code.google.com/p/apps-for-android
- Android DownloadManager: http://developer.android.com/reference/android/app/DownloadManager.html
- Transferencia de archivos de Android: http://www.android.com/filetransfer
- Formatos multimedia de Android: http://developer.android.com/guide/appendix/media-formats.html
- Protocolo de borrador de HTTP Live Streaming: http://tools.ietf.org/html/draft-pantos-http-live-streaming-03
- NFC Connection Handover: http://www.nfc-forum.org/specs/spec_list/#conn_handover
- Vinculación simple segura por Bluetooth con NFC: http://www.nfc-forum.org/resources/AppDocs/NFCForum_AD_BTSSP_1_0.pdf
- API de Wi-Fi Multicast: http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html
- Acción de asistencia: http://developer.android.com/reference/android/content/Intent.html#ACTION_ASSIST
- Especificación de carga USB: http://www.usb.org/developers/devclass_docs/USB_Battery_Charging_1.2.pdf
- Android Beam: http://developer.android.com/guide/topics/nfc/nfc.html
- Audio USB de Android: http://developer.android.com/reference/android/hardware/usb/UsbConstants.html#USB_CLASS_AUDIO
- Configuración de uso compartido de NFC de Android: http://developer.android.com/reference/android/provider/Settings.html#ACTION_NFCSHARING_SETTINGS
- Wi-Fi Direct (Wi-Fi P2P): http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html
- Widget de pantalla de bloqueo y principal: http://developer.android.com/reference/android/appwidget/AppWidgetProviderInfo.html
- Referencia de UserManager: http://developer.android.com/reference/android/os/UserManager.html
- Referencia de almacenamiento externo: /docs/core/storage
- APIs de almacenamiento externo: http://developer.android.com/reference/android/os/Environment.html
- Código corto de SMS: http://en.wikipedia.org/wiki/Short_code
- Cliente de control remoto de contenido multimedia: http://developer.android.com/reference/android/media/RemoteControlClient.html
- Administrador de pantalla: http://developer.android.com/reference/android/hardware/display/DisplayManager.html
- Dreams: http://developer.android.com/reference/android/service/dreams/DreamService.html
- Configuración relacionada con el desarrollo de aplicaciones para Android: http://developer.android.com/reference/android/provider/Settings.html#ACTION_APPLICATION_DEVELOPMENT_SETTINGS
- Cámara: http://developer.android.com/reference/android/hardware/Camera.Parameters.html
- Extensión de EGL: EGL_ANDROID_RECORDABLE: http://www.khronos.org/registry/egl/extensions/ANDROID/EGL_ANDROID_recordable.txt
- API de Motion Event: http://developer.android.com/reference/android/view/MotionEvent.html
- Configuración de entrada táctil: http://source.android.com/docs/core/interaction/input/touch-devices.html
- Unicode 6.1.0: http://www.unicode.org/versions/Unicode6.1.0/
- Compatibilidad con WebView: http://www.chromium.org/
- App de propietario del dispositivo Android: http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#isDeviceOwnerApp(java.lang.String)
- API de WifiManager: http://developer.android.com/reference/android/net/wifi/WifiManager.html
- Requisitos de codificación de hardware de RTC: http://www.webmproject.org/hardware/rtc-coding-requirements/
- Settings.Secure LOCATION_MODE: http://developer.android.com/reference/android/provider/Settings.Secure.html#LOCATION_MODE
- Agente de resolución de contenido: http://developer.android.com/reference/android/content/ContentResolver.html
- SettingInjectorService: http://developer.android.com/reference/android/location/SettingInjectorService.html
- Emulación de tarjetas basada en host: http://developer.android.com/guide/topics/connectivity/nfc/hce.html
- Proveedor de telefonía: http://developer.android.com/reference/android/provider/Telephony.html
Muchos de estos recursos se derivan directamente o indirectamente del SDK de Android y serán funcionalmente idénticos a la información de la documentación de ese SDK. En cualquier caso en el que esta definición de compatibilidad o el conjunto de pruebas de compatibilidad no coincidan con la documentación del SDK, esta última se considerará como fuente de autoridad. Cualquier detalle técnico que se proporcione en las referencias anteriores se considera parte de esta definición de compatibilidad.
3. Software
3.1. Compatibilidad de APIs administradas
El entorno de ejecución administrado (basado en Dalvik) es el vehículo principal para las aplicaciones para 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 la VM administrada. Las implementaciones de dispositivos DEBEN proporcionar implementaciones completas, incluidos todos los comportamientos documentados, de cualquier API documentada que exponga el SDK de Android [Recursos, 4].
Las implementaciones de dispositivos NO DEBEN omitir ninguna API administrada, alterar las interfaces o las firmas de la API, desviarse del comportamiento documentado ni incluir no-ops, excepto cuando esta definición de compatibilidad lo permita de forma específica.
Esta definición de compatibilidad permite que las implementaciones de dispositivos omitan algunos tipos de hardware para los que Android incluye APIs. En esos casos, las APIs DEBEN seguir presentes y comportarse de manera razonable. Consulta la Sección 7 para conocer los requisitos específicos de esta situación.
3.2. Compatibilidad de API flexible
Además de las APIs administradas de la Sección 3.1, Android también incluye una API "soft" 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 momento de la compilación de la aplicación.
3.2.1. Permisos
Los implementadores de dispositivos DEBEN admitir y aplicar todas las constantes de permisos, como se documenta en la página de referencia de permisos [Recursos, 5]. Ten en cuenta que en el artículo 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 una serie de constantes en la clase android.os.Build
[Resources, 6] que tienen como objetivo describir el dispositivo actual. 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 DEBEN cumplir las implementaciones de dispositivos.
Parámetro | Comentarios |
VERSION.RELEASE | Es la versión del sistema Android que se está ejecutando actualmente, en formato legible por humanos. Este campo DEBE tener uno de los valores de cadena definidos en [Recursos, 7]. |
VERSION.SDK | Es la versión del sistema Android que se está ejecutando actualmente, en un formato al que puede acceder el código de la aplicación de terceros. Para Android 4.4, este campo DEBE tener el valor de número entero 19. |
VERSION.SDK_INT | Es la versión del sistema Android que se está ejecutando actualmente, en un formato al que puede acceder el código de la aplicación de terceros. Para Android 4.4, este campo DEBE tener el valor de número entero 19. |
VERSION.INCREMENTAL | Es un valor que elige el implementador del dispositivo y que designa la compilación específica del sistema Android que se está ejecutando actualmente, en formato legible por humanos. Este valor NO DEBE reutilizarse para diferentes compilaciones que se ponen a disposición de 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 una cadena vacía (""). |
JUEGOS DE MESA | Es un valor que elige el implementador del dispositivo que identifica el hardware interno específico que usa el dispositivo, en formato legible por 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 asociado con el dispositivo tal como lo conocen los usuarios finales. DEBEN estar en un formato legible por humanos y DEBEN 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.,_-]+$" .
|
CPU_ABI | Es el 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 | Es el 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 de código 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.,_-]+$" .
|
FINGERPRINT | Es una cadena que identifica de forma inequívoca esta compilación. DEBE ser legible por humanos. DEBE seguir esta plantilla:
$(BRAND)/$(PRODUCT)/$(DEVICE):$(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/$(TAGS) Por ejemplo: acme/myproduct/mydevice:4.4/KRT16/3359:userdebug/test-keys 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, DEBEN reemplazarse 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 | Es el nombre del hardware (de la línea de comandos del kernel o /proc). DEBE ser legible por humanos. 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 exclusiva el host en el que se compiló la compilación, en formato legible por humanos. No hay requisitos sobre el formato específico de este campo, excepto que NO DEBE ser nulo ni una cadena vacía (""). |
ID | Es un identificador que elige 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 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 (""). |
MODELO. | Es un valor que elige el implementador del dispositivo y que contiene el nombre del dispositivo como lo conoce el usuario final. 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 (""). |
PRODUCTO | Es un valor que elige el implementador del dispositivo y que contiene el nombre de desarrollo o el nombre de código del producto específico (SKU) que DEBE ser único dentro de la misma marca. DEBEN ser legibles por humanos, pero no necesariamente están destinados a que los usuarios finales los vean. El valor de este campo DEBE poder codificarse como ASCII de 7 bits y coincidir con la expresión regular "^[a-zA-Z0-9.,_-]+$" .
|
SERIAL | Un número de serie de hardware que DEBE estar disponible. 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 distingue aún más la compilación. Por ejemplo, "unsigned,debug". El valor de este campo DEBE poder codificarse como ASCII de 7 bits y coincidir con la expresión regular "^[a-zA-Z0-9.,_-]+$" . |
TIEMPO | Es un valor que representa la marca de tiempo de 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 entorno de ejecución de Android: "user",
"userdebug" o "eng". El valor de este campo DEBE poder codificarse como ASCII de 7 bits y coincidir con la expresión regular "^[a-zA-Z0-9.,_-]+$" . |
USUARIO | Un 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 una cadena vacía (""). |
3.2.3. Compatibilidad con intents
Las implementaciones de dispositivos DEBEN respetar el sistema de intents de vinculación flexible de Android, como se describe en las siguientes secciones. Cuando se dice que se "respeta", se hace referencia a que el implementador del dispositivo DEBE proporcionar una actividad o un servicio de Android que especifique un filtro de intents coincidente y que se vincule a cada patrón de intents especificado y que implemente el comportamiento correcto.
3.2.3.1. Intents de la aplicación principales
El proyecto upstream de Android define varias aplicaciones principales, como los contactos, el calendario, la galería de fotos, el reproductor de música, etcétera. Los implementadores de dispositivos PUEDEN reemplazar estas aplicaciones por versiones alternativas.
Sin embargo, cualquier versión alternativa DEBE respetar los mismos patrones de intents que proporciona el proyecto upstream. Por ejemplo, si un dispositivo contiene un reproductor de música alternativo, aún debe respetar el patrón de intent que emiten las aplicaciones de terceros para elegir una canción.
Las siguientes aplicaciones se consideran aplicaciones principales del sistema Android:
- Reloj de escritorio
- Navegador
- Calendario
- Contactos
- Galería
- GlobalSearch
- Selector
- Música
- Configuración
Las aplicaciones principales del sistema Android incluyen varios componentes de actividad o servicio que se consideran "públicos". Es decir, el atributo "android:exported" puede estar ausente o tener el valor "true".
Para cada actividad o servicio definido en una de las apps principales del sistema Android que no esté marcada como no pública a través de un atributo android:exported con el valor "false", las implementaciones de dispositivos DEBEN incluir un componente del mismo tipo que implemente los mismos patrones de filtro de intents que la app principal del sistema Android.
En otras palabras, una implementación de dispositivo PUEDE reemplazar las apps principales del sistema Android. Sin embargo, si lo hace, la implementación del dispositivo DEBE admitir todos los patrones de intents definidos por cada app principal del sistema Android que se reemplaza.
3.2.3.2. Anulaciones de intents
Como Android es una plataforma extensible, las implementaciones de dispositivos DEBEN permitir que aplicaciones de terceros anulen cada patrón de intent al que se hace referencia en el artículo 3.2.3.1. La implementación de código abierto de Android upstream lo permite de forma predeterminada. Los implementadores de dispositivos NO DEBEN adjuntar privilegios especiales al uso de estos patrones de Intent por parte de las aplicaciones del sistema ni impedir que las aplicaciones de terceros se vinculen a estos patrones y asuman el control de ellos. Esta prohibición incluye, entre otras, la inhabilitación de la interfaz de usuario "Selector" que permite al usuario elegir entre varias aplicaciones que controlan el mismo patrón de intent.
Sin embargo, las implementaciones de dispositivos PUEDEN proporcionar actividades predeterminadas para patrones de URI específicos (p. ej., http://play.google.com) si la actividad predeterminada proporciona un filtro más específico para el URI de datos. Por ejemplo, un filtro de intents que especifique el URI de datos "http://www.android.com" es más específico que el filtro del navegador para "http://". Las implementaciones de dispositivos DEBEN proporcionar una interfaz de usuario para que los usuarios modifiquen la actividad predeterminada de los intents.
3.2.3.3. Espacios de nombres de intents
Las implementaciones de dispositivos NO DEBEN incluir ningún componente de Android que respete ningún patrón de intent nuevo o intent de transmisión con una ACTION, CATEGORY o alguna otra cadena clave en el espacio de nombres android.* o com.android.*. Los implementadores de dispositivos NO DEBEN incluir ningún componente de Android que respete ningún patrón de intent o intent de transmisión nuevos con una ACTION, CATEGORY o alguna otra cadena clave en un espacio de paquete que pertenezca a otra organización. 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 usan espacios de nombres asociados de forma clara y evidente con su propia organización.
Esta prohibición es análoga a la especificada para las clases del lenguaje Java en el artículo 3.6.
3.2.3.4. Intents de transmisión
Las aplicaciones de terceros dependen de la plataforma para transmitir ciertos intents para notificarles sobre cambios en el entorno de hardware o software. Los dispositivos compatibles con Android DEBEN transmitir los intents de transmisión pública en respuesta a los eventos del sistema adecuados. Los intents de transmisión se describen en la documentación del SDK.
3.2.3.5. Configuración predeterminada de la app
Android 4.4 agrega parámetros de configuración que permiten a los usuarios seleccionar sus aplicaciones predeterminadas de Inicio y SMS. Las implementaciones de dispositivos DEBEN proporcionar un menú de configuración del usuario similar para cada uno, compatible con el patrón de filtro de intents y los métodos de la API que se describen en la documentación del SDK [Recursos, 91].
3.3. Compatibilidad con la API nativa
3.3.1 Interfaces binarias de la aplicación
El código administrado que se ejecuta en Dalvik 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. Como el código nativo depende en gran medida de la tecnología del procesador subyacente, Android define una serie de interfaces binarias de la aplicación (ABI) en el NDK de Android, en el archivo docs/CPU-ARCH-ABIS.html
. Si la implementación de un dispositivo es compatible con una o más ABI definidas, DEBE implementar la compatibilidad con el NDK de Android, como se indica a continuación.
Si una implementación de dispositivo incluye compatibilidad con una ABI de Android, hace lo siguiente:
- DEBEN incluir compatibilidad con el código que se ejecuta en el entorno administrado para llamar al código nativo con la semántica estándar de la interfaz nativa de Java (JNI).
- DEBEN ser compatibles con el código fuente (es decir, compatibles con el encabezado) y con el código binario (para la ABI) con cada biblioteca requerida de la siguiente lista.
- DEBEN informar con precisión la interfaz binaria de la aplicación (ABI) nativa que admite el dispositivo a través de la API de
android.os.Build.CPU_ABI
y los parámetrosandroid.os.Build.CPU_ABI2
. - DEBEN informar, a través de
android.os.Build.CPU_ABI2
, solo las ABI documentadas en la versión más reciente del NDK de Android, en el archivodocs/CPU-ARCH-ABIS.html
. - DEBE informar, a través de
android.os.Build.CPU_ABI
, solo una de las ABI que se indican a continuación. - armeabi-v7a
- x86
- mips
- DEBE compilarse con el código fuente y los archivos de encabezado disponibles en el proyecto de código abierto de Android upstream.
Las siguientes APIs de código nativo DEBEN estar disponibles para las apps que incluyen código nativo:
- libc (biblioteca C)
- libm (biblioteca matemática)
- Compatibilidad mínima con C++
- Interfaz de JNI
- liblog (registro de Android)
- libz (compresión zlib)
- libdl (vinculador dinámico)
- libGLESv1_CM.so (OpenGL ES 1.0)
- libGLESv2.so (OpenGL ES 2.0)
- libGLESv3.so (OpenGL ES 3.0)
- libEGL.so (administración nativa de la superficie de OpenGL)
- libjnigraphics.so
- libOpenSLES.so (Compatibilidad con audio de OpenSL ES 1.0.1)
- libOpenMAXAL.so (compatibilidad con OpenMAX AL 1.0.1)
- libandroid.so (compatibilidad con actividades nativas de Android)
- Compatibilidad con OpenGL, como se describe a continuación
Ten en cuenta que las versiones futuras del NDK de Android pueden admitir ABI adicionales. Si una implementación de dispositivo no es compatible con una ABI predefinida existente, NO DEBE informar la compatibilidad con ninguna ABI.
Ten en cuenta que las implementaciones de dispositivos DEBEN incluir libGLESv3.so y DEBEN vincularse con un symlink (vínculo simbólico) a libGLESv2.so. En las implementaciones de dispositivos que declaran compatibilidad con OpenGL ES 3.0, libGLESv2.so DEBE exportar los símbolos de función de OpenGL ES 3.0, además de los símbolos de función de OpenGL ES 2.0.
La compatibilidad con el código nativo es un desafío. Por este motivo, se debe repetir que se recomienda encarecidamente a los implementadores de dispositivos que usen las implementaciones upstream de las bibliotecas mencionadas anteriormente para garantizar la compatibilidad.
3.4. Compatibilidad web
3.4.1. Compatibilidad con WebView
La implementación de código abierto de Android usa código del proyecto Chromium para implementar android.webkit.WebView
[Resources, 10] . Debido a que no es factible desarrollar un paquete de pruebas integral para un sistema de renderización web, los implementadores de dispositivos DEBEN usar la compilación upstream específica de Chromium en la implementación de WebView. Más precisamente:
- Las implementaciones de
android.webkit.WebView
del dispositivo DEBEN basarse en la compilación de Chromium del proyecto de código abierto de Android upstream para Android 4.4. Esta compilación incluye un conjunto específico de correcciones de funcionalidad y seguridad para WebView. [Recursos, 83] - La cadena de usuario-agente que informa WebView DEBE tener este formato:
Mozilla/5.0 (Linux; Android $(VERSION); $(LOCALE); $(MODEL) Build/$(BUILD)) 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 $(LOCALE) es opcional, DEBE seguir las convenciones de ISO para el código de país y el idioma, y DEBE hacer referencia a la configuración regional actual del dispositivo. Si se omite, también se DEBE quitar el punto y coma final.
- 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 valor de la cadena $(VERSION) DEBE ser el mismo que el valor de
El componente WebView DEBE incluir compatibilidad con la mayor cantidad posible de HTML5 [Recursos, 11].
3.4.2. Compatibilidad del navegador
Las implementaciones de dispositivos DEBEN incluir una aplicación de navegador independiente para la navegación web general del usuario. El navegador independiente PUEDE basarse en una tecnología de navegador distinta de WebKit. Sin embargo, incluso si se usa una aplicación de navegador alternativa, el componente android.webkit.WebView
que se proporciona a las aplicaciones de terceros DEBE basarse en WebKit, como se describe en la sección 3.4.1.
Las implementaciones PUEDEN enviar una cadena de usuario-agente personalizada en la aplicación del navegador independiente.
La aplicación de navegador independiente (ya sea que se base en la aplicación de navegador WebKit upstream o en un reemplazo de terceros) DEBE incluir compatibilidad con la mayor cantidad posible de HTML5 [Recursos, 11]. Como mínimo, las implementaciones de dispositivos DEBEN admitir cada una de estas APIs asociadas con HTML5:
- caché de la aplicación/operación sin conexión [Recursos, 12]
- la etiqueta <video> [Recursos, 13]
- ubicación geográfica [Recursos, 14]
Además, las implementaciones de dispositivos DEBEN admitir la API de HTML5/W3C WebStorage [Recursos, 15] y DEBEN admitir la API de IndexedDB de HTML5/W3C [Recursos, 16]. Ten en cuenta que, a medida que los organismos de estándares de desarrollo web realizan la transición para favorecer IndexedDB sobre webstorage, se espera que IndexedDB se convierta en un componente obligatorio en una versión futura de Android.
3.5. Compatibilidad de comportamiento de la API
Los comportamientos de cada uno de los tipos de API (administrados, flexibles, nativos y web) deben ser coherentes con la implementación preferida del proyecto de código abierto de Android upstream [Recursos, 3]. Estas son algunas áreas específicas de compatibilidad:
- Los dispositivos NO DEBEN cambiar el comportamiento ni la semántica de un intent estándar.
- 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).
- Los dispositivos NO DEBEN cambiar la semántica de un permiso estándar.
La lista anterior no es exhaustiva. El conjunto de pruebas de compatibilidad (CTS) prueba partes significativas de la plataforma para verificar la compatibilidad de 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.*
Entre las modificaciones prohibidas, se incluyen las siguientes:
- Las implementaciones de dispositivos NO DEBEN modificar las APIs expuestas públicamente en la plataforma de Android cambiando las firmas de métodos o clases, o quitando clases o campos de clase.
- Los implementadores de dispositivos PUEDEN modificar la implementación subyacente de las APIs, pero esas modificaciones NO DEBEN afectar el comportamiento declarado ni la firma en lenguaje Java de ninguna API expuesta públicamente.
- Los implementadores de dispositivos NO DEBEN agregar ningún elemento expuesto públicamente (como clases o interfaces, o campos o métodos a clases o interfaces existentes) a las APIs 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 ascendente. En otras palabras, los implementadores de dispositivos NO DEBEN exponer APIs nuevas ni alterar las existentes en los espacios de nombres mencionados anteriormente. Los implementadores de dispositivos PUEDEN realizar modificaciones solo para uso interno, pero esas modificaciones NO DEBEN anunciarse ni exponerse de otra manera a los desarrolladores.
Los implementadores de dispositivos PUEDEN agregar APIs personalizadas, pero estas NO DEBEN 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. Además, si una implementación de dispositivo incluye APIs personalizadas fuera del espacio de nombres estándar de Android, esas APIs DEBEN 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 aumento del 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 funcionalidad nueva y útil a una API existente o agregando una API nueva), 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 convenciones estándar para nombrar APIs en el lenguaje de programación Java. El objetivo de esta sección es reforzar esas convenciones y hacerlas vinculantes a través de su inclusión en esta definición de compatibilidad.
3.7. Compatibilidad de máquinas virtuales
Las implementaciones de dispositivos DEBEN admitir la especificación completa del código de bytes ejecutable de Dalvik (DEX) y la semántica de la máquina virtual de Dalvik [Recursos, 17].
Las implementaciones de dispositivos DEBEN configurar Dalvik para que asigne memoria según 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).
Ten en cuenta que los valores de memoria que se especifican a continuación se consideran valores mínimos, y las implementaciones de dispositivos PUEDEN asignar más memoria por aplicación.
Tamaño de la pantalla | Densidad de la pantalla | Memoria de la aplicación |
pequeño / normal / grande | ldpi / mdpi | 16 MB |
pequeño / normal / grande | tvdpi / hdpi | 32 MB |
pequeño / normal / grande | xhdpi | 64 MB |
pequeño / normal / grande | 400 dpi | 96 MB |
pequeño / normal / grande | xxhdpi | 128 MB |
pequeño / normal / grande | xxxhdpi | 256 MB |
Extragrande | mdpi | 32 MB |
Extragrande | tvdpi / hdpi | 64 MB |
Extragrande | xhdpi | 128 MB |
Extragrande | 400 ppp | 192 MB |
Extragrande | xxhdpi | 256 MB |
Extragrande | xxxhdpi | 512 MB |
3.8. Compatibilidad de la interfaz de usuario
3.8.1. Selector (pantalla principal)
Android incluye una aplicación de selector (pantalla principal) y compatibilidad con aplicaciones de terceros para reemplazar el selector del dispositivo (pantalla principal). Las implementaciones de dispositivos que permiten que aplicaciones de terceros reemplacen la pantalla principal del dispositivo deben declarar la función de plataforma android.software.home_screen
.
3.8.2. Widgets
Android define un tipo de componente y la API y el ciclo de vida correspondientes que permiten que las aplicaciones expongan un "AppWidget" al usuario final [Recursos, 18]. Las implementaciones de dispositivos que admiten la incorporación de widgets en la pantalla principal DEBEN cumplir con los siguientes requisitos y declarar la compatibilidad con la función de plataforma android.software.app_widgets
.
- Los selectores de dispositivos DEBEN incluir compatibilidad integrada con AppWidgets y exponer los indicadores de la interfaz de usuario para agregar, configurar, ver y quitar AppWidgets directamente desde el selector.
- Las implementaciones de dispositivos DEBEN ser capaces de renderizar widgets de 4 × 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 [Recursos, 18] para obtener más información.
- Las implementaciones de dispositivos que incluyen compatibilidad con la pantalla de bloqueo DEBEN admitir widgets de aplicaciones en la pantalla de bloqueo.
3.8.3. Notificaciones
Android incluye APIs que permiten a los desarrolladores notificar a los usuarios sobre eventos notables [Recursos, 19] con funciones de hardware y software del dispositivo.
Algunas APIs permiten que las aplicaciones realicen notificaciones o atraigan la atención con hardware, específicamente, sonido, vibración y luz. Las implementaciones de dispositivos DEBEN 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 la implementación del dispositivo. Por ejemplo, si una implementación de 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. Ten en cuenta que este comportamiento se detalla en la Sección 7.
Además, la implementación DEBE renderizar correctamente todos los recursos (íconos, archivos de sonido, etc.) que se proporcionan en las APIs [Recursos, 20] o en la guía de estilo de los íconos de la barra de estado o del sistema [Recursos, 21]. Los implementadores de dispositivos PUEDEN proporcionar una experiencia del usuario alternativa para las notificaciones que la que proporciona la implementación de código abierto de Android de referencia. Sin embargo, esos sistemas de notificaciones alternativos DEBEN admitir los recursos de notificaciones existentes, como se indicó anteriormente.
Android incluye compatibilidad con notificaciones enriquecidas, como Views interactivas para notificaciones en curso. Las implementaciones de dispositivos DEBEN mostrar y ejecutar correctamente las notificaciones enriquecidas, como se documenta en las APIs de Android.
3.8.4. Buscar
Android incluye APIs [Recursos, 22] que permiten a los desarrolladores incorporar la búsqueda en sus aplicaciones y exponer los datos de su aplicación en la búsqueda global del sistema. En términos generales, esta funcionalidad consiste en una única interfaz de usuario en todo el 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 proporcionar resultados a la interfaz de usuario de la búsqueda global común.
Las implementaciones de dispositivos DEBEN incluir una interfaz de usuario de búsqueda única, compartida y en todo el sistema que pueda realizar sugerencias en tiempo real en respuesta a las entradas del usuario. Las implementaciones de dispositivos DEBEN implementar las APIs que permiten a los desarrolladores reutilizar esta interfaz de usuario para proporcionar búsquedas en sus propias aplicaciones. Las implementaciones de dispositivos DEBEN 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 usen esta funcionalidad, el comportamiento predeterminado DEBE ser mostrar sugerencias y resultados de motores de búsqueda web.
3.8.5. Avisos
Las aplicaciones pueden usar la API de "Toast" (definida en [Recursos, 23]) para mostrarle al usuario final cadenas cortas no modales que desaparecen después de un breve período de tiempo. Las implementaciones de dispositivos DEBEN mostrar notificaciones emergentes de las aplicaciones a los usuarios finales de una manera muy visible.
3.8.6. Temas
Android proporciona "temas" como un mecanismo para que las aplicaciones apliquen estilos a toda una actividad o aplicación.
Android incluye una familia de temas "Holo" como un conjunto de estilos definidos que los desarrolladores de aplicaciones pueden usar si desean que su apariencia coincida con la del tema Holo, como lo define el SDK de Android [Recursos, 24]. Las implementaciones de dispositivos NO DEBEN alterar ninguno de los atributos del tema de Holo expuestos a las aplicaciones [Resources, 25].
Android también incluye una familia de temas "Predeterminado del dispositivo" como un conjunto de estilos definidos que los desarrolladores de aplicaciones pueden usar 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 DeviceDefault expuestos a las aplicaciones [Recursos, 25].
A partir de la versión 4.4, Android ahora admite un nuevo tema de 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 permitir una experiencia de 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. Por lo tanto, las implementaciones de dispositivos Android DEBEN 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 que emite el sistema, a menos que el ícono indique un estado problemático [Recursos, 25].
3.8.7. Fondos de pantalla animados
Android define un tipo de componente y la API y el ciclo de vida correspondientes que permiten que las aplicaciones expongan uno o más "fondos de pantalla en vivo" al usuario final [Recursos, 26]. Los fondos de pantalla 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.
El hardware se considera 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 hacen que los fondos de pantalla o las aplicaciones fallan, funcionan mal, consumen energía de la CPU o de la batería de forma excesiva, o se ejecutan a velocidades de fotogramas inaceptablemente bajas, se considera que el hardware no es capaz de ejecutar fondos de pantalla en vivo. A modo de ejemplo, algunos fondos de pantalla en vivo pueden usar un contexto de Open GL 1.0 o 2.0 para renderizar su contenido. El fondo de pantalla en vivo no se ejecutará de forma confiable en hardware que no admita varios contextos de OpenGL, ya que el uso de un contexto de OpenGL en el fondo de pantalla en vivo puede entrar en conflicto con otras aplicaciones que también usan un contexto de OpenGL.
Las implementaciones de dispositivos que pueden ejecutar fondos de pantalla de forma confiable como se describió anteriormente DEBEN implementar fondos de pantalla. Las implementaciones de dispositivos que se determine que no ejecutan fondos de pantalla de forma confiable, como se describió anteriormente, NO DEBEN implementar fondos de pantalla.
3.8.8. Visualización de aplicaciones recientes
El código fuente de Android upstream incluye una interfaz de usuario para mostrar aplicaciones recientes con una imagen en miniatura del estado gráfico de la aplicación en el momento en que el usuario salió de ella por última vez. Las implementaciones de dispositivos PUEDEN alterar o eliminar esta interfaz de usuario. Sin embargo, se planea que una versión futura de Android haga un uso más extenso de esta funcionalidad. Se recomienda encarecidamente que las implementaciones de dispositivos usen la interfaz de usuario de Android upstream (o una interfaz similar basada en miniaturas) para aplicaciones recientes, de lo contrario, es posible que no sean compatibles con una versión futura de Android.
3.8.9. Administración de entradas
Android incluye compatibilidad con la administración de entradas y con editores de métodos de entrada de terceros.
Las implementaciones de dispositivos que permiten que los usuarios usen métodos de entrada de terceros en el dispositivo DEBEN declarar la función de plataforma android.software.input_methods
y admitir las APIs de IME, como se define en la documentación del SDK de Android.
Las implementaciones de dispositivos que declaran la función android.software.input_methods
DEBEN proporcionar un mecanismo accesible para el usuario para agregar y configurar métodos de entrada de terceros. Las implementaciones de dispositivos DEBEN mostrar la interfaz de configuración en respuesta al intent android.settings.INPUT_METHOD_SETTINGS
.
3.8.10. Control remoto de contenido multimedia de la pantalla de bloqueo
Android incluye compatibilidad con la API de Remote Control, que permite que las aplicaciones multimedia se integren con controles de reproducción que se muestran en una vista remota, como la pantalla de bloqueo del dispositivo [Recursos, 74]. Las implementaciones de dispositivos que admiten la pantalla de bloqueo en el dispositivo y permiten que los usuarios agreguen widgets en la pantalla principal DEBEN incluir compatibilidad para incorporar controles remotos en la pantalla de bloqueo del dispositivo [Recursos, 69].
3.8.11. Sueños
Android incluye compatibilidad con protectores de pantalla interactivos llamados Dreams [Recursos, 76]. Dreams permite que los usuarios interactúen con las aplicaciones cuando un dispositivo de carga está inactivo o en una estación de carga de escritorio. Las implementaciones de dispositivos deben incluir compatibilidad con Dreams y proporcionar una opción de configuración para que los usuarios configuren Dreams.
3.8.12. Ubicación
Los modos de ubicación DEBEN mostrarse en el menú Ubicación de Configuración [Recursos, 87]. Los servicios de ubicación proporcionados a través de SettingInjectorService
que se introdujeron en Android 4.4 deben mostrarse en el mismo menú de ubicación [Recursos, 89].
3.8.13. Unicode
Android 4.4 incluye compatibilidad con caracteres de emojis en color. Las implementaciones de dispositivos Android DEBEN proporcionarle al usuario un método de entrada para los caracteres emoji definidos en Unicode 6.1 [Recursos, 82] y DEBEN ser capaces de renderizar estos caracteres emoji en glifos de color.
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 limpiezas remotas, a través de la API de administración de dispositivos de Android [Recursos, 27]. Las implementaciones de dispositivos DEBEN proporcionar una implementación de la clase DevicePolicyManager
[Recursos, 28]. Las implementaciones de dispositivos que incluyen compatibilidad con la pantalla de bloqueo deben admitir la gama completa de políticas de administración de dispositivos definidas en la documentación del SDK de Android [Recursos, 27].
Las implementaciones de dispositivos PUEDEN tener una aplicación preinstalada que realice funciones de administración del dispositivo, pero esta aplicación NO DEBE configurarse de forma predeterminada como la app de propietario del dispositivo [Recursos, 84].
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 táctiles y navegación con trackball o pad direccional [Recursos, 29]. Las implementaciones de dispositivos DEBEN proporcionar una implementación del framework de accesibilidad de Android coherente con la implementación predeterminada de Android. Específicamente, las implementaciones de dispositivos DEBEN cumplir con los siguientes requisitos.
- Las implementaciones de dispositivos DEBEN admitir implementaciones de servicios de accesibilidad de terceros a través de las APIs de
android.accessibilityservice
[Recursos, 30]. - Las implementaciones de dispositivos DEBEN generar
AccessibilityEvents
y entregar estos eventos a todas las implementaciones deAccessibilityService
registradas de una manera coherente con la implementación predeterminada de Android. - Las implementaciones de dispositivos DEBEN proporcionar un mecanismo accesible para el usuario para habilitar y inhabilitar los servicios de accesibilidad, y DEBEN mostrar esta interfaz en respuesta al intent
android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS
.
Además, las implementaciones de dispositivos DEBEN proporcionar una implementación de un servicio de accesibilidad en el dispositivo y DEBEN proporcionar un mecanismo para que los usuarios habiliten el servicio de accesibilidad durante la configuración del dispositivo. Hay una implementación de código abierto de un servicio de accesibilidad disponible en el proyecto Eyes Free [Recursos, 31].
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 [Recursos, 32]. Las implementaciones de dispositivos DEBEN cumplir con los siguientes requisitos relacionados con el framework de TTS de Android:
- Las implementaciones de dispositivos DEBEN admitir las APIs del framework de TTS de Android y DEBEN incluir un motor de TTS que admita los idiomas disponibles en el dispositivo. Ten en cuenta que el software de código abierto de Android upstream incluye una implementación del motor de TTS con todas las funciones.
- Las implementaciones de dispositivos DEBEN admitir la instalación de motores de TTS de terceros.
- Las implementaciones de dispositivos DEBEN proporcionar una interfaz accesible para el usuario que les permita seleccionar un motor de TTS para usarlo a nivel del sistema.
4. Compatibilidad de empaquetado de aplicaciones
Las implementaciones de dispositivos DEBEN instalar y ejecutar archivos ".apk" de Android como los genera la herramienta "aapt" incluida en el SDK oficial de Android [Recursos, 33].
Las implementaciones de dispositivos NO DEBEN extender el archivo .apk [Recursos, 34], el manifiesto de Android [Recursos, 35], el código de bytes de Dalvik [Recursos, 17] ni los formatos de código de bytes de renderscript de manera tal que se impida que esos archivos se instalen y ejecuten correctamente en otros dispositivos compatibles. Los implementadores de dispositivos DEBEN usar la implementación upstream de referencia de Dalvik y el sistema de administración de paquetes de la implementación de referencia.
5. Compatibilidad multimedia
Las implementaciones de dispositivos DEBEN incluir al menos una forma de salida de audio, como bocinas, conector para auriculares, conexión de bocinas externas, etcétera.
5.1. Códecs multimedia
Las implementaciones de dispositivos DEBEN admitir los formatos multimedia principales especificados en la documentación del SDK de Android [Recursos, 58], excepto cuando se permita de forma explícita en este documento. Específicamente, las implementaciones de dispositivos DEBEN admitir los formatos multimedia, los codificadores, los decodificadores, los tipos de archivos y los formatos de contenedor definidos en las siguientes tablas. Todos estos códecs 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 la Open Handset Alliance hacen ninguna representación de que estos códecs no estén sujetos a 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, incluido el software de código abierto o el shareware, pueden requerir licencias de patente de los titulares de patentes relevantes.
Ten en cuenta que estas tablas no incluyen requisitos de tasa de bits específicos para la mayoría de los códecs de video, ya que el hardware actual de los dispositivos no necesariamente admite tasas de bits que se asignen exactamente a las tasas de bits requeridas que especifican los estándares relevantes. En cambio, las implementaciones de dispositivos DEBEN admitir la tasa de bits más alta posible en el hardware, hasta los límites definidos por las especificaciones.
Tipo | Formato/códec | Codificador | Decodificador | Detalles | Formatos de tipos de archivo/contenedores |
---|---|---|---|---|---|
Audio | Perfil AAC de MPEG-4 (AAC LC) | OBLIGATORIEDAD para las implementaciones de dispositivos que incluyen hardware de micrófono y definen android.hardware.microphone . |
OBLIGATORIO | Compatibilidad con contenido mono/estéreo/5.0/5.1* con tasas de muestreo estándar de 8 a 48 kHz. |
|
Perfil HE AAC de MPEG-4 (AAC+) | OBLIGATORIO para implementaciones de dispositivos que incluyen hardware de micrófono y definen android.hardware.microphone | OBLIGATORIO | 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 AAC v2 (AAC+ mejorado) | OBLIGATORIO | 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) de tipo de objeto de audio MPEG-4 | OBLIGATORIA para implementaciones de dispositivos que incluyen hardware de micrófono y definen android.hardware.microphone | OBLIGATORIO | Compatibilidad con contenido mono/estéreo con tasas de muestreo estándar de 16 a 48 kHz. | ||
AMR-NB | OBLIGATORIEDAD para las implementaciones de dispositivos que incluyen hardware de micrófono y definen android.hardware.microphone . |
OBLIGATORIO | 4.75 a 12.2 kbps con muestreo a 8 kHz | 3GPP (.3gp) | |
AMR-WB | OBLIGATORIEDAD para las implementaciones de dispositivos que incluyen hardware de micrófono y definen android.hardware.microphone . |
OBLIGATORIO | 9 tasas de 6.60 kbit/s a 23.85 kbit/s con muestreo a 16 kHz | 3GPP (.3gp) | |
FLAC | OBLIGATORIOA (Android 3.1 y versiones posteriores) |
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 | OBLIGATORIO | Tasa de bits constante (CBR) o variable (VBR) mono/estéreo de 8 a 320 Kbps. | MP3 (.mp3) | ||
MIDI | OBLIGATORIO | 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 | OBLIGATORIO |
|
|||
PCM/WAVE | OBLIGATORIO | OBLIGATORIO | PCM lineal de 8 y 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, 16,000 y 44,100 Hz. | WAVE (.wav) | |
Imagen | JPEG | OBLIGATORIO | OBLIGATORIO | Básica + progresiva | JPEG (.jpg) |
GIF | OBLIGATORIO | GIF (.gif) | |||
PNG | OBLIGATORIO | OBLIGATORIO | PNG (.png) | ||
BMP | OBLIGATORIO | BMP (.bmp) | |||
WEBP | OBLIGATORIO | OBLIGATORIO | WebP (.webp) | ||
Video | H.263 | OBLIGATORIO para las implementaciones de dispositivos que incluyen hardware de cámara y definen android.hardware.camera o android.hardware.camera.front . |
OBLIGATORIO |
|
|
H.264 AVC | OBLIGATORIO para las implementaciones de dispositivos que incluyen hardware de cámara y definen android.hardware.camera o android.hardware.camera.front . |
OBLIGATORIO | Perfil de Baseline (BP) |
|
|
MPEG-4 SP | OBLIGATORIO | 3GPP (.3gp) | |||
VP8**** | OBLIGATORIOA (Android 4.3 y versiones posteriores) |
OBLIGATORIOA (Android 2.3.3 y versiones posteriores) |
WebM (.webm) y Matroska (.mkv, Android 4.0 y versiones posteriores)*** | ||
VP9 | OBLIGATORIOA (Android 4.4 y versiones posteriores) |
WebM (.webm) y Matroska (.mkv, Android 4.0 y versiones posteriores)*** |
- *Nota: Solo se requiere la reducción de formato del contenido 5.0/5.1. La grabación o renderización de más de 2 canales es opcional.
- **Nota: La captura de PCM lineal de 16 bits es obligatoria. No es obligatorio capturar PCM lineal de 8 bits.
- ***Nota: Las implementaciones de dispositivos DEBEN admitir la escritura de archivos Matroska WebM.
- ****Nota: Para obtener una calidad aceptable de los servicios de transmisión de video por Internet y de videoconferencia, las implementaciones de dispositivos DEBEN usar un códec VP8 de hardware que cumpla con los requisitos de [Recursos, 86].
5.2. Codificación de video
Las implementaciones de dispositivos Android que incluyen una cámara posterior y declaran android.hardware.camera
DEBEN admitir los siguientes perfiles de codificación de video H.264.
SD (baja calidad) | SD (alta calidad) | HD (si el hardware es compatible) | |
---|---|---|---|
Resolución de video | 176 x 144 px | 480 x 360 px | 1280 x 720 px |
Velocidad de fotogramas del video | 12 fps | 30 fps | 30 fps |
Tasa de bits del video | 56 Kbps | 500 Kbps o más | 2 Mbps o más |
Códec de audio | AAC-LC | AAC-LC | AAC-LC |
Canales de audio | 1 (mono) | 2 (estéreo) | 2 (estéreo) |
Tasa de bits del audio | 24 Kbps | 128 Kbps | 192 Kbps |
Las implementaciones de dispositivos Android que incluyen una cámara posterior y declaran android.hardware.camera
DEBEN admitir los siguientes perfiles de codificación de video VP8.
SD (baja calidad) | SD (alta calidad) | HD 720p (si el hardware es compatible) |
HD 1080p (si el hardware es compatible) |
|
---|---|---|---|---|
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.3. Decodificación de video
Las implementaciones de dispositivos Android DEBEN admitir los siguientes perfiles de decodificación de video VP8, VP9 y H.264. Las implementaciones de dispositivos también DEBEN admitir el cambio de resolución de video dinámico dentro de la misma transmisión para los códecs VP8, VP9 y H.264.
SD (baja calidad) | SD (alta calidad) | HD 720p (si el hardware es compatible) |
HD 1080p (si el hardware es compatible) |
|
---|---|---|---|---|
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 | 8 Mbps | 20 Mbps |
5.4. Grabación de audio
Cuando una aplicación usa la API de android.media.AudioRecord
para comenzar a grabar una transmisión de audio, las implementaciones de dispositivos que incluyen hardware de micrófono y declaran android.hardware.microphone
DEBEN muestrear y grabar audio con cada uno de estos comportamientos:
- El dispositivo DEBE mostrar características de amplitud aproximadamente planas en comparación con la frecuencia, específicamente, ±3 dB, de 100 Hz a 4000 Hz.
- La sensibilidad de entrada de audio DEBE establecerse de modo que una fuente de nivel de potencia de sonido (SPL) de 90 dB a 1,000 Hz genere un RMS de 2,500 para muestras de 16 bits.
- Los niveles de amplitud de PCM DEBEN hacer un seguimiento lineal de los cambios de SPL de entrada en un rango de al menos 30 dB, de -18 dB a +12 dB en relación con 90 dB SPL en el micrófono.
- La distorsión armónica total DEBE ser inferior al 1% para 1 kHz a un nivel de entrada de SPL de 90 dB.
Además de las especificaciones de grabación anteriores, cuando una aplicación comienza a grabar una transmisión de audio con la fuente de audio android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION
, ocurre lo siguiente:
- El procesamiento de reducción de ruido, si está presente, DEBE estar inhabilitado.
- Si está presente, el control de ganancia automática DEBE estar inhabilitado.
A partir de Android 4.4, la clase android.media.MediaRecorder.AudioSource
tiene una nueva fuente de audio: REMOTE_SUBMIX
. Los dispositivos DEBEN implementar correctamente la fuente de audio REMOTE_SUBMIX
para que, cuando una aplicación use la API de android.media.AudioRecord
para grabar desde esta fuente de audio, pueda capturar una combinación de todas las transmisiones de audio, excepto las siguientes:
STREAM_RING
STREAM_ALARM
STREAM_NOTIFICATION
Nota: Si bien algunos de los requisitos descritos anteriormente se indican como "DEBEN" desde Android 4.3, se planea que la definición de compatibilidad de una versión futura los cambie a "DEBEN". Es decir, estos requisitos son opcionales en Android 4.4, pero serán obligatorios en una versión futura. Se recomienda encarecidamente que los dispositivos existentes y nuevos que ejecutan Android cumplan con estos requisitos, de lo contrario, no podrán alcanzar la compatibilidad con Android cuando se actualicen a la versión futura.
Si la plataforma admite tecnologías de supresión de ruido ajustadas para el reconocimiento de voz, el efecto DEBE poder controlarse desde la API de android.media.audiofx.NoiseSuppressor
. Además, el campo "uuid" del descriptor de efectos del supresor de ruido DEBE identificar de forma inequívoca cada implementación de la tecnología de supresión de ruido.
5.5. 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.
A los efectos de esta sección, se entenderá lo siguiente:
- La "latencia de salida" se define como el intervalo entre el momento en que una aplicación escribe una trama de datos codificados en PCM y el momento en que un objeto de escucha externo puede escuchar el sonido correspondiente o un transductor puede observarlo.
- La "latencia de salida en frío" se define como la latencia de salida del primer fotograma, cuando el sistema de salida de audio estuvo inactivo y apagado antes de la solicitud.
- La "latencia de salida continua" se define como la latencia de salida para los fotogramas posteriores, una vez que el dispositivo ya está reproduciendo audio.
- La "latencia de entrada" es el intervalo entre el momento en que se presenta un sonido externo al dispositivo y el momento en que una aplicación lee la trama correspondiente de datos codificados en PCM.
- La "latencia de entrada en frío" se define como la suma del tiempo de entrada perdido y la latencia de entrada para el primer fotograma, cuando el sistema de entrada de audio estuvo inactivo y apagado antes de la solicitud.
- La "latencia de entrada continua" se define como la latencia de entrada para los fotogramas posteriores, mientras que el dispositivo ya está capturando audio.
- "API de cola de búfer PCM de OpenSL ES" es el conjunto de APIs de OpenSL ES relacionadas con PCM dentro del NDK de Android. Consulta NDK_root.
/docs/opensles/index.html
Según la Sección 5, todas las implementaciones de dispositivos compatibles DEBEN incluir al menos una forma de salida de audio. Las implementaciones de dispositivos DEBEN cumplir o superar estos requisitos de latencia de salida:
- Latencia de salida en frío de 100 milisegundos o menos
- latencia de salida continua de 45 milisegundos o menos
Si una implementación de dispositivo cumple con los requisitos de esta sección después de cualquier calibración inicial cuando se usa la API de cola de búfer PCM de OpenSL ES para latencia de salida continua y latencia de salida en frío en al menos un dispositivo de salida de audio compatible, PUEDE informar compatibilidad con audio de baja latencia, a través de la función "android.hardware.audio.low-latency" a través de la clase android.content.pm.PackageManager
. [Recursos, 37] Por el contrario, si la implementación del dispositivo no cumple con estos requisitos, NO DEBE informar la compatibilidad con audio de baja latencia.
Según la Sección 7.2.5, las implementaciones de dispositivos pueden omitir el hardware del micrófono.
Las implementaciones de dispositivos que incluyen hardware de micrófono y declaran android.hardware.microphone
DEBEN cumplir con estos requisitos de latencia de audio de entrada:
- Latencia de entrada en frío de 100 milisegundos o menos
- Latencia de entrada continua de 50 milisegundos o menos
5.6. Protocolos de red
Los dispositivos DEBEN admitir los protocolos de red multimedia para la reproducción de audio y video, como se especifica en la documentación del SDK de Android [Recursos, 58]. Específicamente, los dispositivos DEBEN ser compatibles con los siguientes protocolos de red multimedia:
- RTSP (RTP, SDP)
- Transmisión progresiva de HTTP(S)
- Protocolo de borrador de transmisión en vivo HTTP(S), versión 3 [Recursos, 59]
6. Compatibilidad de las herramientas y opciones para desarrolladores
6.1. Herramientas para desarrolladores
Las implementaciones de dispositivos DEBEN admitir las herramientas para desarrolladores de Android que se proporcionan en el SDK de Android. Específicamente, los dispositivos compatibles con Android DEBEN ser compatibles con lo siguiente:
- Android Debug Bridge (conocido como adb) [Recursos, 33]
Las implementaciones de dispositivos DEBEN admitir todas las funciones deadb
como se documenta en el SDK de Android. El daemonadb
del dispositivo DEBE estar inactivo de forma predeterminada, y DEBE haber un mecanismo accesible para el usuario para activar el puente de depuración de Android. - Android incluye compatibilidad con adb seguro. El adb seguro habilita adb en hosts autenticados conocidos. Las implementaciones de dispositivos DEBEN admitir adb seguro.
- Servicio de monitor de depuración de Dalvik (conocido como ddms) [Recursos, 33]
Las implementaciones de dispositivos DEBEN admitir todas las funciones deddms
, como se documenta en el SDK de Android. Comoddms
usaadb
, la compatibilidad conddms
DEBE estar inactiva de forma predeterminada, pero DEBE ser compatible cada vez que el usuario haya activado el puente de depuración de Android, como se indicó anteriormente. - Monkey [Recursos, 36]
Las implementaciones de dispositivos DEBEN incluir el framework de Monkey y ponerlo a disposición de las aplicaciones para que lo usen. - SysTrace [Recursos, 33]
Las implementaciones de dispositivos DEBEN admitir la herramienta systrace, como se documenta en el SDK de Android. Systrace debe estar inactivo de forma predeterminada y DEBE haber un mecanismo al que el usuario pueda acceder para activarlo.
La mayoría de los sistemas basados en Linux y los sistemas Apple Macintosh reconocen dispositivos Android con las herramientas estándar del SDK de Android, sin compatibilidad adicional. Sin embargo, los sistemas Microsoft Windows suelen requerir un controlador para dispositivos Android nuevos. (por ejemplo, los IDs de proveedores nuevos y, a veces, los IDs de dispositivos nuevos requieren controladores USB personalizados para sistemas Windows). Si la herramienta adb
no reconoce una implementación de dispositivo como se proporciona en el SDK estándar de Android, los implementadores de dispositivos DEBEN proporcionar controladores de Windows que permitan a los desarrolladores conectarse al dispositivo con el protocolo adb
. Estos controladores DEBEN proporcionarse para Windows XP, Windows Vista, Windows 7 y Windows 8, en versiones de 32 y 64 bits.
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 respetar el intent android.settings.APPLICATION_DEVELOPMENT_SETTINGS para mostrar la configuración relacionada con el desarrollo de la aplicación [Recursos, 77]. La implementación upstream de Android oculta el menú Opciones para desarrolladores de forma predeterminada y permite que los usuarios inicien las Opciones para desarrolladores después de presionar siete (7) veces el elemento de menú Configuración > Acerca del dispositivo > Número de compilación. Las implementaciones de dispositivos DEBEN proporcionar una experiencia coherente para las Opciones para desarrolladores. Específicamente, las implementaciones de dispositivos DEBEN ocultar las Opciones para desarrolladores de forma predeterminada y DEBEN proporcionar un mecanismo para habilitar las Opciones para desarrolladores que sea coherente con la implementación de Android upstream.
6.2.1. Experimental
En Android 4.4, se introdujo ART, un entorno de ejecución de Android experimental al que se puede acceder en el menú Opciones para desarrolladores para obtener una vista previa. Las implementaciones de dispositivos DEBEN incluir ART (libart.so) y admitir el arranque dual desde las Opciones para desarrolladores, pero DEBEN mantener Dalvik (libdvm.so) como el entorno de ejecución predeterminado.
7. Compatibilidad de hardware
Si un dispositivo incluye un componente de hardware 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. 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, haz lo siguiente:
- Las definiciones de clases completas (como se documenta en el SDK) para las APIs del componente DEBEN estar presentes.
- Los comportamientos de la API DEBEN implementarse como no-ops de alguna manera razonable.
- Los métodos de la API DEBEN mostrar valores nulos cuando la documentación del SDK lo permita.
- Los métodos de la API DEBEN mostrar implementaciones de no operación de clases en las que la documentación del SDK no permite valores nulos.
- Los métodos de la API NO DEBEN generar excepciones que no estén documentadas en la documentación del SDK.
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 deben implementarse como no operaciones razonables.
Las implementaciones de dispositivos DEBEN informar con precisión la información de configuración de hardware a través de los métodos getSystemAvailableFeatures()
y hasSystemFeature(String)
en la clase android.content.pm.PackageManager
. [Recursos, 37]
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, a fin de garantizar que las aplicaciones de terceros se ejecuten bien en una variedad de configuraciones de hardware [Recursos, 38]. Los dispositivos DEBEN implementar correctamente estas APIs y comportamientos, como se detalla en esta sección.
Las unidades a las que hacen referencia los requisitos de esta sección se definen de la siguiente manera:
- El “tamaño diagonal físico” es la distancia en pulgadas entre dos esquinas opuestas de la parte iluminada de la pantalla.
- “dpi” (que significa “puntos por pulgada”) es la cantidad de píxeles que abarca un tramo lineal horizontal o vertical de 1". Cuando se enumeran los valores de dpi, los dpi horizontales y verticales deben estar dentro del rango.
- "Relación de aspecto" es la proporción entre la dimensión más larga de la pantalla y la más corta. Por ejemplo, una pantalla de 480 x 854 píxeles sería 854 / 480 = 1.779, o aproximadamente "16:9".
- Un "píxel independiente de la densidad" ("dp") es la unidad de píxel virtual que se normaliza a una pantalla de 160 dpi y se calcula de la siguiente manera:
pixels = dps * (density / 160)
.
7.1.1. Configuración de la pantalla
Tamaño de la pantalla
El framework de la IU de Android admite una variedad de tamaños de pantalla diferentes y permite que las aplicaciones consulten el tamaño de pantalla del dispositivo (también conocido como "diseño de pantalla") a través de android.content.res.Configuration.screenLayout
con SCREENLAYOUT_SIZE_MASK
. Las implementaciones de dispositivos DEBEN informar el tamaño de pantalla correcto, como se define en la documentación del SDK de Android [Recursos, 38] y lo determina la plataforma de Android upstream. Específicamente, las implementaciones de dispositivos deben informar el tamaño de pantalla correcto según las siguientes dimensiones de pantalla de píxeles independientes de la densidad (dp) lógicas.
- Los dispositivos DEBEN tener tamaños de pantalla de al menos 426 dp × 320 dp ("pequeños").
- Los dispositivos que informan un tamaño de pantalla "normal" DEBEN tener tamaños de pantalla de al menos 480 dp x 320 dp.
- Los dispositivos que informan el tamaño de pantalla "grande" DEBEN tener tamaños de pantalla de al menos 640 dp x 480 dp.
- Los dispositivos que informan el tamaño de pantalla "extragrande" DEBEN tener tamaños de pantalla de al menos 960 dp x 720 dp.
Además, los dispositivos DEBEN tener un tamaño de pantalla de al menos 6.35 cm (2.5") de diagonal física.
Los dispositivos NO DEBEN cambiar el tamaño de pantalla informado en ningún momento.
De manera opcional, las aplicaciones indican qué tamaños de pantalla admiten a través del atributo <supports-screens>
en el archivo AndroidManifest.xml. Las implementaciones de dispositivos DEBEN respetar correctamente la compatibilidad declarada de las aplicaciones para pantallas pequeñas, normales, grandes y extragrandes, como se describe en la documentación del SDK de Android.
Relación de aspecto de la pantalla
La relación de aspecto DEBE ser un valor de 1.3333 (4:3) a 1.86 (aproximadamente 16:9).
Densidad de la pantalla
El framework de la IU de Android define un conjunto de densidades lógicas estándar para ayudar a los desarrolladores de aplicaciones a segmentar los recursos de la aplicación. Las implementaciones de dispositivos DEBEN informar una de las siguientes densidades lógicas del framework de Android a través de las APIs de android.util.DisplayMetrics
y DEBEN ejecutar aplicaciones con esta densidad estándar.
- 120 dpi, conocido como "ldpi"
- 160 dpi, conocido como "mdpi"
- 213 dpi, conocido como "tvdpi"
- 240 dpi, conocido como "hdpi"
- 320 dpi, conocido como "xhdpi"
- 400 dpi, conocido como "400dpi"
- 480 dpi, conocido como "xxhdpi"
- 640 dpi, conocido como "xxxhdpi"
7.1.2. Métricas de Display
Las implementaciones de dispositivos DEBEN informar valores correctos para todas las métricas de visualización definidas en android.util.DisplayMetrics
[Recursos, 39].
7.1.3. Orientación de pantalla
Los dispositivos DEBEN admitir la orientación dinámica de las aplicaciones para la orientación de la pantalla vertical u horizontal. Es decir, el dispositivo debe respetar la solicitud de la aplicación para una orientación de pantalla específica. Las implementaciones de dispositivos PUEDEN seleccionar la orientación vertical u horizontal como la predeterminada.
Los dispositivos DEBEN informar el valor correcto de la orientación actual del dispositivo cada vez que se consulta a través de android.content.res.Configuration.orientation, android.view.Display.getOrientation() o de otras APIs.
Los dispositivos NO DEBEN cambiar el tamaño ni la densidad de la pantalla informados cuando se cambia la orientación.
Los dispositivos DEBEN informar qué orientaciones de pantalla admiten (android.hardware.screen.portrait
o android.hardware.screen.landscape
) y DEBEN informar al menos una orientación compatible. Por ejemplo, un dispositivo con una pantalla horizontal de orientación fija, como una televisión o una laptop, SOLO DEBE informar android.hardware.screen.landscape
.
7.1.4. Aceleración de gráficos 2D y 3D
Las implementaciones de dispositivos DEBEN admitir OpenGL ES 1.0 y 2.0, como se indica y detalla en la documentación del SDK de Android. Las implementaciones de dispositivos DEBEN admitir OpenGL ES 3.0 en dispositivos que sean compatibles con OpenGL ES 3.0. Las implementaciones de dispositivos también DEBEN admitir Android Renderscript, como se detalla en la documentación del SDK de Android [Recursos, 8].
Las implementaciones de dispositivos también DEBEN identificarse correctamente como compatibles con OpenGL ES 1.0, OpenGL ES 2.0 o OpenGL ES 3.0. Es decir:
- Las APIs administradas (como a través del método
GLES10.getString()
) DEBEN informar la compatibilidad con OpenGL ES 1.0 y OpenGL ES 2.0. - Las APIs nativas de OpenGL C/C++ (es decir, las que están disponibles para las apps a través de libGLES_v1CM.so, libGLES_v2.so o libEGL.so) DEBEN informar compatibilidad con OpenGL ES 1.0 y OpenGL ES 2.0.
- Las implementaciones de dispositivos que declaran compatibilidad con OpenGL ES 3.0 DEBEN admitir las APIs administradas de OpenGL ES 3.0 y deben incluir compatibilidad con las APIs nativas de C/C++. En las implementaciones de dispositivos que declaran compatibilidad con OpenGL ES 3.0, libGLESv2.so DEBE exportar los símbolos de función de OpenGL ES 3.0, además de los símbolos de función de OpenGL ES 2.0.
Las implementaciones de dispositivos PUEDEN implementar cualquier extensión de OpenGL ES deseada. Sin embargo, las implementaciones de dispositivos DEBEN informar a través de las APIs administradas y nativas de OpenGL ES todas las cadenas de extensión que admiten y, a la inversa, NO DEBEN informar cadenas de extensión que no admiten.
Ten en cuenta que Android incluye compatibilidad con aplicaciones que, de manera opcional,
especifican que requieren formatos de compresión de texturas OpenGL específicos. Por lo general, estos formatos son específicos de cada proveedor. Android no requiere implementaciones de dispositivos para implementar ningún formato de compresión de texturas específico. Sin embargo,
DEBEN informar con precisión los formatos de compresión de texturas que sí
admiten, a través del método getString()
en la API de OpenGL.
Android incluye un mecanismo para que las aplicaciones declaren que desean habilitar la aceleración de hardware para gráficos 2D en el nivel de la aplicación, la actividad, la ventana o la vista mediante el uso de una etiqueta de manifiesto android:hardwareAccelerated
o llamadas directas a la API [Resources, 9].
En Android 4.4, las implementaciones de dispositivos DEBEN habilitar la aceleración de hardware de forma predeterminada y DEBEN 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.
Además, las implementaciones de dispositivos DEBEN mostrar un comportamiento coherente con la documentación del SDK de Android sobre la aceleración de hardware [Recursos, 9].
Android incluye un objeto TextureView
que permite a los desarrolladores integrar directamente texturas de OpenGL ES aceleradas por hardware como destinos de renderización en una jerarquía de IU. Las implementaciones de dispositivos DEBEN admitir la API de TextureView
y DEBEN mostrar un comportamiento coherente con la implementación de Android upstream.
Android incluye compatibilidad con EGL_ANDROID_RECORDABLE
, un atributo EGLConfig que indica si EGLConfig admite la renderización en un ANativeWindow que graba imágenes en un video.
Las implementaciones de dispositivos DEBEN admitir la extensión EGL_ANDROID_RECORDABLE
[Recursos, 79].
7.1.5. Modo de compatibilidad de 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 pantalla. Las implementaciones de dispositivos DEBEN incluir compatibilidad con el modo de compatibilidad de aplicaciones heredado, tal como lo implementa 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, ni alterar el comportamiento del modo de compatibilidad.
7.1.6. Tipos de pantalla
Las pantallas de implementación de dispositivos se clasifican en uno de los siguientes dos tipos:
- Implementaciones de pantallas de píxeles fijos: la pantalla es un solo panel que solo admite un ancho y una altura de píxeles. Por lo general, la pantalla está integrada físicamente con el dispositivo. Algunos ejemplos son teléfonos celulares, tablets, etcétera.
- Implementaciones de pantallas de píxeles variables: La implementación del dispositivo no tiene una pantalla incorporada y, en su lugar, incluye un puerto de salida de video, como VGA, HDMI o un puerto inalámbrico para la pantalla, o bien tiene una pantalla incorporada que puede cambiar las dimensiones de los píxeles. Entre los ejemplos, se incluyen televisiones, decodificadores, etcétera.
Implementaciones de dispositivos de píxeles fijos
Las implementaciones de dispositivos de píxeles fijos PUEDEN usar pantallas de cualquier dimensión de píxeles, siempre que cumplan con los requisitos definidos en esta definición de compatibilidad.
Las implementaciones de píxeles fijos PUEDEN incluir un puerto de salida de video para usar con una pantalla externa. Sin embargo, si esa pantalla se usa para ejecutar apps, el dispositivo DEBE cumplir con los siguientes requisitos:
- El dispositivo DEBE informar la misma configuración de pantalla y las mismas métricas de visualización, como se detalla en las secciones 7.1.1 y 7.1.2, que la pantalla de píxeles fijos.
- El dispositivo DEBE informar la misma densidad lógica que la pantalla de píxeles fijos.
- El dispositivo DEBE informar dimensiones de pantalla iguales o muy cercanas a las de la pantalla de píxeles fijos.
Por ejemplo, una tablet de 7" de diagonal con una resolución de 1024 x 600 píxeles se considera una implementación de pantalla de mdpi grande de píxeles fijos. Si contiene un puerto de salida de video que se muestra en 720p o 1080p, la implementación del dispositivo DEBE escalar la salida para que las aplicaciones solo se ejecuten en una ventana de mdpi grande, independientemente de si se está usando la pantalla de píxeles fijos o el puerto de salida de video.
Implementaciones de dispositivos de píxeles variables
Las implementaciones de dispositivos de píxeles variables DEBEN admitir al menos una de las siguientes resoluciones: 1280 × 720, 1920 × 1080 o 3840 × 2160 (es decir, 720p, 1080p o 4K). Las implementaciones de dispositivos con pantallas de píxeles variables NO DEBEN admitir ninguna otra configuración ni modo de pantalla. Las implementaciones de dispositivos con pantallas de píxeles variables PUEDEN cambiar la configuración o el modo de la pantalla durante el tiempo de ejecución o el inicio. Por ejemplo, un usuario de una set-top box puede reemplazar una pantalla de 720p por una de 1080p, y la implementación del dispositivo puede ajustarse según corresponda.
Además, las implementaciones de dispositivos de píxeles variables DEBEN informar los siguientes segmentos de configuración para estas dimensiones de píxeles:
- 1280 x 720 (también conocido como 720p): Tamaño de pantalla "grande", densidad "tvdpi" (213 dpi)
- 1,920 x 1,080 (también conocida como 1080p): Tamaño de pantalla "grande", densidad "xhdpi" (320 dpi)
- 3,840 x 2,160 (también conocido como 4K): Tamaño de pantalla "grande", densidad "xxxhdpi" (640 dpi)
Para mayor claridad, las implementaciones de dispositivos con dimensiones de píxeles variables se limitan a 720p, 1080p o 4K en Android 4.4 y DEBEN configurarse para informar los buckets de tamaño y densidad de pantalla como se indicó anteriormente.
7.1.7. Tecnología de la 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. Más precisamente:
- Los dispositivos DEBEN admitir pantallas capaces de renderizar gráficos en color de 16 bits y DEBEN admitir pantallas capaces de renderizar gráficos en color de 24 bits.
- Los dispositivos DEBEN admitir pantallas capaces de renderizar animaciones.
- La tecnología de la pantalla que se usa DEBE tener una relación de aspecto de píxeles (PAR) de entre 0.9 y 1.1. Es decir, la relación de aspecto de píxeles DEBE ser casi cuadrada (1.0) con una tolerancia del 10%.
7.1.8. Pantallas externas
Android incluye compatibilidad con pantallas secundarias para habilitar las funciones de uso compartido de contenido multimedia y las APIs para desarrolladores para acceder a pantallas externas. Si un dispositivo admite una pantalla externa a través de una conexión de pantalla adicional por cable, inalámbrica o integrada, la implementación del dispositivo DEBE implementar la API de DisplayManager como se describe en la documentación del SDK de Android [Recursos, 75].
Las implementaciones de dispositivos que admiten una salida de video segura y son capaces de admitir superficies seguras DEBEN declarar la compatibilidad con Display.FLAG_SECURE
. Específicamente, las implementaciones de dispositivos que declaran compatibilidad con Display.FLAG_SECURE
deben admitir HDCP 2.x o versiones posteriores para pantallas inalámbricas Miracast o HDCP 1.2 o versiones posteriores para pantallas con cable. La implementación de código abierto de Android upstream incluye compatibilidad con pantallas inalámbricas (Miracast) y con cable (HDMI) que satisfacen este requisito.
7.2. Dispositivos de entrada
7.2.1. Teclado
Implementaciones de dispositivos:
- DEBE incluir compatibilidad con el framework de administración de entradas (que permite a los desarrolladores externos crear motores de administración de entradas, es decir, teclados en pantalla), como se detalla en http://developer.android.com.
- DEBE proporcionar al menos una implementación de teclado en pantalla (independientemente de si hay un teclado físico).
- PUEDE incluir implementaciones adicionales de teclado en pantalla
- PUEDE incluir un teclado de hardware
- NO DEBE incluir un teclado de hardware que no coincida con uno de los formatos especificados en
android.content.res.Configuration.keyboard
[Recursos, 40] (es decir, QWERTY o 12 teclas).
7.2.2. Navegación no táctil
Implementaciones de dispositivos:
- PUEDE omitir una opción de navegación no táctil (es decir, puede omitir una bola de seguimiento, un pad direccional o una rueda).
- DEBE informar el valor correcto para
android.content.res.Configuration.navigation
[Resources, 40]. - DEBEN 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 entradas. 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 no táctiles.
7.2.3. Teclas de navegación
Las funciones de Inicio, Recientes y Atrás son esenciales para el paradigma de navegación de Android. Las implementaciones de dispositivos DEBEN poner estas funciones a disposición del usuario en todo momento cuando se ejecutan aplicaciones. Estas funciones PUEDEN implementarse a través de botones físicos dedicados (como botones táctiles mecánicos o capacitivos) o con teclas de software dedicadas en una parte distinta de la pantalla, gestos, panel táctil, etc. Android admite ambas implementaciones. Se DEBE poder acceder a todas estas funciones con una sola acción (p.ej., presionar, hacer doble clic o usar un gesto) cuando estén visibles.
Las funciones Atrás y Recientes DEBEN tener un botón o ícono visible, a menos que se oculten junto con otras funciones de navegación en el modo de pantalla completa. La función de inicio DEBE tener un botón o ícono visible, a menos que esté oculto junto con otras funciones de navegación en el modo de pantalla completa.
La función de menú dejó de estar disponible en favor de la barra de acciones desde Android 4.0.
Las implementaciones de dispositivos NO DEBEN implementar un botón físico exclusivo para la función de menú. Si se implementa el botón de menú físico y el dispositivo ejecuta aplicaciones con targetSdkVersion
> 10, la implementación del dispositivo hace lo siguiente:
- Para un dispositivo que se inicia con Android 4.4, DEBE mostrar el botón de menú ampliado en la barra de acciones cuando esta esté visible y el menú ampliado resultante no esté vacío.
- En el caso de un dispositivo existente que se lanzó con una versión anterior, pero que se actualiza a Android 4.4, DEBE mostrar el botón de menú ampliado en la barra de acciones cuando esta esté visible y el menú ampliado resultante no esté vacío.
- 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.
- PUEDE renderizar la ventana emergente de acciones adicionales en una posición modificada en la pantalla cuando se muestra seleccionando el botón de menú físico.
Para brindar retrocompatibilidad, las implementaciones de dispositivos DEBEN poner a disposición de las aplicaciones la función de menú cuando targetSdkVersion
<= 10, ya sea a través de un botón físico, una tecla de software o gestos. Esta función de menú se debe presentar, a menos que se oculte junto con otras funciones de navegación.
Android admite la acción de asistencia [Recursos, 63]. Las implementaciones de dispositivos DEBEN hacer que la acción de Asistente esté disponible para el usuario en todo momento cuando se ejecutan aplicaciones. La acción de Asistente DEBE implementarse como una pulsación prolongada en el botón de inicio o un gesto de deslizamiento hacia arriba en la tecla de inicio del software. Esta función PUEDE implementarse a través de otro botón físico, una tecla de software o gestos, pero SE DEBE poder acceder a ella con una sola acción (p.ej., presionar, hacer doble clic o realizar un gesto) cuando otras teclas de navegación estén visibles.
Las implementaciones de dispositivos PUEDEN usar una parte distinta de la pantalla para mostrar las teclas de navegación, pero, de ser así, DEBEN cumplir con los siguientes requisitos:
- Las teclas de navegación de implementación del dispositivo DEBEN usar una parte distinta de la pantalla, que no esté disponible para las aplicaciones, y NO DEBEN ocultar ni interferir de ninguna manera con la parte de la pantalla disponible para las aplicaciones.
- Las implementaciones de dispositivos DEBEN poner a disposición una parte de la pantalla para las aplicaciones que cumplan con los requisitos definidos en la Sección 7.1.1.
- Las implementaciones de dispositivos DEBEN mostrar las teclas de navegación cuando las aplicaciones no especifican un modo de IU del sistema o especifican
SYSTEM_UI_FLAG_VISIBLE
. - Las implementaciones de dispositivos DEBEN presentar las teclas de navegación en un modo "de perfil bajo" (p. ej., atenuado) no intrusivo cuando las aplicaciones especifiquen
SYSTEM_UI_FLAG_LOW_PROFILE
. - Las implementaciones de dispositivos DEBEN ocultar las teclas de navegación cuando las aplicaciones especifiquen
SYSTEM_UI_FLAG_HIDE_NAVIGATION
.
7.2.4. Entrada táctil
Las implementaciones de dispositivos DEBEN tener algún tipo de sistema de entrada de puntero (ya sea táctil o similar a un mouse). Sin embargo, si la implementación de un dispositivo no admite un sistema de entrada de puntero, NO DEBE informar la constante de función android.hardware.touchscreen
ni android.hardware.faketouch
. Implementaciones de dispositivos que sí incluyen un sistema de entrada de puntero:
- DEBE admitir punteros con seguimiento completamente independiente, si el sistema de entrada del dispositivo admite varios punteros.
- DEBE informar el valor de
android.content.res.Configuration.touchscreen
[Resources, 40] que corresponde al tipo de pantalla táctil específica del dispositivo.
Android incluye compatibilidad con una variedad de pantallas táctiles, paneles táctiles y dispositivos de entrada táctiles falsos.
Las implementaciones de dispositivos basadas en pantallas táctiles se asocian con una pantalla [Recursos, 81] de modo que el usuario tenga la impresión de manipular directamente los elementos en pantalla. Dado que el usuario toca directamente la pantalla, el sistema no requiere indicaciones adicionales para indicar los objetos que se manipulan.
Por el contrario, una interfaz táctil falsa proporciona un sistema de entrada del usuario que se aproxima a un subconjunto de capacidades de pantalla táctil.
Por ejemplo, un mouse o un control remoto que controla un cursor en pantalla se aproxima al toque, pero requiere que el usuario primero apunte o enfoque y, luego, haga clic. Muchos 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 4.0 incluye la constante de función android.hardware.faketouch
, que corresponde a un dispositivo de entrada no táctil de alta fidelidad (es decir, basado en punteros), como un mouse o un panel táctil que puede emular de forma adecuada la entrada táctil (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. Las implementaciones de dispositivos que declaran la función de toques falsos DEBEN cumplir con los requisitos de toques falsos que se indican en la Sección 7.2.5.
Las implementaciones de dispositivos DEBEN informar la función correcta correspondiente al tipo de entrada que se usa. Las implementaciones de dispositivos que incluyen una pantalla táctil (de un solo toque o superior) DEBEN informar la constante de función de la plataforma android.hardware.touchscreen
.
Las implementaciones de dispositivos que informan la constante de función de la plataforma android.hardware.touchscreen
TAMBIÉN DEBEN informar la constante de función de la plataforma android.hardware.faketouch
. Las implementaciones de dispositivos que no incluyen una pantalla táctil (y solo dependen de un dispositivo de puntero) NO DEBEN informar ninguna función de pantalla táctil y DEBEN informar solo android.hardware.faketouch
si cumplen con los requisitos de toque falso de la Sección 7.2.5.
7.2.5. Entrada táctil falsa
Implementaciones de dispositivos que declaran compatibilidad con android.hardware.faketouch
- DEBEN informar las posiciones absolutas de X e Y de la ubicación del puntero y mostrar un puntero visual en la pantalla [Recursos, 80]
- DEBE informar el evento táctil con el código de acción [Resources, 80] que especifica el cambio de estado que se produce en el puntero que pasa de
down
aup
en la pantalla [Resources, 80]. - DEBE admitir los punteros
down
yup
en un objeto en la pantalla, lo que permite a los usuarios emular el toque en un objeto en la pantalla. - DEBE admitir el puntero
down
, el punteroup
, el punterodown
y, luego, el punteroup
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 [Recursos, 80] - DEBE admitir el puntero
down
en un punto arbitrario de la pantalla, el movimiento del puntero a cualquier otro punto arbitrario de la pantalla, seguido de un punteroup
, lo que permite a los usuarios emular un arrastre táctil. - DEBE admitir el puntero
down
y, luego, permitir que los usuarios muevan rápidamente el objeto a una posición diferente en la pantalla y, luego, el punteroup
en la pantalla, lo que permite que los usuarios lancen un objeto en la pantalla.
Los dispositivos que declaran compatibilidad con android.hardware.faketouch.multitouch.distinct
DEBEN cumplir con los requisitos de faketouch anteriores y también DEBEN admitir el seguimiento distinto de dos o más entradas de puntero independientes.
7.2.6. Micrófono
Las implementaciones de dispositivos PUEDEN omitir un micrófono. Sin embargo, si una implementación de dispositivo omite un micrófono, NO DEBE informar la constante de función android.hardware.microphone
y debe implementar la API de grabación de audio como no-ops, según la Sección 7.
Por el contrario, las implementaciones de dispositivos que sí tienen un micrófono:
- DEBE informar la constante de función
android.hardware.microphone
. - DEBEN cumplir con los requisitos de calidad de audio de la Sección 5.4
- DEBE cumplir con los requisitos de latencia de audio de la Sección 5.5
7.3. Sensores
Android incluye APIs para acceder a una variedad de tipos de sensores. Por lo general, las implementaciones de dispositivos PUEDEN omitir estos sensores, como se indica en las siguientes sub secciones. Si un dispositivo incluye 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. Por ejemplo, las siguientes implementaciones de dispositivos:
- DEBEN informar con precisión la presencia o ausencia de sensores según la clase
android.content.pm.PackageManager
. [Recursos, 37] - DEBE mostrar una lista precisa de los sensores compatibles a través de
SensorManager.getSensorList()
y métodos similares. - DEBEN comportarse de manera razonable para todas las demás APIs de sensores (por ejemplo, devolviendo verdadero o falso según corresponda cuando las aplicaciones intenten registrar objetos de escucha, no llamando a objetos de escucha de sensores cuando los sensores correspondientes no estén presentes, etcétera).
- DEBEN informar todas las mediciones del sensor con los valores relevantes del Sistema Internacional de Unidades (es decir, métricas) para cada tipo de sensor, como se define en la documentación del SDK de Android [Recursos, 41].
La lista anterior no es exhaustiva. El comportamiento documentado del SDK de Android se debe considerar como fuente de autoridad.
Algunos tipos de sensores son sintéticos, lo que significa que se pueden obtener a partir de datos que proporcionan uno o más sensores. (entre los ejemplos, se incluyen el sensor de orientación y el sensor de aceleración lineal). Las implementaciones de dispositivos DEBEN implementar estos tipos de sensores, cuando incluyen los sensores físicos previos.
Android incluye un concepto de sensor de "transmisión", que es uno que muestra datos de forma continua, en lugar de solo cuando los datos cambian. Las implementaciones de dispositivos DEBEN proporcionar muestras de datos periódicas de forma continua para cualquier API que indique la documentación del SDK de Android como un sensor de transmisión. Ten en cuenta que las implementaciones de dispositivos DEBEN garantizar que la transmisión del sensor no impida que la CPU del dispositivo entre en un estado de suspensión o se active desde un estado de suspensión.
7.3.1. Acelerómetro
Las implementaciones de dispositivos DEBEN incluir un acelerómetro de 3 ejes. Si la implementación de un dispositivo incluye un acelerómetro de 3 ejes, hace lo siguiente:
- DEBE poder entregar eventos a 120 Hz o más. Ten en cuenta que, si bien la frecuencia del acelerómetro anterior se indica como "DEBEN" para Android 4.4, se planea que la definición de compatibilidad de una versión futura cambie a "DEBEN". Es decir, estos estándares son opcionales en Android, pero serán obligatorios en versiones futuras. Se recomienda encarecidamente que los dispositivos existentes y nuevos que ejecutan Android cumplan con estos requisitos en Android para que puedan actualizarse a las versiones futuras de la plataforma.
- DEBEN cumplir con el sistema de coordenadas del sensor de Android, como se detalla en las APIs de Android (consulta [Recursos, 41])
- DEBEN ser capaces de medir desde la caída libre hasta el doble de la gravedad (2 g) o más en cualquier vector tridimensional.
- DEBEN tener 8 bits de precisión o más
- DEBE tener una desviación estándar no superior a 0.05 m/s².
7.3.2. Magnetómetro
Las implementaciones de dispositivos DEBEN incluir un magnetómetro de 3 ejes (es decir, una brújula). Si un dispositivo incluye un magnetómetro de 3 ejes, tiene las siguientes características:
- DEBEN poder entregar eventos a 10 Hz o más.
- DEBEN cumplir con el sistema de coordenadas del sensor de Android, como se detalla en las APIs de Android (consulta [Recursos, 41]).
- DEBEN ser capaces de muestrear un rango de intensidades de campo adecuadas para cubrir el campo geomagnético.
- DEBEN tener 8 bits de precisión o más
- DEBE tener una desviación estándar no superior a 0.5 µT.
7.3.3. GPS
Las implementaciones de dispositivos DEBEN incluir un receptor GPS. Si la implementación de un dispositivo incluye un receptor GPS, DEBE incluir algún tipo de técnica de "GPS asistido" para minimizar el tiempo de bloqueo del GPS.
7.3.4. Giroscopio
Las implementaciones de dispositivos DEBEN incluir un giroscopio (es decir, un sensor de cambio angular). Los dispositivos NO DEBEN incluir un sensor de giroscopio, a menos que también se incluya un acelerómetro de 3 ejes. Si una implementación de dispositivo incluye un giroscopio, hace lo siguiente:
- DEBEN tener compensación de temperatura.
- DEBEN ser capaces de medir cambios de orientación de hasta 5.5*Pi radianes por segundo (es decir, aproximadamente 1,000 grados por segundo).
- DEBE poder entregar eventos a 200 Hz o más. Ten en cuenta que, si bien la frecuencia del giroscopio anterior se indica como "DEBEN" para Android 4.4, se planea que la definición de compatibilidad de una versión futura cambie a "DEBEN". Es decir, estos estándares son opcionales en Android, pero serán obligatorios en versiones futuras. Se recomienda encarecidamente que los dispositivos existentes y nuevos que ejecutan Android cumplan con estos requisitos para que puedan actualizarse a las versiones futuras de la plataforma.
- DEBE tener 12 bits de precisión o más
- DEBE tener una variación no superior a 1e-7 rad^2 / s^2 por Hz (variación por Hz o rad^2 / 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 tasa de muestreo de 1 Hz, no debe ser superior a 1e-7 rad^2/s^2.
- DEBEN tener marcas de tiempo lo más cercanas posible al momento en que ocurrió el evento de hardware. Se debe quitar la latencia constante.
7.3.5. Barómetro
Las implementaciones de dispositivos PUEDEN incluir un barómetro (es decir, un sensor de presión del aire ambiente). Si una implementación de dispositivo incluye un barómetro, hace lo siguiente:
- DEBE poder entregar eventos a 5 Hz o más.
- DEBEN tener una precisión adecuada para permitir la estimación de la altitud.
- DEBEN tener compensación de temperatura
7.3.6. Termómetro
Las implementaciones de dispositivos PUEDEN incluir un termómetro ambiente (es decir, un sensor de temperatura). Si está presente, DEBE definirse como SENSOR_TYPE_AMBIENT_TEMPERATURE
y DEBE medir la temperatura ambiente (de la habitación) en grados Celsius.
Las implementaciones de dispositivos PUEDEN, pero NO DEBEN, incluir un sensor de temperatura de la CPU.
Si está presente, DEBE definirse como SENSOR_TYPE_TEMPERATURE
, DEBE medir la temperatura de la CPU del dispositivo y NO DEBE medir ninguna otra temperatura. Ten en cuenta que el tipo de sensor SENSOR_TYPE_TEMPERATURE
dejó de estar disponible en Android 4.0.
7.3.7. Fotómetro
Las implementaciones de dispositivos PUEDEN incluir un fotómetro (es decir, un sensor de luz ambiental).
7.3.8. Sensor de proximidad
Las implementaciones de dispositivos PUEDEN incluir un sensor de proximidad. Si la implementación de un dispositivo incluye un sensor de proximidad, 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 el objetivo principal de este tipo de sensor es detectar un teléfono en uso por el usuario. Si la implementación de un dispositivo incluye un sensor de proximidad con cualquier otra orientación, NO DEBE ser accesible a través de esta API. Si la implementación de un dispositivo tiene un sensor de proximidad, DEBE tener 1 bit de precisión o más.
7.4. Conectividad de datos
7.4.1. Telefonía
El término “telefonía”, tal como lo usan las APIs de Android y este documento, hace referencia 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 ser conmutadas por paquetes, para Android se consideran independientes de cualquier conectividad de datos que se pueda implementar con la misma red. En otras palabras, las APIs y la funcionalidad 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 DEBEN informar la función "android.hardware.telephony" ni ninguna subfunción, 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. Sin embargo, si una implementación de dispositivo incluye telefonía GSM o CDMA, debe implementar la compatibilidad total con la API de esa tecnología. Las implementaciones de dispositivos que no incluyen hardware de telefonía DEBEN implementar las APIs completas como no-ops.
7.4.2. IEEE 802.11 (Wi-Fi)
Las implementaciones de dispositivos Android DEBEN incluir compatibilidad con una o más formas de 802.11 (b/g/a/n, etcétera). Si una implementación de dispositivo incluye compatibilidad con 802.11, DEBE implementar la API de Android correspondiente.
Las implementaciones de dispositivos DEBEN implementar la API de multicast como se describe en la documentación del SDK [Recursos, 62]. Las implementaciones de dispositivos que incluyen compatibilidad con Wi-Fi DEBEN admitir DNS multicast (mDNS). Las implementaciones de dispositivos NO DEBEN filtrar paquetes mDNS (224.0.0.251) en ningún momento de la operación, incluso cuando la pantalla no está en un estado activo.
7.4.2.1. Wi-Fi directo
Las implementaciones de dispositivos DEBEN incluir compatibilidad con Wi-Fi Direct (Wi-Fi entre pares). Si una implementación de dispositivo incluye compatibilidad con Wi-Fi Direct, DEBE implementar la API de Android correspondiente, como se describe en la documentación del SDK [Recursos, 68]. Si la implementación de un dispositivo incluye compatibilidad con Wi-Fi Direct, tiene las siguientes características:
- DEBEN admitir el funcionamiento normal de Wi-Fi.
- DEBE admitir la operación simultánea de Wi-Fi y Wi-Fi Direct
7.4.2.2. Configuración de vínculo directo con túnel Wi-Fi
Las implementaciones de dispositivos DEBEN 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 [Recursos, 85]. Si la implementación de un dispositivo incluye compatibilidad con TDLS y la API de WiFiManager habilita TDLS, el dispositivo hace lo siguiente:
- DEBE usar TDLS solo cuando sea posible Y beneficioso.
- DEBE tener alguna heurística y NO usar TDLS cuando su rendimiento pueda ser peor que pasar por el punto de acceso Wi-Fi.
7.4.3. Bluetooth
Las implementaciones de dispositivos DEBEN incluir un transceptor Bluetooth. Las implementaciones de dispositivos que incluyen un transceptor Bluetooth DEBEN habilitar la API de Bluetooth basada en RFCOMM como se describe en la documentación del SDK y declarar la función de hardware android.hardware.bluetooth [Recursos, 42]. Las implementaciones de dispositivos DEBEN implementar perfiles Bluetooth relevantes, como A2DP, AVRCP, OBEX, etc., según corresponda.
Las implementaciones de dispositivos que incluyen compatibilidad con Bluetooth GATT (perfil de atributo genérico) para habilitar la comunicación con dispositivos Bluetooth Smart o Smart Ready DEBEN habilitar la API de Bluetooth basada en GATT como se describe en la documentación del SDK y declarar la función de hardware android.hardware.bluetooth_le [Recursos, 42].
7.4.4. Comunicación de campo cercano
Las implementaciones de dispositivos DEBEN incluir un transceptor y el hardware relacionado para la comunicación de campo cercano (NFC). Si una implementación de dispositivo incluye hardware NFC, hace lo siguiente:
- DEBE informar la función android.hardware.nfc desde el método
android.content.pm.PackageManager.hasSystemFeature()
. [Recursos, 37] - DEBEN ser capaces de leer y escribir mensajes NDEF a través de los siguientes estándares de NFC:
- DEBEN ser capaces de actuar como lectores o escritores de NFC Forum (según se define en la especificación técnica 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 6319-4)
- IsoDep (ISO 14443-4)
- Tipos de etiquetas del NFC Forum 1, 2, 3 y 4 (definidos por el NFC Forum)
- DEBEN ser capaces de actuar como lectores o escritores de NFC Forum (según se define en la especificación técnica NFC Forum NFCForum-TS-DigitalProtocol-1.0) a través de los siguientes estándares de NFC:
- DEBE ser capaz de leer y escribir mensajes NDEF a través de los siguientes estándares de NFC. Ten en cuenta que, si bien los estándares de NFC que se indican a continuación se establecen como "DEBEN", se planea que la definición de compatibilidad de una versión futura los cambie a "DEBEN". Es decir, estos estándares son opcionales en esta versión, pero serán obligatorios en versiones futuras. Se recomienda encarecidamente a los dispositivos existentes y nuevos que ejecutan esta versión de Android que cumplan con estos requisitos ahora para que puedan actualizar a las versiones futuras de la plataforma.
- NFCv (ISO 15693)
- DEBEN ser capaces de transmitir y recibir datos a través de los siguientes protocolos y estándares de peer-to-peer:
- ISO 18092
- LLCP 1.0 (definido por el NFC Forum)
- SDP 1.0 (definido por NFC Forum)
- Protocolo de envío de NDEF [Recursos, 43]
- SNEP 1.0 (definido por el NFC Forum)
- DEBEN incluir compatibilidad con Android Beam [Recursos, 65]:
- DEBE implementar el servidor predeterminado de SNEP. Los mensajes NDEF válidos que recibe el servidor SNEP predeterminado DEBEN enviarse a las aplicaciones con el intent android.nfc.ACTION_NDEF_DISCOVERED. Inhabilitar Android Beam en la configuración NO DEBE inhabilitar el envío de mensajes NDEF entrantes.
- Las implementaciones de dispositivos DEBEN respetar el intent android.settings.NFCSHARING_SETTINGS para mostrar la configuración de uso compartido de NFC [Recursos, 67].
- DEBEN 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.
- DEBEN implementar un cliente SNEP y tratar de enviar NDEF P2P saliente al servidor SNEP predeterminado cuando Android Beam esté habilitado. Si no se encuentra un servidor SNEP predeterminado, el cliente DEBE intentar enviar a un servidor NPP.
- DEBEN permitir que las actividades en primer plano establezcan el mensaje NDEF P2P saliente con android.nfc.NfcAdapter.setNdefPushMessage, android.nfc.NfcAdapter.setNdefPushMessageCallback y android.nfc.NfcAdapter.enableForegroundNdefPush.
- DEBE usar un gesto o una confirmación en pantalla, como "Tocar para transmitir", antes de enviar mensajes NDEF P2P salientes.
- DEBE habilitar Android Beam de forma predeterminada
- DEBE admitir la transferencia de conexión NFC a Bluetooth cuando el dispositivo admita el perfil de inserción de objetos Bluetooth. Las implementaciones de dispositivos deben admitir la transferencia de conexión a Bluetooth cuando se usa android.nfc.NfcAdapter.setBeamPushUris, a través de la implementación de las especificaciones "Connection Handover version 1.2" [Resources, 60] y "Bluetooth Secure Simple Pairing Using NFC version 1.0" [Resources, 61] del NFC Forum. Dicha implementación DEBE implementar el servicio LLCP de transferencia con el nombre de servicio "urn:nfc:sn:handover" para intercambiar la solicitud de transferencia o seleccionar registros a través de NFC, y DEBE usar el perfil de Push de objetos Bluetooth para la transferencia real de datos Bluetooth. Por motivos heredados (para seguir siendo compatibles con dispositivos Android 4.1), la implementación DEBE aceptar solicitudes GET de SNEP para intercambiar la solicitud de entrega o seleccionar registros a través de NFC. Sin embargo, una implementación en sí NO DEBE enviar solicitudes GET de SNEP para realizar la entrega de la conexión.
- DEBE sondear todas las tecnologías compatibles mientras está en el modo de descubrimiento de NFC.
- DEBE estar en modo de descubrimiento de NFC mientras el dispositivo está activo con la pantalla activa y la pantalla de bloqueo desbloqueada.
(Ten en cuenta que los vínculos disponibles públicamente no están disponibles para las especificaciones de JIS, ISO y NFC Forum mencionadas anteriormente).
Android 4.4 presenta compatibilidad con el modo de emulación de tarjeta de host (HCE) de NFC. Si una implementación de dispositivo incluye un controlador de NFC capaz de enrutar HCE y el ID de aplicación (AID), hace lo siguiente:
- DEBE informar la constante de función
android.hardware.nfc.hce
. - DEBEN admitir las APIs de NFC HCE como se define en el SDK de Android [Recursos, 90]
Además, las implementaciones de dispositivos PUEDEN incluir compatibilidad con lectores/grabadores para las siguientes tecnologías de MIFARE.
- MIFARE Classic (NXP MF1S503x [Resources, 44], MF1S703x [Resources, 45])
- MIFARE Ultralight (NXP MF0ICU1 [Recursos, 46] y MF0ICU2 [Recursos, 47])
- NDEF en MIFARE Classic (NXP AN130511 [Resources, 48], AN130411 [Resources, 49])
Ten en cuenta que Android incluye APIs para estos tipos de MIFARE. Si una implementación de dispositivo admite MIFARE en el rol de lector/escritor, hace lo siguiente:
- DEBEN implementar las APIs de Android correspondientes, como se documenta en el SDK de Android.
- DEBE informar la función com.nxp.mifare desde el método
android.content.pm.PackageManager.hasSystemFeature()
. [Resources, 37] Ten en cuenta que esta no es una función estándar de Android y, por lo tanto, no aparece como una constante en la clasePackageManager
. - NO DEBE implementar las APIs de Android correspondientes ni informar la función com.nxp.mifare, a menos que también implemente la compatibilidad general con NFC como se describe en esta sección.
Si una implementación de dispositivo no incluye hardware NFC, NO debe declarar la función android.hardware.nfc desde el método android.content.pm.PackageManager.hasSystemFeature()
[Recursos, 37] y debe implementar la API de NFC de Android como una operación no realizada.
Como las clases android.nfc.NdefMessage
y android.nfc.NdefRecord
representan un formato de representación de datos independiente del protocolo, las implementaciones de dispositivos DEBEN implementar estas APIs, incluso si no incluyen compatibilidad con NFC ni declaran la función android.hardware.nfc.
7.4.5. Capacidad de red mínima
Las implementaciones de dispositivos DEBEN 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 200 Kbit/s o más. Algunos ejemplos de tecnologías que satisfacen este requisito son EDGE, HSPA, EV-DO, 802.11g, Ethernet, etcétera.
Las implementaciones de dispositivos en las que un estándar de red física (como Ethernet) es la conexión de datos principal DEBEN incluir compatibilidad con al menos un estándar de datos inalámbrico común, como 802.11 (Wi-Fi).
Los dispositivos PUEDEN implementar más de una forma de conectividad de datos.
7.4.6. Configuración de sincronización
Las implementaciones de dispositivos DEBEN tener la configuración de sincronización automática maestra activada de forma predeterminada para que el método getMasterSyncAutomatically()
muestre "true" [Resources, 88].
7.5. Cámaras
Las implementaciones de dispositivos DEBEN incluir una cámara posterior y PUEDEN incluir una cámara frontal. Una cámara posterior es una cámara que se encuentra en el lado del dispositivo opuesto a la pantalla; es decir, captura imágenes de escenas en el extremo opuesto del dispositivo, como una cámara tradicional. Una cámara frontal es una cámara que se encuentra en el mismo lado del dispositivo que la pantalla; es decir, una cámara que se suele usar para capturar imágenes del usuario, como en videoconferencias y aplicaciones similares.
7.5.1. Cámara posterior
Las implementaciones de dispositivos DEBEN incluir una cámara posterior. Si la implementación de un dispositivo incluye una cámara posterior, hace lo siguiente:
- DEBEN tener una resolución de al menos 2 megapíxeles.
- DEBE tener el enfoque automático de hardware o software implementado en el controlador de la cámara (transparente para el software de la aplicación).
- PUEDEN tener hardware de enfoque fijo o EDOF (profundidad de campo extendida)
- PUEDE incluir un flash. Si la cámara incluye un flash, la lámpara del flash NO DEBE estar encendida 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 el flash de forma explícita habilitando los atributos
FLASH_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 del sistema integrada del dispositivo, sino solo a las aplicaciones de terceros que usanCamera.PreviewCallback
.
7.5.2. Cámara frontal
Las implementaciones de dispositivos PUEDEN incluir una cámara frontal. Si la implementación de un dispositivo incluye una cámara frontal, hace lo siguiente:
- DEBEN tener una resolución de al menos VGA (es decir, 640 × 480 píxeles).
- NO DEBE usar una cámara frontal como la predeterminada de la API de Camera. Es decir, la API de la cámara en Android tiene compatibilidad específica con las cámaras frontales, y las implementaciones de dispositivos NO DEBEN 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.
- PUEDEN incluir funciones (como enfoque automático, flash, etc.) disponibles para las cámaras posteriores, como se describe en el artículo 7.5.1.
- DEBEN reflejar horizontalmente (es decir, duplicar) la transmisión que muestra una app en una CameraPreview, de la siguiente manera:
- Si el usuario puede rotar la implementación del dispositivo (por ejemplo, automaticamente a través de un acelerómetro o de forma manual a través de la entrada del usuario), la vista previa de la cámara DEBE reflejarse horizontalmente en relación con la orientación actual del dispositivo.
- Si la aplicación actual solicitó de forma explícita que la pantalla de la cámara se rote mediante una llamada al método
android.hardware.Camera.setDisplayOrientation()
[Resources, 50], la vista previa de la cámara DEBE duplicarse horizontalmente en relación con la orientación especificada por la aplicación. - De lo contrario, la vista previa DEBE reflejarse a lo largo del eje horizontal predeterminado del dispositivo.
- DEBEN duplicar la imagen que muestra la vista posterior de la misma manera que el flujo de imágenes de vista previa de la cámara. (si la implementación del dispositivo no es compatible con la vista posterior, este requisito no se aplica).
- NO DEBE duplicar las transmisiones de video o imágenes estáticas capturadas finales que se devuelven a las devoluciones de llamada de la aplicación o se confirman en el almacenamiento de contenido multimedia.
7.5.3. Comportamiento de la API de Camera
Las implementaciones de dispositivos DEBEN implementar los siguientes comportamientos para las APIs relacionadas con la cámara, tanto para la cámara frontal como para la posterior:
- Si una aplicación nunca llamó a
android.hardware.Camera.Parameters.setPreviewFormat(int)
, el dispositivo DEBE usarandroid.hardware.PixelFormat.YCbCr_420_SP
para los datos de vista previa que se proporcionan a las devoluciones de llamada de la aplicación. - Si una aplicación registra una instancia de
android.hardware.Camera.PreviewCallback
y el sistema llama al métodoonPreviewFrame()
cuando el formato de vista previa es YCbCr_420_SP, los datos debyte[]
que se pasan aonPreviewFrame()
deben estar en el formato de codificación NV21. Es decir, NV21 DEBE ser el valor predeterminado. - Las implementaciones de dispositivos DEBEN admitir el formato YV12 (como se indica con la constante
android.graphics.ImageFormat.YV12
) para las vistas previas de la cámara, tanto frontal como posterior. (El codificador de video y la cámara de hardware pueden usar cualquier formato de píxeles nativo, pero la implementación del dispositivo DEBE admitir la conversión a YV12).
Las implementaciones de dispositivos DEBEN implementar la API de Camera completa incluida en la documentación del SDK de Android [Recursos, 51], independientemente de si el dispositivo incluye enfoque automático de hardware o alguna otra función. Por ejemplo, las cámaras que no tienen enfoque automático DEBEN llamar a cualquier instancia registrada de android.hardware.Camera.AutoFocusCallback
(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 aún deben ser "falsas", como se describe.
Las implementaciones de dispositivos DEBEN reconocer y respetar cada nombre de parámetro definido como una constante en la clase android.hardware.Camera.Parameters
, si el hardware subyacente admite la función. Si el hardware del dispositivo no admite una función, la API debe comportarse como se documenta. Por el contrario, las implementaciones de dispositivos NO DEBEN respetar ni reconocer constantes de cadenas que se pasen al método android.hardware.Camera.setParameters()
, excepto las que se documentan como constantes en android.hardware.Camera.Parameters
. Es decir, las implementaciones de dispositivos DEBEN admitir todos los parámetros de cámara estándar si el hardware lo permite y NO DEBEN admitir tipos de parámetros de cámara personalizados.
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ámara Camera.SCENE_MODE_HDR
[Resources, 78].
Las implementaciones de dispositivos DEBEN transmitir el intent Camera.ACTION_NEW_PICTURE
cada vez que la cámara tome una foto nueva y se haya agregado la entrada de la foto a la tienda de contenido multimedia.
Las implementaciones de dispositivos DEBEN transmitir el intent Camera.ACTION_NEW_VIDEO
cada vez que la cámara graba un video nuevo y se agrega la entrada de la foto a la tienda de contenido multimedia.
7.5.4. Orientación de la cámara
Si están presentes, las cámaras frontal y posterior DEBEN estar orientadas 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 orientación horizontal. Esto se aplica independientemente de la orientación natural del dispositivo, es decir, se aplica a los dispositivos con orientación horizontal principal y a los dispositivos con orientación vertical principal.
7.6. Memoria y almacenamiento
7.6.1. Memoria y almacenamiento mínimos
Las implementaciones de dispositivos DEBEN tener al menos 340 MB de memoria disponible para el kernel y el espacio de usuario. Los 340 MB DEBEN ser adicionales a cualquier memoria dedicada a componentes de hardware, como radio, video, etcétera, que no estén bajo el control del kernel.
Las implementaciones de dispositivos con menos de 512 MB de memoria disponible para el kernel y el espacio de usuario DEBEN mostrar el valor "true" para ActivityManager.isLowRamDevice()
.
Las implementaciones de dispositivos DEBEN tener al menos 1 GB de almacenamiento no volátil disponible para los datos privados de la aplicación. Es decir, la partición /data
DEBE ser de al menos 1 GB. Se recomienda encarecidamente que las implementaciones de dispositivos que ejecutan Android tengan al menos 2 GB de almacenamiento no volátil para los datos privados de la aplicación, de modo que puedan actualizarse a las versiones futuras de la plataforma.
Las APIs de Android incluyen un Administrador de descargas que las aplicaciones pueden usar para descargar archivos de datos [Recursos, 56]. La implementación del Administrador de descargas en el dispositivo DEBE ser capaz de descargar archivos individuales de al menos 100 MB de tamaño a la ubicación predeterminada de "caché".
7.6.2. Almacenamiento externo compartido
Las implementaciones de dispositivos DEBEN ofrecer almacenamiento compartido para las aplicaciones. El almacenamiento compartido proporcionado DEBE tener un tamaño de al menos 1 GB.
Las implementaciones de dispositivos DEBEN configurarse con el almacenamiento compartido activado de forma predeterminada. Si el almacenamiento compartido no está activado en la ruta de acceso /sdcard
de Linux, el dispositivo DEBE incluir un vínculo simbólico de Linux desde /sdcard
hasta el punto de activación real.
Las implementaciones de dispositivos DEBEN aplicar, como se documenta, el permiso android.permission.WRITE_EXTERNAL_STORAGE
en este almacenamiento compartido. De lo contrario, cualquier aplicación que obtenga ese permiso DEBE poder escribir en el almacenamiento compartido.
Las implementaciones de dispositivos PUEDEN tener hardware para el almacenamiento extraíble al que el usuario puede acceder, como una tarjeta Secure Digital. Como alternativa, las implementaciones de dispositivos PUEDEN asignar almacenamiento interno (no extraíble) como almacenamiento compartido para apps. El Proyecto de código abierto de Android upstream incluye una implementación que usa el almacenamiento interno del dispositivo para las APIs de almacenamiento externo compartido. Las implementaciones de dispositivos DEBEN usar esta configuración y esta implementación de software.
Independientemente de la forma de almacenamiento compartido que se use, las implementaciones de dispositivos DEBEN proporcionar algún mecanismo para acceder al contenido del almacenamiento compartido desde una computadora host, como el almacenamiento masivo USB (UMS) o el protocolo de transferencia multimedia (MTP). Las implementaciones de dispositivos PUEDEN usar el almacenamiento masivo USB, pero DEBEN usar el Protocolo de transferencia de contenido multimedia. Si la implementación del dispositivo admite el Protocolo de transferencia de medios, haz lo siguiente:
- La implementación del dispositivo DEBE ser compatible con el host de MTP de Android de referencia, Android File Transfer [Recursos, 57].
- La implementación del dispositivo DEBE informar una clase de dispositivo USB de
0x00
. - La implementación del dispositivo DEBE informar un nombre de interfaz USB de "MTP".
Si la implementación del dispositivo no tiene puertos USB, DEBE proporcionar a una computadora anfitrión acceso al contenido del almacenamiento compartido por algún otro medio, como un sistema de archivos de red.
Para ilustrarlo, consideremos dos ejemplos comunes. Si la implementación de un dispositivo incluye una ranura para tarjeta SD para satisfacer el requisito de almacenamiento compartido, SE DEBE incluir una tarjeta SD con formato FAT de 1 GB de tamaño o superior con el dispositivo tal como se vende a los usuarios y DEBE activarse de forma predeterminada.
Como alternativa, si una implementación de dispositivo usa almacenamiento fijo interno para satisfacer este requisito, ese almacenamiento DEBE tener un tamaño de 1 GB o superior y estar activado en /sdcard
(o /sdcard
DEBE ser un vínculo simbólico a la ubicación física si está activado en otro lugar).
Las implementaciones de dispositivos que incluyen varias rutas de acceso de almacenamiento compartido (como una ranura para tarjeta SD y almacenamiento interno compartido) NO DEBEN permitir que las aplicaciones para Android escriban en el almacenamiento externo secundario, excepto por sus directorios específicos del paquete en el almacenamiento externo secundario, pero DEBEN exponer el contenido de ambas rutas de acceso de almacenamiento de forma transparente a través del servicio de escáner de contenido multimedia de Android y android.provider.MediaStore.
7.7. USB
Las implementaciones de dispositivos DEBEN incluir un puerto cliente USB y un puerto host USB.
Si una implementación de dispositivo incluye un puerto cliente USB, haz lo siguiente:
- El puerto DEBE poder conectarse a un host USB con un puerto USB-A estándar.
- El puerto DEBE usar el factor de forma micro-USB en el lado del dispositivo. Se recomienda encarecidamente que los dispositivos existentes y nuevos que ejecutan Android cumplan con estos requisitos en Android para que puedan actualizarse a las versiones futuras de la plataforma.
- El puerto DEBE estar centrado en el medio de un borde. Las implementaciones de dispositivos DEBEN ubicar el puerto en la parte inferior del dispositivo (según la orientación natural) o habilitar la rotación de pantalla de software para todas las apps (incluida la pantalla principal) para que la pantalla se dibuje correctamente cuando el dispositivo esté orientado con el puerto en la parte inferior. Se recomienda encarecidamente a los dispositivos existentes y nuevos que ejecutan Android que cumplan con estos requisitos en Android para que puedan actualizar a versiones futuras de la plataforma.
- Si el dispositivo tiene otros puertos (como un puerto de carga que no es USB), DEBE estar en el mismo borde que el puerto micro-USB.
- DEBE permitir que un host conectado al dispositivo acceda al contenido del volumen de almacenamiento compartido mediante el almacenamiento masivo USB o el Protocolo de transferencia de medios.
- DEBE implementar la API y la especificación de Android Open Accessory como se documenta en la documentación del SDK de Android, y DEBE declarar la compatibilidad con la función de hardware
android.hardware.usb.accessory
[Recursos, 52]. - DEBE implementar la clase de audio USB como se documenta en la documentación del SDK de Android [Recursos, 66].
- DEBE implementar la compatibilidad con la especificación de carga de batería USB [Recursos, 64]. Se recomienda encarecidamente a los dispositivos existentes y nuevos que ejecutan Android que cumplan con estos requisitos para que puedan actualizar a las versiones futuras de la plataforma.
- El valor de iSerialNumber en el descriptor de dispositivo estándar USB DEBE ser igual al valor de android.os.Build.SERIAL.
Si la implementación de un dispositivo incluye un puerto host USB, haz lo siguiente:
- PUEDE usar un factor de forma de puerto no estándar, pero, de ser así, DEBE enviarse con un cable o cables que adapten el puerto a USB-A estándar.
- 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
[Recursos, 53].
Las implementaciones de dispositivos DEBEN implementar Android Debug Bridge. Si la implementación de un dispositivo omite un puerto cliente USB, DEBE implementar el puente de depuración de Android a través de una red de área local (como Ethernet o 802.11).
8. Compatibilidad de rendimiento
Las implementaciones de dispositivos DEBEN cumplir con las métricas de rendimiento clave de un dispositivo compatible con Android que se definen en la siguiente tabla:
Métrica | Umbral de rendimiento | Comentarios |
Hora de inicio de la aplicación | Las siguientes aplicaciones deberían iniciarse dentro del tiempo especificado.
|
El tiempo de inicio se mide como el tiempo total para completar la carga de la actividad predeterminada de la aplicación, incluido el tiempo que tarda en iniciarse el proceso de Linux, cargar el paquete de Android en la VM de Dalvik y llamar a onCreate. |
Aplicaciones simultáneas | Cuando se inician varias aplicaciones, reiniciar una aplicación que ya se está ejecutando después de que se inició debe tardar menos que el tiempo de inicio original. |
9. Compatibilidad de modelos de seguridad
Las implementaciones de dispositivos DEBEN implementar un modelo de seguridad coherente con el modelo de seguridad de la plataforma de Android, como se define en el documento de referencia de seguridad y permisos de las APIs [Recursos, 54] en la documentación para desarrolladores de Android. Las implementaciones de dispositivos DEBEN admitir la instalación de aplicaciones con firma propia sin requerir permisos ni certificados adicionales de terceros o autoridades. Específicamente, los dispositivos compatibles DEBEN admitir los mecanismos de seguridad que se describen en las siguientes sub secciones.
9.1. Permisos
Las implementaciones de dispositivos DEBEN admitir el modelo de permisos de Android como se define en la documentación para desarrolladores de Android [Recursos, 54]. Específicamente, las implementaciones DEBEN aplicar cada permiso definido como se describe en la documentación del SDK. No se pueden omitir, alterar ni ignorar permisos. Las implementaciones PUEDEN agregar permisos adicionales, siempre que las cadenas de ID de permiso nuevas no estén en el espacio de nombres android.*.
9.2. Aislamiento de UID y procesos
Las implementaciones de dispositivos DEBEN admitir el modelo de zona de pruebas de aplicaciones de Android, en el que cada aplicación se ejecuta como un UID único de estilo Unix y en un proceso independiente. Las implementaciones de dispositivos DEBEN admitir la ejecución de varias aplicaciones como el mismo ID de usuario de Linux, siempre que las aplicaciones estén firmadas y compiladas correctamente, como se define en la referencia de seguridad y permisos [Recursos, 54].
9.3. Permisos del sistema de archivos
Las implementaciones de dispositivos DEBEN admitir el modelo de permisos de acceso a archivos de Android como se define en la referencia de seguridad y permisos [Recursos, 54].
9.4. Entornos de ejecución alternativos
Las implementaciones de dispositivos PUEDEN incluir entornos de ejecución que ejecutan aplicaciones con algún otro software o tecnología que no sea la máquina virtual de Dalvik o el código nativo. Sin embargo, estos entornos de ejecución alternativos NO deben comprometer el modelo de seguridad de Android ni la seguridad de las aplicaciones de Android instaladas, como se describe en esta sección.
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 la Sección 9.
Los entornos de ejecución alternativos NO DEBEN tener acceso a recursos protegidos por permisos que no se solicitaron en el archivo AndroidManifest.xml del entorno de ejecución a través del mecanismo <uses-permission>
.
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.
Los entornos de ejecución alternativos DEBEN cumplir con el modelo de zona de pruebas de Android. Más precisamente:
- Los entornos de ejecución alternativos DEBEN instalar apps a través de PackageManager en zonas de pruebas de Android independientes (es decir, IDs de usuario de Linux, etcétera).
- Los entornos de ejecución alternativos PUEDEN proporcionar una sola zona de pruebas de Android que comparten todas las aplicaciones que usan el entorno de ejecución alternativo.
- Los tiempos de ejecución alternativos y las aplicaciones instaladas que usan un tiempo de ejecución alternativo NO DEBEN volver a usar 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.
- Los entornos de ejecución alternativos NO DEBEN iniciarse con acceso a las zonas de pruebas correspondientes a otras aplicaciones para Android, ni otorgarlo.
Los tiempos de ejecución alternativos NO DEBEN iniciarse con privilegios del superusuario (root) ni otorgarlos a otras aplicaciones, ni otorgarlos a otras aplicaciones.
Los archivos .apk de tiempos de ejecución alternativos PUEDEN incluirse en la imagen del sistema de una implementación de dispositivo, pero DEBEN estar firmados con una clave distinta de la que se usa para firmar otras aplicaciones incluidas con la implementación del dispositivo.
Cuando se instalan aplicaciones, los entornos de ejecución alternativos DEBEN obtener el consentimiento del usuario para los permisos de Android que usa la aplicación. Es decir, si una aplicación necesita usar un recurso de dispositivo para el que hay un permiso de Android correspondiente (como la cámara, el GPS, etcétera), el entorno de ejecución alternativo DEBE informar al usuario que la aplicación podrá acceder a ese recurso. Si el entorno de ejecución no registra las capacidades de la aplicación de esta manera, el entorno de ejecución 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.
9.5. Compatibilidad con varios usuarios
Android incluye compatibilidad con varios usuarios y proporciona compatibilidad con el aislamiento completo de usuarios [Recursos, 70].
Las implementaciones de dispositivos DEBEN cumplir con estos requisitos relacionados con la compatibilidad con varios usuarios [Recursos, 71]:
- Como el comportamiento de las APIs de telefonía en dispositivos con varios usuarios aún no está definido, las implementaciones de dispositivos que declaran android.hardware.telephony NO DEBEN habilitar la compatibilidad con varios usuarios.
- Las implementaciones de dispositivos DEBEN implementar, para cada usuario, un modelo de seguridad coherente con el modelo de seguridad de la plataforma de Android, como se define en el documento de referencia de seguridad y permisos de las APIs [Recursos, 54].
- Android incluye compatibilidad con perfiles restringidos, una función que permite a los propietarios de dispositivos 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 otros usuarios trabajen en ellos, con la capacidad de administrar restricciones más detalladas en las apps que están disponibles en esos entornos. Las implementaciones de dispositivos que admiten varios usuarios DEBEN admitir perfiles restringidos. El Proyecto de código abierto de Android ascendente incluye una implementación que satisface este requisito.
Cada instancia de usuario en un dispositivo Android DEBE tener directorios de almacenamiento externo separados y aislados. Las implementaciones de dispositivos PUEDEN almacenar datos de varios usuarios en el mismo volumen o sistema de archivos. Sin embargo, la implementación del dispositivo DEBE garantizar que las aplicaciones que pertenecen a un usuario determinado y se ejecutan en su nombre no puedan enumerar, leer ni escribir datos que pertenezcan a ningún otro usuario. Ten en cuenta que los medios extraíbles, como las ranuras para tarjetas SD, pueden permitir que un usuario acceda a los datos de otro a través de una PC host. Por este motivo, las implementaciones de dispositivos que usan medios extraíbles para las APIs de almacenamiento externo DEBEN encriptar el contenido de la tarjeta SD si se habilita el modo multiusuario con una clave almacenada solo en medios no extraíbles a los que solo pueda acceder el sistema. Como esto hará que una 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. Por lo tanto, las implementaciones de dispositivos PUEDEN, pero NO DEBEN, habilitar el modo multiusuario si usan contenido multimedia extraíble [Recursos, 72] para el almacenamiento externo principal.
9.6. Advertencia sobre SMS premium
Android incluye compatibilidad para advertir a los usuarios sobre cualquier mensaje SMS premium saliente [Recursos, 73] . Los SMS premium son mensajes de texto que se envían a un servicio registrado con un operador que puede cobrar un cargo al usuario.
Las implementaciones de dispositivos que declaran compatibilidad con android.hardware.telephony
DEBEN advertir a los usuarios antes de enviar un mensaje SMS a números identificados por 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 pueden usar el sistema de control de acceso obligatorio (MAC) de Security-Enhanced Linux (SELinux) y otras funciones de seguridad en el kernel de Linux. SELinux o cualquier otra función de seguridad, si se implementan debajo del framework de Android:
- DEBEN mantener la compatibilidad con las aplicaciones existentes.
- NO DEBE tener una interfaz de usuario visible, incluso cuando se detecten incumplimientos.
- NO DEBE ser configurable por el usuario ni el desarrollador.
Si alguna API para la configuración de políticas está expuesta a una aplicación que puede afectar a otra (como una API de administración de dispositivos), la API NO DEBE permitir configuraciones que rompan la compatibilidad.
Los dispositivos DEBEN implementar SELinux y cumplir con los siguientes requisitos, que se cumplen con la implementación de referencia en el proyecto de código abierto de Android upstream.
- DEBE admitir una política de SELinux que permita configurar el modo SELinux por dominio con lo siguiente:
- Los dominios que están en modo de aplicación forzosa en la implementación de código abierto de Android upstream (como installd, netd y vold) DEBEN estar en modo de aplicación forzosa.
- Los dominios de las aplicaciones de terceros DEBEN permanecer en modo permisivo para garantizar la compatibilidad continua.
- DEBE cargar la política del archivo
/sepolicy
en el dispositivo. - DEBE admitir actualizaciones dinámicas del archivo de políticas de SELinux sin requerir una actualización de la imagen del sistema.
- DEBE registrar cualquier incumplimiento de política sin interrumpir las aplicaciones ni afectar el comportamiento del sistema.
Las implementaciones de dispositivos DEBEN retener la política predeterminada de SELinux proporcionada en el proyecto de código abierto de Android upstream hasta que se hayan auditado las incorporaciones a la política de SELinux. Las implementaciones de dispositivos DEBEN ser compatibles con el Proyecto de código abierto de Android upstream.
9.8. Privacidad
Si el dispositivo implementa una funcionalidad en el sistema que captura el contenido que se muestra en la pantalla o graba la transmisión de audio que se reproduce en el dispositivo, DEBE notificar al usuario de forma continua cada vez que esta funcionalidad esté habilitada y capturando o grabando de forma activa.
9.9. Encriptación de disco completo
SI el dispositivo tiene una pantalla de bloqueo, DEBE admitir la encriptación de disco completo.
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 prueba de software es completamente exhaustivo. 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 el Proyecto de código abierto de Android. Esto minimizará el riesgo de introducir errores que creen incompatibilidades que requieran retrabajos y posibles actualizaciones de dispositivos.
10.1. Conjunto de pruebas de compatibilidad (CTS)
Las implementaciones de dispositivos DEBEN aprobar el Conjunto de pruebas de compatibilidad (CTS) de Android [Recursos, 2] disponible en el Proyecto de código abierto de Android con el software de envío final en el dispositivo. Además, los implementadores de dispositivos DEBEN usar la implementación de referencia en el árbol de código abierto de Android tanto como sea posible y DEBEN garantizar la compatibilidad en casos de ambigüedad en CTS y para cualquier nueva implementació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á control de versiones independientemente de esta definición de compatibilidad, y es posible que se lancen varias revisiones del CTS para Android 4.4. Las implementaciones de dispositivos DEBEN aprobar la versión más reciente de CTS disponible en el momento en que se completa el software del dispositivo.
10.2. Verificador del CTS
Las implementaciones de dispositivos DEBEN ejecutar correctamente todos los casos aplicables en el verificador de CTS. El verificador del CTS se incluye en el paquete de pruebas de compatibilidad y está diseñado para que lo ejecute un operador humano para probar la funcionalidad que un sistema automatizado no puede probar, como el funcionamiento correcto de una cámara y los sensores.
El verificador del CTS tiene pruebas para muchos tipos de hardware, incluido algunos que son opcionales. Las implementaciones de dispositivos DEBEN aprobar todas las pruebas del hardware que poseen. Por ejemplo, si un dispositivo tiene un acelerómetro, DEBE ejecutar correctamente el caso de prueba del acelerómetro en el verificador de CTS. Los casos de prueba de las funciones que se indican como opcionales en este Documento de definición de compatibilidad PUEDEN omitirse.
Cada dispositivo y cada compilación DEBEN ejecutar correctamente el verificador de CTS, como se indicó anteriormente. Sin embargo, como muchas compilaciones son muy similares, no se espera que los implementadores de dispositivos ejecuten de forma explícita el verificador de CTS en compilaciones que solo difieren de forma trivial. Específicamente, las implementaciones de dispositivos que difieren de una implementación que pasó el verificador de CTS solo por el conjunto de configuraciones regionales, desarrollo de la marca, etcétera, PUEDEN omitir la prueba del verificador de CTS.
10.3. Aplicaciones de referencia
Los implementadores de dispositivos DEBEN probar la compatibilidad de la implementación con las siguientes aplicaciones de código abierto:
- Las aplicaciones "Apps para Android" [Recursos, 55]
- Replica Island (disponible en Google Play Store)
Cada app anterior DEBE iniciarse y comportarse correctamente en la implementación para que esta se considere compatible.
11. Software actualizable
Las implementaciones de dispositivos DEBEN incluir un mecanismo para reemplazar todo el 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 que pueda reemplazar todo el 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 mediante el reinicio
- Actualizaciones "con conexión" por USB desde una PC host
- Actualizaciones "sin conexión" mediante un reinicio y una actualización desde un archivo en el almacenamiento extraíble
El mecanismo de actualización que se usa DEBE admitir actualizaciones sin borrar los datos del usuario. Es decir, el mecanismo de actualización DEBE preservar los datos privados y 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 se encuentra un error en la implementación de un dispositivo después de su lanzamiento, pero dentro de su vida útil razonable del producto que se determina en consulta con el equipo de compatibilidad de Android para afectar la compatibilidad de las aplicaciones de terceros, el implementador del dispositivo DEBE corregir el error mediante una actualización de software disponible que se pueda aplicar según el mecanismo que se acaba de describir.
12. Registro de cambios del documento
En la siguiente tabla, se incluye un resumen de los cambios en la Definición de Compatibilidad de esta versión.
Secciones | Resumen del cambio |
---|---|
3.2.2. Parámetros de compilación | Se revisaron las descripciones de BRAND, DEVICE y PRODUCT. Ahora se requiere SERIAL. |
3.2.3.5. Configuración predeterminada de la app | Nueva sección que agrega el requisito de cumplir con la nueva configuración predeterminada de la aplicación |
3.3.1 Interfaces binarias de la aplicación | Se aclararon los valores permitidos para los parámetros android.os.Build.CPU_ABI y android.os.Build.CPU_ABI2 . |
3.4.1. Compatibilidad con WebView | Se agregó Chromium como implementación de WebView obligatoria. |
3.7. Compatibilidad de máquinas virtuales | Se agregó el requisito de densidades de pantalla xxhdpi y 400 dpi. |
3.8.6. Temas | Se actualizó para reflejar el uso de barras del sistema translúcidas. |
3.8.12. Ubicación | Nueva sección que agrega el requisito de que la configuración de ubicación esté centralizada. |
3.8.13. Unicode | Nueva sección que agrega el requisito de compatibilidad con emojis. |
3.9. Administración del dispositivo | Las aplicaciones administrativas preinstaladas que se mencionan no pueden ser la aplicación predeterminada del propietario del dispositivo. |
5.1. Códecs multimedia | Se agregó el requisito de decodificador VP9. Se agregó la especificación recomendada para los códecs VP8 de hardware. |
5.3. Decodificación de video | Se agregó VP9. Se agregó una recomendación para el cambio de resolución dinámico. |
5.4. Grabación de audio | Se agregó REMOTE_SUBMIX como nueva fuente de audio obligatoria. Se hizo obligatorio el uso de la API de android.media.audiofx.NoiseSuppressor . |
6.2.1 Experimental | Nueva sección que presenta el entorno de ejecución de ART y requiere Dalvik como el entorno de ejecución predeterminada. |
7.1.1. Configuración de la pantalla | Se reemplazó la relación de aspecto de 1.85 por 1.86. Se agregó la densidad de pantalla de 400 dpi. |
7.1.6. Tipos de pantalla | Se agregó la configuración de resolución de 640 dpi (4K). |
7.2.3. Teclas de navegación | Se agregó la función Recientes como esencial y se relegó la función Menú en prioridad. |
7.3.6. Termómetro | Se agregó SENSOR_TYPE_AMBIENT_TEMPERATURE como termómetro recomendado. |
7.4.2.2. Configuración de vínculo directo con túnel Wi-Fi | Nueva sección que agrega compatibilidad con la configuración de vínculo directo con tunelización (TDLS) de Wi-Fi. |
7.4.4. Comunicación de campo cercano | Se agregó la emulación de tarjeta de host (HCE) como requisito. Se reemplazó SNEP GET por el protocolo de control de vínculo lógico (LLCP) y se agregó el perfil de Bluetooth Object Push como requisito. |
7.4.6. Configuración de sincronización | Nueva sección que agrega el requisito de que la sincronización automática de datos esté habilitada de forma predeterminada. |
7.6.1. Memoria y almacenamiento mínimos | Se agregó el requisito de configuración de ActivityManager.isLowRamDevice() para dispositivos con menos de 512 MB de memoria. Se aumentaron los requisitos de almacenamiento de 512 MB y 1 GB a 1 GB y 2 GB, respectivamente. |
7.6.2. Almacenamiento "externo" compartido | Correcciones editoriales, como el cambio de nombre de la sección y el traslado de texto que se ajusta a esta sección desde la sección 9.5. Las aplicaciones destacadas pueden escribir en sus directorios específicos de paquetes en el almacenamiento externo secundario. |
7.7. USB | Se agregó el requisito de que todos los dispositivos informen un número de serie USB. |
9.5. Compatibilidad con varios usuarios | Se trasladó el texto no específico para varios usuarios a la sección 7.6.2. |
9.7. Funciones de seguridad del kernel | Se volvió a escribir para indicar el cambio de SELinux al modo de aplicación y el requisito de que el resultado de SELinux no se renderice en la interfaz de usuario. |
9.8. Privacidad | Nueva sección que agrega el requisito de que la grabación de audio y video debe activar notificaciones continuas para el usuario. |
9.9. Encriptación de disco completo | Nueva sección que agrega dispositivos con requisitos de pantalla de bloqueo compatibles con la encriptación de disco completo. |
12. Registro de cambios del documento | Nueva sección que resume los cambios en el CDD por sección. |
13. Comunícate con nosotros
Puedes comunicarte con los autores del documento en compatibility@android.com para obtener aclaraciones y plantear cualquier problema que creas que no se aborda en el documento.