Sommaire
2.1 Configurations de l'appareil
3.1. Compatibilité avec les API gérées
3.2. Compatibilité avec les API
3.2.2. Paramètres de compilation
3.2.3. Compatibilité des intents
3.2.3.1. Intents d'application principaux
3.2.3.2. Résolution des intents
3.2.3.3. Espaces de noms d'intent
3.2.3.5. Paramètres des applications par défaut
3.3. Compatibilité avec les API natives
3.3.1. Interfaces binaires d'application
3.3.2. Compatibilité du code natif ARM 32 bits
3.4.1. Compatibilité avec WebView
3.4.2. Compatibilité avec les navigateurs
3.5. Compatibilité comportementale des API
3.7. Compatibilité avec l'environnement d'exécution
3.8. Compatibilité de l'interface utilisateur
3.8.1. Lanceur (écran d'accueil)
3.9. Administration des appareils
3.9.1 Provisionnement des appareils
3.9.1.1 Provisionnement du propriétaire de l'appareil
3.9.1.2 Provisionnement de profils gérés
3.9.2. Assistance pour les profils gérés
3.12.1.1. Guide des programmes électroniques
3.12.1.3. Association d'applications à la source TV
4. Compatibilité du packaging des applications
5.4.2. Enregistrer pour la reconnaissance vocale
5.4.3. Capture pour le redirignement de la lecture
5.5.3. Volume de la sortie audio
6. Compatibilité des outils et options pour les développeurs
6.1. Outils pour les développeurs
6.2. Options pour les développeurs
7.1.1. Configuration de l'écran
7.1.2. Métriques sur le Réseau Display
7.1.4. Accélération graphique 2D et 3D
7.1.5. Ancien mode de compatibilité des applications
7.2.2. Navigation sans contact
7.3.9. Capteurs haute fidélité
7.3.10. Lecteur d'empreinte digitale
7.4.2.2. Configuration du lien direct en tunnel Wi-Fi
7.4.5. Capacité réseau minimale
7.4.6. Paramètres de synchronisation
7.5.4. Comportement de l'API Camera
7.5.5. Orientation de l'appareil photo
7.6.1. Mémoire et stockage minimums
7.6.2. Stockage partagé d'application
7.8.2.1. Ports audio analogiques
8.1. Cohérence de l'expérience utilisateur
8.2. Performances d'accès aux E/S de fichiers
9. Compatibilité des modèles de sécurité
9.2. UID et isolement des processus
9.3. Autorisations du système de fichiers
9.4. Environnements d'exécution alternatifs
9.5. Compatibilité multi-utilisateur
9.6. Avertissement concernant les SMS premium
9.7. Fonctionnalités de sécurité du noyau
9.9. Chiffrement de disque complet
10. Tests de compatibilité des logiciels
10.1. Compatibility Test Suite
11. Logiciels pouvant être mis à jour
1. Introduction
Ce document énonce les exigences à respecter pour que les appareils soient compatibles avec Android 6.0.
L'utilisation des termes "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY" et "OPTIONAL" est conforme à la norme IETF définie dans RFC2119 [Ressources, 1].
Dans ce document, un "implémentateur d'appareils" ou "implémentateur" désigne une personne ou une organisation qui développe une solution matérielle/logicielle exécutant Android 6.0. Une "implémentation d'appareil" ou "implémentation" est la solution matérielle/logicielle ainsi développée.
Pour être considérées comme compatibles avec Android 6.0, les implémentations d'appareils DOIVENT respecter les exigences présentées dans cette définition de la compatibilité, y compris les documents incorporés par référence.
Lorsque cette définition ou les tests logiciels décrits dans la section 10 sont silencieux, ambigus ou incomplets, il incombe à l'implémentateur de l'appareil de s'assurer de la compatibilité avec les implémentations existantes.
C'est pourquoi le projet Android Open Source [Ressources, 2] est à la fois l'implémentation de référence et l'implémentation privilégiée d'Android. Il est vivement recommandé aux implémentateurs d'appareils de baser leurs implémentations dans la mesure du possible sur le code source "en amont" disponible sur le projet Open Source Android. Bien que certains composants puissent être remplacés par d'autres implémentations, il est FORTEMENT RECOMMANDÉ de ne pas suivre cette pratique, car réussir les tests logiciels deviendra beaucoup plus difficile. Il est de la responsabilité de l'implémentateur de garantir une compatibilité comportementale totale avec l'implémentation Android standard, y compris et au-delà de la Compatibility Test Suite. Enfin, notez que certaines substitutions et modifications de composants sont explicitement interdites par ce document.
De nombreuses ressources listées dans la section 14 sont dérivées directement ou indirectement du SDK Android et seront fonctionnellement identiques aux informations de la documentation de ce SDK. Dans le cas où cette définition de la compatibilité ou la suite de tests de compatibilité ne sont pas conformes à la documentation du SDK, la documentation du SDK est considérée comme faisant autorité. Tous les détails techniques fournis dans les références incluses dans la section 14 sont considérés comme faisant partie de cette définition de la compatibilité.
2. Types d'appareils
Bien que le projet Android Open Source ait été utilisé pour implémenter différents types et facteurs de forme d'appareils, de nombreux aspects de l'architecture et des exigences de compatibilité ont été optimisés pour les appareils portables. À partir d'Android 5.0, le projet Android Open Source vise à prendre en charge une plus grande variété de types d'appareils, comme décrit dans cette section.
Appareil Android portable désigne une implémentation d'appareil Android qui est généralement utilisée en le tenant dans la main, comme les lecteurs MP3, les téléphones et les tablettes. Implémentations d'appareils Android portables:
- DOIT être équipé d'un écran tactile intégré.
- DOIT disposer d'une source d'alimentation permettant la mobilité, comme une batterie.
Un appareil Android TV désigne une implémentation d'appareil Android qui est une interface de divertissement permettant de consommer des contenus multimédias numériques, des films, des jeux, des applications et/ou de la télévision en direct pour les utilisateurs assis à environ trois mètres (interface utilisateur "relax" ou "10 pieds"). Appareils Android TV:
- DOIT comporter un écran intégré OU inclure un port de sortie vidéo, tel que VGA, HDMI ou un port sans fil pour l'affichage.
- DOIT déclarer les fonctionnalités android.software.leanback et android.hardware.type.television [Ressources, 3].
Un appareil Android Watch désigne une implémentation d'appareil Android destinée à être portée sur le corps, peut-être au poignet, et:
- DOIT avoir un écran dont la diagonale physique est comprise entre 1,1 et 2,5 pouces.
- DOIT déclarer la fonctionnalité android.hardware.type.watch.
- DOIT prendre en charge uiMode = UI_MODE_TYPE_WATCH [Resources, 4].
L'implémentation d'Android Automotive désigne un tableau de bord de véhicule exécutant Android comme système d'exploitation pour une partie ou la totalité du système et/ou des fonctionnalités d'infodivertissement. Implémentations Android Automotive:
- DOIT déclarer la fonctionnalité android.hardware.type.automotive.
- DOIT prendre en charge uiMode = UI_MODE_TYPE_CAR [Resources, 5].
Toutes les implémentations d'appareils Android qui ne correspondent à aucun des types d'appareils ci-dessus DOIVENT respecter toutes les exigences de ce document pour être compatibles avec Android 6.0, sauf si l'exigence est explicitement décrite comme ne s'appliquant qu'à un type d'appareil Android spécifique ci-dessus.
2.1 Configurations de l'appareil
Voici un récapitulatif des principales différences de configuration matérielle par type d'appareil. (Les cellules vides indiquent "POURRA"). Toutes les configurations ne sont pas couvertes dans ce tableau. Pour en savoir plus, consultez les sections matérielles concernées.
Catégorie | Fonctionnalité | Section | Caméra à la main | Télévision | Regarder | Automobile | Autre |
---|---|---|---|---|---|---|---|
Entrée | Pavé directionnel | 7.2.2. Navigation sans contact | OBLIGATOIRE | ||||
Écran tactile | 7.2.4. Saisie tactile | OBLIGATOIRE | OBLIGATOIRE | DOIT | |||
Micro | 7.8.1. Micro | OBLIGATOIRE | DOIT | OBLIGATOIRE | OBLIGATOIRE | DOIT | |
Capteurs | Accéléromètre | 7.3.1 Accéléromètre | DOIT | DOIT | DOIT | ||
GPS | 7.3.3. GPS | DOIT | DOIT | ||||
Connectivité | Wi-Fi | 7.4.2. IEEE 802.11 | DOIT | OBLIGATOIRE | DOIT | DOIT | |
Wi-Fi Direct | 7.4.2.1. Wi-Fi Direct | DOIT | DOIT | DOIT | |||
Bluetooth | 7.4.3. Bluetooth | DOIT | OBLIGATOIRE | OBLIGATOIRE | OBLIGATOIRE | DOIT | |
Bluetooth à basse consommation | 7.4.3. Bluetooth | DOIT | OBLIGATOIRE | DOIT | DOIT | DOIT | |
Mode périphérique/hôte USB | 7.7. USB | DOIT | DOIT | DOIT | |||
Sortie | Ports de sortie audio et/ou de haut-parleur | 7.8.2. Sortie audio | OBLIGATOIRE | OBLIGATOIRE | OBLIGATOIRE | OBLIGATOIRE |
3. Logiciel
3.1. Compatibilité avec les API gérées
L'environnement d'exécution de bytecode Dalvik géré est le principal moyen de transport des applications Android. L'API Android est l'ensemble d'interfaces de la plate-forme Android exposées aux applications exécutées dans l'environnement d'exécution géré. Les implémentations d'appareils DOIVENT fournir des implémentations complètes, y compris tous les comportements documentés, de toute API documentée exposée par le SDK Android [Ressources, 6] ou de toute API décorée avec le repère "@SystemApi" dans le code source Android en amont.
Les implémentations d'appareils NE DOIVENT PAS omettre d'API gérées, modifier les interfaces ou les signatures d'API, s'écarter du comportement documenté ni inclure de no-ops, sauf dans les cas spécifiquement autorisés par cette définition de compatibilité.
Cette définition de compatibilité permet d'omettre certains types de matériel pour lesquels Android inclut des API par les implémentations d'appareils. Dans ce cas, les API DOIVENT toujours être présentes et se comporter de manière raisonnable. Pour connaître les exigences spécifiques à ce scénario, consultez la section 7.
3.2. Compatibilité des API avec une compatibilité douce
En plus des API gérées de la section 3.1, Android inclut également une API "soft" importante au moment de l'exécution, sous la forme d'intents, d'autorisations et d'aspects similaires des applications Android qui ne peuvent pas être appliqués au moment de la compilation de l'application.
3.2.1. Autorisations
Les implémentateurs d'appareils DOIVENT prendre en charge et appliquer toutes les constantes d'autorisation, comme indiqué sur la page de référence sur les autorisations [Ressources, 7]. Notez que la section 9 liste des exigences supplémentaires liées au modèle de sécurité Android.
3.2.2. Paramètres de compilation
Les API Android incluent un certain nombre de constantes dans la classe android.os.Build [Ressources, 8] qui sont destinées à décrire l'appareil actuel. Pour fournir des valeurs cohérentes et pertinentes dans les implémentations d'appareils, le tableau ci-dessous inclut des restrictions supplémentaires sur les formats de ces valeurs auxquelles les implémentations d'appareils DOIVENT se conformer.
Paramètre | Détails |
---|---|
VERSION.RELEASE | Version du système Android actuellement en cours d'exécution, au format lisible. Ce champ DOIT contenir l'une des valeurs de chaîne définies dans [Ressources, 9]. |
VERSION.SDK | Version du système Android actuellement en cours d'exécution, dans un format accessible au code d'application tiers. Pour Android 6.0, ce champ DOIT avoir la valeur entière 23. |
VERSION.SDK_INT | Version du système Android actuellement en cours d'exécution, dans un format accessible au code d'application tiers. Pour Android 6.0, ce champ DOIT avoir la valeur entière 23. |
VERSION.INCREMENTAL | Valeur choisie par l'implémentateur de l'appareil pour désigner la version spécifique du système Android en cours d'exécution, au format lisible par l'homme. Cette valeur NE DOIT PAS être réutilisée pour les différents builds mis à la disposition des utilisateurs finaux. L'utilisation typique de ce champ consiste à indiquer le numéro de build ou l'identifiant de modification de contrôle source utilisé pour générer le build. Aucune exigence n'est imposée concernant le format spécifique de ce champ, sauf qu'il NE DOIT PAS être nul ni la chaîne vide (""). |
JEUX DE SOCIÉTÉ | Valeur choisie par l'implémentateur de l'appareil pour identifier le matériel interne spécifique utilisé par l'appareil, au format lisible par l'homme. Ce champ peut être utilisé pour indiquer la révision spécifique de la carte alimentant l'appareil. La valeur de ce champ DOIT être encodable en ASCII 7 bits et correspondre à l'expression régulière "^[a-zA-Z0-9_-]+$". |
MARQUE | Valeur reflétant le nom de la marque associé à l'appareil tel que connu des utilisateurs finaux. DOIT être au format lisible par l'homme et DOIT représenter le fabricant de l'appareil ou la marque de l'entreprise sous laquelle l'appareil est commercialisé. La valeur de ce champ DOIT être encodable en ASCII 7 bits et correspondre à l'expression régulière "^[a-zA-Z0-9_-]+$". |
SUPPORTED_ABIS | Nom de l'ensemble d'instructions (type de processeur + convention ABI) du code natif. Voir la section 3.3. Compatibilité avec les API natives. |
SUPPORTED_32_BIT_ABIS | Nom de l'ensemble d'instructions (type de processeur + convention ABI) du code natif. Voir la section 3.3. Compatibilité avec les API natives. |
SUPPORTED_64_BIT_ABIS | Nom du deuxième ensemble d'instructions (type de processeur + convention ABI) du code natif. Voir la section 3.3. Compatibilité avec les API natives. |
CPU_ABI | Nom de l'ensemble d'instructions (type de processeur + convention ABI) du code natif. Voir la section 3.3. Compatibilité avec les API natives. |
CPU_ABI2 | Nom du deuxième ensemble d'instructions (type de processeur + convention ABI) du code natif. Voir la section 3.3. Compatibilité avec les API natives. |
APPAREIL | Valeur choisie par l'implémentateur de l'appareil contenant le nom de développement ou le nom de code identifiant la configuration des fonctionnalités matérielles et la conception industrielle de l'appareil. La valeur de ce champ DOIT être encodable en ASCII 7 bits et correspondre à l'expression régulière "^[a-zA-Z0-9_-]+$". |
FINGERPRINT | Chaîne qui identifie de manière unique ce build. Il DOIT être raisonnablement lisible par l'humain. Il DOIT respecter ce modèle:
$(BRAND)/$(PRODUCT)/ Exemple : acme/myproduct/ L'empreinte ne doit PAS inclure d'espaces blancs. Si d'autres champs inclus dans le modèle ci-dessus contiennent des caractères d'espace, ils DOIVENT être remplacés dans l'empreinte de compilation par un autre caractère, tel que le trait de soulignement ("_"). La valeur de ce champ DOIT être encodable en ASCII 7 bits. |
MATÉRIEL | Nom du matériel (à partir de la ligne de commande du kernel ou de /proc). Il DOIT être raisonnablement lisible par l'humain. La valeur de ce champ DOIT être encodable en ASCII 7 bits et correspondre à l'expression régulière "^[a-zA-Z0-9_-]+$". |
ORGANISATEUR | Chaîne qui identifie de manière unique l'hôte sur lequel le build a été créé, au format lisible par l'homme. Aucune exigence n'est imposée concernant le format spécifique de ce champ, sauf qu'il NE DOIT PAS être nul ni la chaîne vide (""). |
ID | Identifiant choisi par l'implémentateur de l'appareil pour faire référence à une version spécifique, au format lisible par l'utilisateur. Ce champ peut être identique à android.os.Build.VERSION.INCREMENTAL, mais DOIT être une valeur suffisamment significative pour que les utilisateurs finaux puissent distinguer les builds logiciels. La valeur de ce champ DOIT être encodable en ASCII 7 bits et correspondre à l'expression régulière "^[a-zA-Z0-9._-]+$". |
FABRICANT | Nom commercial du fabricant d'équipement d'origine (OEM) du produit. Aucune exigence n'est imposée concernant le format spécifique de ce champ, sauf qu'il NE DOIT PAS être nul ni la chaîne vide (""). |
MODÈLE | Valeur choisie par l'implémentateur de l'appareil contenant le nom de l'appareil tel que connu par l'utilisateur final. Il DOIT s'agir du même nom que celui sous lequel l'appareil est commercialisé et vendu aux utilisateurs finaux. Aucune exigence n'est imposée concernant le format spécifique de ce champ, sauf qu'il NE DOIT PAS être nul ni la chaîne vide (""). |
PRODUIT | Valeur choisie par l'implémentateur de l'appareil contenant le nom de développement ou le nom de code du produit spécifique (code SKU) qui DOIT être unique au sein de la même marque. DOIT être lisible par l'humain, mais n'est pas nécessairement destiné à être vu par les utilisateurs finaux. La valeur de ce champ DOIT être encodable en ASCII 7 bits et correspondre à l'expression régulière "^[a-zA-Z0-9_-]+$". |
SERIAL | Un numéro de série matériel, qui DOIT être disponible et unique pour tous les appareils ayant le même MODÈLE et le même FABRICANT. La valeur de ce champ DOIT être encodable en ASCII 7 bits et correspondre à l'expression régulière "^([a-zA-Z0-9]{6,20})$". |
TAGS | Liste de tags choisis par l'implémentateur de l'appareil, séparés par une virgule, qui permet de distinguer davantage le build. Ce champ DOIT contenir l'une des valeurs correspondant aux trois configurations de signature de la plate-forme Android standards: release-keys, dev-keys et test-keys. |
DURÉE | Valeur représentant le code temporel de la compilation. |
MACH | Valeur choisie par l'implémentateur de l'appareil spécifiant la configuration d'exécution du build. Ce champ DOIT avoir l'une des valeurs correspondant aux trois configurations d'exécution Android typiques: user, userdebug ou eng. |
UTILISATEUR | Nom ou ID utilisateur de l'utilisateur (ou de l'utilisateur automatique) qui a généré le build. Aucune exigence n'est imposée concernant le format spécifique de ce champ, sauf qu'il NE DOIT PAS être nul ni la chaîne vide (""). |
SECURITY_PATCH | Valeur indiquant le niveau du correctif de sécurité d'un build. Il DOIT indiquer que le build inclut tous les correctifs de sécurité publiés dans le bulletin de sécurité public Android désigné. Elle doit être au format [AAAA-MM-JJ] et correspondre à l'une des chaînes de niveau de correctif de sécurité Android des bulletins de sécurité publics, par exemple "2015-11-01". |
BASE_OS | Valeur représentant le paramètre FINGERPRINT de la version qui est par ailleurs identique à cette version, à l'exception des correctifs fournis dans le bulletin de sécurité public Android. Il DOIT indiquer la valeur correcte. S'il n'existe pas de build de ce type, indiquez une chaîne vide (""). |
3.2.3. Compatibilité des intents
Les implémentations d'appareils DOIVENT respecter le système d'intent à liaison lâche d'Android, comme décrit dans les sections ci-dessous. Par "honoré", on entend que l'implémentateur de l'appareil DOIT fournir une activité ou un service Android qui spécifie un filtre d'intent correspondant qui se lie et implémente un comportement correct pour chaque modèle d'intent spécifié.
3.2.3.1. Intents d'application principaux
Les intents Android permettent aux composants d'application de demander des fonctionnalités à d'autres composants Android. Le projet Android en amont inclut une liste d'applications considérées comme des applications Android de base, qui implémente plusieurs modèles d'intent pour effectuer des actions courantes. Les applications principales d'Android sont les suivantes:
- Horloge de bureau
- Navigateur
- Agenda
- Contacts
- Galerie
- GlobalSearch
- Lanceur d'applications
- Musique
- Paramètres
Les implémentations d'appareils DOIVENT inclure les applications Android de base, le cas échéant, mais DOIVENT inclure un composant implémentant les mêmes modèles d'intent définis par tous les composants d'activité ou de service "publics" de ces applications Android de base. Notez que les composants Activity ou Service sont considérés comme "publics" lorsque l'attribut android:exported est absent ou a la valeur "true".
3.2.3.2. Résolution des intents
Étant donné qu'Android est une plate-forme extensible, les implémentations d'appareils DOIVENT permettre à chaque modèle d'intent référencé dans la section 3.2.3.1 d'être remplacé par des applications tierces. L'implémentation Open Source Android en amont permet cela par défaut. Les implémentateurs d'appareils NE DOIVENT PAS associer des droits spéciaux à l'utilisation de ces modèles d'intent par les applications système, ni empêcher les applications tierces de se lier à ces modèles et de les contrôler. Cette interdiction inclut spécifiquement, mais sans s'y limiter, la désactivation de l'interface utilisateur "Chooser" qui permet à l'utilisateur de choisir parmi plusieurs applications qui gèrent toutes le même modèle d'intent.
Les implémentations d'appareils DOIVENT fournir une interface utilisateur permettant aux utilisateurs de modifier l'activité par défaut pour les intents.
Toutefois, les implémentations d'appareils PEUVENT fournir des activités par défaut pour des modèles d'URI spécifiques (par exemple, http://play.google.com) lorsque l'activité par défaut fournit un attribut plus spécifique pour l'URI de données. Par exemple, un format de filtre d'intent spécifiant l'URI de données "http://www.android.com" est plus spécifique que le format d'intent principal du navigateur pour "http://".
Android inclut également un mécanisme permettant aux applications tierces de déclarer un comportement de liaison d'application par défaut faisant autorité pour certains types d'intents d'URI Web [Ressources, 140]. Lorsque de telles déclarations faisant autorité sont définies dans les modèles de filtre d'intent d'une application, les implémentations d'appareil:
- DOIT essayer de valider tous les filtres d'intent en effectuant les étapes de validation définies dans la spécification Digital Asset Links [Resources, 141] telles qu'implémentées par le gestionnaire de paquets dans le projet Open Source Android en amont.
- DOIT tenter de valider les filtres d'intent lors de l'installation de l'application et définir tous les filtres d'intent UIR validés avec succès comme gestionnaires d'application par défaut pour leurs UIR.
- PEUT définir des filtres d'intent URI spécifiques comme gestionnaires d'application par défaut pour leurs URI, s'ils sont correctement validés, mais que d'autres filtres d'URI candidats ne le sont pas. Si une implémentation d'appareil le fait, elle DOIT fournir à l'utilisateur les forçages de modèle par URI appropriés dans le menu des paramètres.
- DOIT fournir à l'utilisateur des commandes par application dans les paramètres comme suit :
- L'utilisateur DOIT pouvoir remplacer de manière globale le comportement par défaut des liens d'application pour qu'une application soit toujours ouverte, toujours demandée ou jamais ouverte, ce qui doit s'appliquer de manière égale à tous les filtres d'intent URI candidats.
- L'utilisateur DOIT pouvoir consulter une liste des filtres d'intent URI candidats.
- L'implémentation de l'appareil PEUT permettre à l'utilisateur de remplacer des filtres d'intent URI candidats spécifiques qui ont été validés, sur la base de chaque filtre d'intent.
- L'implémentation de l'appareil DOIT permettre aux utilisateurs d'afficher et de remplacer des filtres d'intent d'URI candidats spécifiques si l'implémentation de l'appareil permet à certains filtres d'intent d'URI candidats de réussir la validation, tandis que d'autres peuvent échouer.
3.2.3.3. Espaces de noms d'intent
Les implémentations d'appareils NE DOIVENT PAS inclure de composant Android qui respecte les nouveaux modèles d'intent ou d'intent de diffusion à l'aide d'une ACTION, d'une CATEGORIE ou d'une autre chaîne de clé dans l'espace de noms android.* ou com.android.*. Les implémentateurs d'appareils NE DOIVENT PAS inclure de composants Android qui respectent les nouveaux modèles d'intent ou d'intent de diffusion à l'aide d'une ACTION, d'une CATEGORIE ou d'une autre chaîne de clé dans un espace de package appartenant à une autre organisation. Les implémentateurs d'appareils NE DOIVENT PAS modifier ni étendre les modèles d'intent utilisés par les applications principales listées dans la section 3.2.3.1. Les implémentations d'appareils PEUVENT inclure des modèles d'intent utilisant des espaces de noms clairement et évidemment associés à leur propre organisation. Cette interdiction est semblable à celle spécifiée pour les classes de langage Java dans la section 3.6.
3.2.3.4. Intents de diffusion
Les applications tierces s'appuient sur la plate-forme pour diffuser certains intents afin de les informer des modifications apportées à l'environnement matériel ou logiciel. Les appareils compatibles avec Android DOIVENT diffuser les intents de diffusion publique en réponse aux événements système appropriés. Les intents de diffusion sont décrits dans la documentation du SDK.
3.2.3.5. Paramètres de l'application par défaut
Android inclut des paramètres qui permettent aux utilisateurs de sélectionner facilement leurs applications par défaut, par exemple pour l'écran d'accueil ou les SMS. Lorsque cela est approprié, les implémentations d'appareils DOIVENT fournir un menu de paramètres similaire et être compatibles avec le modèle de filtre d'intent et les méthodes d'API décrites dans la documentation du SDK, comme indiqué ci-dessous.
Implémentations de l'appareil:
- DOIT respecter l'intent android.settings.HOME_SETTINGS pour afficher un menu de paramètres d'application par défaut pour l'écran d'accueil, si l'implémentation de l'appareil signale android.software.home_screen [Ressources, 10]
- DOIT fournir un menu de paramètres qui appelle l'intent android.provider.Telephony.ACTION_CHANGE_DEFAULT pour afficher une boîte de dialogue permettant de modifier l'application de SMS par défaut, si l'implémentation de l'appareil signale android.hardware.telephony [Ressources, 11]
- DOIT respecter l'intent android.settings.NFC_PAYMENT_SETTINGS pour afficher un menu de paramètres d'application par défaut pour le paiement sans contact, si l'implémentation de l'appareil signale android.hardware.nfc.hce [Ressources, 10]
3.3. Compatibilité avec les API natives
3.3.1. Interfaces binaires d'application
Le bytecode Dalvik géré peut appeler le code natif fourni dans le fichier .apk de l'application en tant que fichier .so ELF compilé pour l'architecture matérielle de l'appareil appropriée. Étant donné que le code natif est fortement dépendant de la technologie de processeur sous-jacente, Android définit un certain nombre d'interfaces binaires d'application (ABI) dans le NDK Android. Les implémentations d'appareils DOIVENT être compatibles avec une ou plusieurs ABI définies et DOIVENT implémenter la compatibilité avec le NDK Android, comme indiqué ci-dessous.
Si une implémentation d'appareil prend en charge une ABI Android, elle:
- DOIT inclure la prise en charge du code exécuté dans l'environnement géré pour appeler le code natif, à l'aide de la sémantique standard de l'interface Java Native Interface (JNI)
- DOIT être compatible avec la source (c'est-à-dire avec l'en-tête) et avec le binaire (pour l'ABI) avec chaque bibliothèque requise de la liste ci-dessous
- DOIT prendre en charge l'ABI 32 bits équivalent si une ABI 64 bits est prise en charge
- DOIT indiquer avec précision l'interface binaire d'application (ABI) native prise en charge par l'appareil, via les paramètres android.os.Build.SUPPORTED_ABIS, android.os.Build.SUPPORTED_32_BIT_ABIS et android.os.Build.SUPPORTED_64_BIT_ABIS, chacun étant une liste d'ABI séparés par une virgule, de la plus à la moins préférée
- DOIT indiquer, via les paramètres ci-dessus, uniquement les ABI documentées et décrites dans la dernière version de la documentation de gestion des ABI du NDK Android [Ressources, 12], et DOIT prendre en charge l'extension Advanced SIMD (également appelée NEON) [Ressources, 13].
- DOIT être compilé à l'aide du code source et des fichiers d'en-tête disponibles dans le projet Open Source Android en amont
Les API de code natif suivantes DOIVENT être disponibles pour les applications qui incluent du code natif:
- libc (bibliothèque C)
- libm (bibliothèque mathématique)
- Compatibilité minimale avec C++
- Interface JNI
- liblog (journalisation Android)
- libz (compression zlib)
- libdl (lecteur de liens dynamique)
- libGLESv1_CM.so (OpenGL ES 1.x)
- libGLESv2.so (OpenGL ES 2.0)
- libGLESv3.so (OpenGL ES 3.x)
- libEGL.so (gestion des surfaces OpenGL natives)
- libjnigraphics.so
- libOpenSLES.so (compatibilité audio OpenSL ES 1.0.1)
- libOpenMAXAL.so (compatibilité avec OpenMAX AL 1.0.1)
- libandroid.so (prise en charge des activités Android natives)
- libmediandk.so (compatibilité avec les API multimédias natives)
- Prise en charge d'OpenGL, comme décrit ci-dessous
Notez que les futures versions du NDK Android peuvent prendre en charge des ABI supplémentaires. Si une implémentation d'appareil n'est pas compatible avec une ABI prédéfinie existante, elle NE DOIT PAS signaler la prise en charge d'une quelconque ABI.
Notez que les implémentations d'appareils DOIVENT inclure libGLESv3.so et DOIVENT créer un lien symbolique (lien symbolique) vers libGLESv2.so. À son tour, DOIT exporter tous les symboles de fonction OpenGL ES 3.1 et Android Extension Pack [Resources, 14] tels que définis dans la version du NDK android-21. Bien que tous les symboles doivent être présents, seules les fonctions correspondantes pour les versions et les extensions OpenGL ES réellement compatibles avec l'appareil doivent être entièrement implémentées.
Les implémentations d'appareils, si elles incluent une bibliothèque native portant le nom libvulkan.so, DOIVENT exporter des symboles de fonction et fournir une implémentation de l'API Vulkan 1.0 et des extensions VK_KHR_surface, VK_KHR_swapchain et VK_KHR_android_surface telles que définies par le groupe Khronos et qui réussissent les tests de conformité Khronos.
La compatibilité du code natif est difficile. Pour cette raison, il est FORTEMENT RECOMMANDÉ aux implémentateurs d'appareils d'utiliser les implémentations des bibliothèques listées ci-dessus à partir du projet Open Source Android en amont.
3.3.2. Compatibilité du code natif ARM 32 bits
L'architecture ARMv8 abandonne plusieurs opérations de processeur, y compris certaines opérations utilisées dans le code natif existant. Sur les appareils ARM 64 bits, les opérations obsolètes suivantes DOIVENT rester disponibles pour le code ARM natif 32 bits, soit via la prise en charge du processeur natif, soit via l'émulation logicielle:
- Instructions pour les SWP et SWPB
- Instruction SETEND
- Opérations de barrière CP15ISB, CP15DSB et CP15DMB
Les anciennes versions du NDK Android utilisaient /proc/cpuinfo pour découvrir les fonctionnalités du processeur à partir du code natif ARM 32 bits. Pour la compatibilité avec les applications créées à l'aide de ce NDK, les appareils DOIVENT inclure les lignes suivantes dans /proc/cpuinfo lorsqu'elles sont lues par des applications ARM 32 bits:
- "Fonctionnalités: ", suivi d'une liste des fonctionnalités de processeur ARMv7 facultatives compatibles avec l'appareil
- "Architecture de processeur: ", suivi d'un entier décrivant l'architecture ARM la plus élevée prise en charge par l'appareil (par exemple, "8" pour les appareils ARMv8)
Ces exigences ne s'appliquent que lorsque /proc/cpuinfo est lu par des applications ARM 32 bits. Les appareils NE DOIVENT PAS modifier /proc/cpuinfo lorsqu'ils sont lus par des applications ARM 64 bits ou non-ARM.
3.4. Compatibilité Web
3.4.1. Compatibilité avec WebView
Les appareils Android Watch peuvent, mais toutes les autres implémentations d'appareils doivent fournir une implémentation complète de l'API android.webkit.Webview.
La fonctionnalité de plate-forme android.software.webview DOIT être signalée sur tout appareil qui fournit une implémentation complète de l'API android.webkit.WebView et NE DOIT PAS être signalée sur les appareils sans implémentation complète de l'API. L'implémentation Open Source d'Android utilise le code du projet Chromium pour implémenter android.webkit.WebView [Ressources, 15]. Étant donné qu'il n'est pas possible de développer une suite de tests complète pour un système de rendu Web, les implémentateurs d'appareils DOIVENT utiliser le build en amont spécifique de Chromium dans l'implémentation de WebView. Plus spécifiquement :
- Les implémentations android.webkit.WebView de l'appareil DOIVENT être basées sur le build Chromium du projet Android Open Source Project en amont pour Android 6.0. Cette version inclut un ensemble spécifique de fonctionnalités et de correctifs de sécurité pour WebView [Ressources, 16].
- La chaîne d'agent utilisateur signalée par la WebView DOIT respecter le format suivant:
Mozilla/5.0 (Linux; Android $(VERSION); $(MODEL) Build/$(BUILD); wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 $(CHROMIUM_VER) Mobile Safari/537.36
- La valeur de la chaîne $(VERSION) DOIT être identique à celle d'android.os.Build.VERSION.RELEASE.
- La valeur de la chaîne $(MODEL) DOIT être identique à celle d'android.os.Build.MODEL.
- La valeur de la chaîne $(BUILD) DOIT être identique à celle d'android.os.Build.ID.
- La valeur de la chaîne $(CHROMIUM_VER) DOIT correspondre à la version de Chromium dans le projet Open Source Android en amont.
- Les implémentations d'appareils PEUVENT omettre "Mobile" dans la chaîne user-agent.
Le composant WebView DOIT prendre en charge autant de fonctionnalités HTML5 que possible et, s'il le fait, DOIT se conformer à la spécification HTML5 [Ressources, 17].
3.4.2. Compatibilité avec les navigateurs
Les implémentations d'Android Television, de la montre et d'Android Automotive PEUVENT omettre une application de navigateur, mais DOIVENT prendre en charge les modèles d'intent publics, comme décrit dans la section 3.2.3.1. Tous les autres types d'implémentations d'appareils DOIVENT inclure une application de navigateur autonome pour la navigation Web des utilisateurs.
Le navigateur autonome PEUT être basé sur une technologie de navigateur autre que WebKit. Toutefois, même si une autre application de navigateur est utilisée, le composant android.webkit.WebView fourni aux applications tierces DOIT être basé sur WebKit, comme décrit dans la section 3.4.1.
Les implémentations peuvent fournir une chaîne user-agent personnalisée dans l'application de navigateur autonome.
L'application de navigateur autonome (qu'elle soit basée sur l'application de navigateur WebKit en amont ou sur un remplacement tiers) DOIT prendre en charge autant que possible HTML5 [Ressources, 17]. Au minimum, les implémentations d'appareils DOIVENT prendre en charge chacune de ces API associées à HTML5:
- cache de l'application/opération hors connexion [Ressources, 18]
- la balise
- géolocalisation [Resources, 20]
De plus, les implémentations d'appareils DOIVENT être compatibles avec l'API Webstorage HTML5/W3C [Ressources, 21] et DEVRAIENT être compatibles avec l'API IndexedDB HTML5/W3C [Ressources, 22]. Notez que, à mesure que les organismes de normalisation du développement Web passent à IndexedDB plutôt qu'à Webstorage, IndexedDB devrait devenir un composant obligatoire dans une prochaine version d'Android.
3.5. Compatibilité du comportement des API
Les comportements de chacun des types d'API (gérés, souples, natifs et Web) doivent être cohérents avec l'implémentation privilégiée du projet Open Source Android en amont [Ressources, 2]. Voici quelques domaines de compatibilité spécifiques:
- Les appareils NE DOIVENT PAS modifier le comportement ni la sémantique d'un intent standard.
- Les appareils NE DOIVENT PAS modifier le cycle de vie ou la sémantique du cycle de vie d'un type particulier de composant système (tel que Service, Activity, ContentProvider, etc.).
- Les appareils NE DOIVENT PAS modifier la sémantique d'une autorisation standard.
La liste ci-dessus n'est pas exhaustive. La suite de tests de compatibilité (CTS) teste des parties importantes de la plate-forme pour vérifier sa compatibilité comportementale, mais pas toutes. Il incombe à l'implémentateur de s'assurer de la compatibilité comportementale avec le projet Android Open Source. C'est pourquoi les implémentateurs d'appareils DOIVENT utiliser le code source disponible via le projet Android Open Source dans la mesure du possible, plutôt que de réimplémenter des parties importantes du système.
3.6. Espaces de noms d'API
Android suit les conventions d'espace de noms de package et de classe définies par le langage de programmation Java. Pour assurer la compatibilité avec les applications tierces, les implémentateurs d'appareils NE DOIVENT PAS apporter de modifications interdites (voir ci-dessous) à ces espaces de noms de packages:
- java.*
- javax.*
- sun.*
- android.*
- com.android.*
Les modifications interdites incluent les suivantes :
- Les implémentations d'appareils NE DOIVENT PAS modifier les API exposées publiquement sur la plate-forme Android en modifiant les signatures de méthode ou de classe, ni en supprimant des classes ou des champs de classe.
- Les implémentateurs d'appareils PEUVENT modifier l'implémentation sous-jacente des API, mais de telles modifications NE DOIVENT PAS avoir d'incidence sur le comportement indiqué et la signature en langage Java de toute API exposée publiquement.
- Les implémentateurs d'appareils NE DOIVENT PAS ajouter d'éléments exposés publiquement (tels que des classes ou des interfaces, ou des champs ou des méthodes à des classes ou interfaces existantes) aux API ci-dessus.
Un "élément exposé publiquement" est tout élément qui n'est pas décoré avec le repère "@hide" tel qu'il est utilisé dans le code source Android en amont. En d'autres termes, les implémentateurs d'appareils NE DOIVENT PAS exposer de nouvelles API ni modifier les API existantes dans les espaces de noms indiqués ci-dessus. Les implémentateurs d'appareils PEUVENT apporter des modifications internes uniquement, mais ces modifications NE DOIVENT PAS être annoncées ni exposées aux développeurs.
Les implémentateurs d'appareils PEUVENT ajouter des API personnalisées, mais ces API NE DOIVENT PAS se trouver dans un espace de noms appartenant à une autre organisation ou faisant référence à une autre organisation. Par exemple, les implémentateurs d'appareils NE DOIVENT PAS ajouter d'API à l'espace de noms com.google.* ou à un espace de noms similaire: seul Google peut le faire. De même, Google NE DOIT PAS ajouter d'API aux espaces de noms d'autres entreprises. De plus, si une implémentation d'appareil inclut des API personnalisées en dehors du namespace Android standard, ces API DOIVENT être empaquetées dans une bibliothèque partagée Android afin que seules les applications qui les utilisent explicitement (via le mécanisme Si un implémentateur d'appareil propose d'améliorer l'un des espaces de noms de package ci-dessus (par exemple, en ajoutant une nouvelle fonctionnalité utile à une API existante ou en ajoutant une nouvelle API), il DOIT consulter source.android.com et commencer le processus d'envoi de modifications et de code, conformément aux informations disponibles sur ce site. Notez que les restrictions ci-dessus correspondent aux conventions standards de dénomination des API dans le langage de programmation Java. Cette section vise simplement à renforcer ces conventions et à les rendre contraignantes en les incluant dans cette définition de compatibilité. Les implémentations d'appareils DOIVENT prendre en charge le format Dalvik Executable (DEX) complet, ainsi que la spécification et la sémantique du bytecode Dalvik [Ressources, 23]. Les implémentateurs d'appareils DOIVENT utiliser ART, l'implémentation en amont de référence du format d'exécutable Dalvik et le système de gestion des paquets de l'implémentation de référence. Les implémentations d'appareils DOIVENT configurer les environnements d'exécution Dalvik pour allouer de la mémoire conformément à la plate-forme Android en amont et comme indiqué dans le tableau suivant. (Consultez la section 7.1.1 pour connaître les définitions de la taille et de la densité de l'écran.) Notez que les valeurs de mémoire spécifiées ci-dessous sont considérées comme des valeurs minimales, et que les implémentations d'appareils PEUVENT allouer plus de mémoire par application. Android inclut une application de lanceur (écran d'accueil) et prend en charge les applications tierces pour remplacer le lanceur de l'appareil (écran d'accueil). Les implémentations d'appareils qui permettent aux applications tierces de remplacer l'écran d'accueil de l'appareil DOIVENT déclarer la fonctionnalité de plate-forme android.software.home_screen. Les widgets sont facultatifs pour toutes les implémentations d'appareils Android, mais ils DOIVENT être compatibles avec les appareils Android portables. Android définit un type de composant, ainsi qu'une API et un cycle de vie correspondants, qui permettent aux applications d'exposer un "AppWidget" à l'utilisateur final [Resources, 24], une fonctionnalité qui est FORTEMENT RECOMMANDÉE pour les implémentations d'appareils portables. Les implémentations d'appareils compatibles avec l'intégration de widgets sur l'écran d'accueil DOIVENT respecter les exigences suivantes et déclarer la prise en charge de la fonctionnalité de plate-forme android.software.app_widgets. Android inclut des API qui permettent aux développeurs d'avertir les utilisateurs d'événements notables [Ressources, 25], à l'aide des fonctionnalités matérielles et logicielles de l'appareil. Certaines API permettent aux applications d'envoyer des notifications ou d'attirer l'attention à l'aide de matériel, en particulier du son, de la vibration et de la lumière. Les implémentations d'appareils DOIVENT prendre en charge les notifications qui utilisent des fonctionnalités matérielles, comme décrit dans la documentation du SDK et dans la mesure du possible avec le matériel d'implémentation de l'appareil. Par exemple, si une implémentation d'appareil inclut un vibreur, elle DOIT implémenter correctement les API de vibration. Si une implémentation d'appareil ne dispose pas de matériel, les API correspondantes DOIVENT être implémentées en tant que no-ops. Ce comportement est décrit plus en détail dans la section 7. En outre, l'implémentation DOIT afficher correctement toutes les ressources (icônes, fichiers d'animation, etc.) fournies dans les API [Resources, 26] ou dans le guide de style des icônes de la barre d'état/système [Resources, 27], qui, dans le cas d'un appareil Android TV, inclut la possibilité de ne pas afficher les notifications. Les implémentateurs d'appareils PEUVENT proposer une expérience utilisateur alternative pour les notifications que celle fournie par l'implémentation Open Source Android de référence. Toutefois, ces systèmes de notification alternatifs DOIVENT prendre en charge les ressources de notification existantes, comme indiqué ci-dessus. Android est compatible avec diverses notifications, par exemple: Lorsque ces notifications sont rendues visibles, les implémentations d'appareils Android DOIVENT exécuter correctement les notifications Rich et Heads-up, et inclure le titre/nom, l'icône et le texte, comme indiqué dans les API Android [Ressources, 28].
Android inclut des API Notification Listener Service qui permettent aux applications (une fois activées explicitement par l'utilisateur) de recevoir une copie de toutes les notifications au fur et à mesure de leur publication ou de leur mise à jour. Les implémentations d'appareils DOIVENT envoyer correctement et rapidement l'intégralité des notifications à tous ces services d'écouteur installés et activés par l'utilisateur, y compris toutes les métadonnées associées à l'objet Notification. Android inclut des API [Ressources, 29] qui permettent aux développeurs d'intégrer la recherche dans leurs applications et d'exposer les données de leur application dans la recherche système globale. De manière générale, cette fonctionnalité consiste en une interface utilisateur unique, au niveau du système, qui permet aux utilisateurs de saisir des requêtes, d'afficher des suggestions à mesure qu'ils saisissent du texte et d'afficher des résultats. Les API Android permettent aux développeurs de réutiliser cette interface pour fournir une recherche dans leurs propres applications et de fournir des résultats à l'interface utilisateur de recherche globale commune. Les implémentations d'appareils Android DOIVENT inclure une recherche globale, une interface utilisateur de recherche unique, partagée et à l'échelle du système, capable de proposer des suggestions en temps réel en réponse à l'entrée utilisateur. Les implémentations d'appareils DOIVENT implémenter les API qui permettent aux développeurs de réutiliser cette interface utilisateur pour fournir une recherche dans leurs propres applications. Les implémentations d'appareils qui implémentent l'interface de recherche globale DOIVENT implémenter les API qui permettent aux applications tierces d'ajouter des suggestions au champ de recherche lorsqu'il est exécuté en mode recherche globale. Si aucune application tierce n'est installée pour utiliser cette fonctionnalité, le comportement par défaut DOIT être d'afficher les résultats et les suggestions du moteur de recherche Web. Les implémentations d'appareils Android DOIVENT implémenter un assistant sur l'appareil pour gérer l'action d'assistance [Ressources, 30]. Android inclut également les API Assist pour permettre aux applications de choisir la quantité d'informations du contexte actuel à partager avec l'assistant sur l'appareil [Resources, 31]. Les implémentations d'appareils compatibles avec l'action d'assistance DOIVENT indiquer clairement à l'utilisateur final quand le contexte est partagé en affichant une lumière blanche autour des bords de l'écran. Pour assurer une visibilité claire à l'utilisateur final, l'indication DOIT respecter ou dépasser la durée et la luminosité de l'implémentation du projet Open Source Android. Les applications peuvent utiliser l'API "Toast" pour afficher des chaînes courtes non modales à l'utilisateur final, qui disparaissent après un court laps de temps [Resources, 32]. Les implémentations d'appareils DOIVENT afficher les toasts des applications aux utilisateurs finaux de manière très visible. Android fournit des "thèmes" comme mécanisme permettant aux applications d'appliquer des styles à l'ensemble d'une activité ou d'une application. Android inclut une famille de thèmes "Holo" sous la forme d'un ensemble de styles définis que les développeurs d'applications peuvent utiliser s'ils souhaitent reproduire l'apparence du thème Holo tel que défini par le SDK Android [Resources, 33]. Les implémentations d'appareils NE DOIVENT PAS modifier les attributs du thème Holo exposés aux applications [Resources, 34]. Android inclut une famille de thèmes "Material" sous la forme d'un ensemble de styles définis que les développeurs d'applications peuvent utiliser s'ils souhaitent adapter l'apparence du thème de conception à la grande variété de types d'appareils Android. Les implémentations d'appareils DOIVENT prendre en charge la famille de thèmes "Material" et NE DOIVENT PAS modifier les attributs du thème Material ni les éléments exposés aux applications [Ressources, 35]. Android inclut également une famille de thèmes "Par défaut de l'appareil" en tant qu'ensemble de styles définis que les développeurs d'applications peuvent utiliser s'ils souhaitent reproduire l'apparence du thème de l'appareil tel que défini par l'implémentateur de l'appareil. Les implémentations de l'appareil PEUVENT modifier les attributs de thème par défaut de l'appareil exposés aux applications [Resources, 34]. Android est compatible avec un thème de variante avec des barres système transparentes, ce qui permet aux développeurs d'applications de remplir la zone derrière la barre d'état et de navigation avec le contenu de leur application. Pour offrir une expérience de développement cohérente dans cette configuration, il est important que le style des icônes de la barre d'état soit conservé dans les différentes implémentations d'appareils. Par conséquent, les implémentations d'appareils Android DOIVENT utiliser le blanc pour les icônes d'état du système (telles que l'intensité du signal et le niveau de la batterie) et les notifications émises par le système, sauf si l'icône indique un état problématique ou qu'une application demande une barre d'état claire à l'aide de l'indicateur SYSTEM_UI_FLAG_LIGHT_STATUS_BAR. Lorsqu'une application demande une barre d'état claire, les implémentations d'appareils Android DOIVENT changer la couleur des icônes d'état du système en noir [Resources, 34]. Android définit un type de composant, ainsi qu'une API et un cycle de vie correspondants, qui permettent aux applications d'exposer un ou plusieurs "fonds d'écran animés" à l'utilisateur final [Resources, 36]. Les fonds d'écran animés sont des animations, des motifs ou des images similaires avec des fonctionnalités de saisie limitées qui s'affichent en tant que fond d'écran, derrière d'autres applications. Le matériel est considéré comme capable d'exécuter de manière fiable des fonds d'écran animés s'il peut exécuter tous les fonds d'écran animés, sans aucune limitation de fonctionnalité, à une fréquence d'images raisonnable et sans effet négatif sur d'autres applications. Si des limites matérielles provoquent le plantage et/ou le dysfonctionnement des fonds d'écran et/ou des applications, ou qu'elles consomment une puissance de processeur ou de batterie excessive, ou qu'elles s'exécutent à des fréquences d'images inacceptablement faibles, le matériel est considéré comme incapable d'exécuter un fond d'écran animé. Par exemple, certains fonds d'écran animés peuvent utiliser un contexte OpenGL 2.0 ou 3.x pour afficher leur contenu.
Le fond d'écran animé ne s'exécute pas de manière fiable sur du matériel qui n'est pas compatible avec plusieurs contextes OpenGL, car l'utilisation d'un contexte OpenGL par le fond d'écran animé peut entrer en conflit avec d'autres applications qui utilisent également un contexte OpenGL. Les implémentations d'appareils capables d'exécuter des fonds d'écran animés de manière fiable, comme décrit ci-dessus, DOIVENT implémenter des fonds d'écran animés et, lorsqu'elles sont implémentées, DOIVENT signaler l'indicateur de fonctionnalité de la plate-forme android.software.live_wallpaper. Étant donné que la touche de navigation de la fonction "Récents" est FACULTATIVE, les exigences d'implémentation de l'écran d'aperçu sont FACULTATIVES pour les appareils Android TV et les appareils Android Watch. Le code source Android en amont inclut l'écran d'aperçu [Resources, 37], une interface utilisateur au niveau du système permettant de changer de tâche et d'afficher les activités et tâches récemment consultées à l'aide d'une image miniature de l'état graphique de l'application au moment où l'utilisateur a quitté l'application pour la dernière fois. Les implémentations d'appareils incluant la touche de navigation de la fonction "Récents", comme indiqué dans la section 7.2.3, PEUVENT modifier l'interface, mais DOIVENT respecter les exigences suivantes: Il est vivement recommandé d'utiliser l'interface utilisateur Android en amont (ou une interface basée sur des miniatures similaire) pour l'écran d'aperçu des implémentations d'appareils. Android est compatible avec la gestion des entrées et les éditeurs de méthodes d'entrée tiers [Ressources, 39]. Les implémentations d'appareils qui permettent aux utilisateurs d'utiliser des méthodes de saisie tierces sur l'appareil DOIVENT déclarer la fonctionnalité de plate-forme android.software.input_methods et prendre en charge les API IME, comme défini dans la documentation du SDK Android. Les implémentations d'appareils qui déclarent la fonctionnalité android.software.input_methods DOIVENT fournir un mécanisme accessible à l'utilisateur pour ajouter et configurer des méthodes de saisie tierces. Les implémentations d'appareils DOIVENT afficher l'interface des paramètres en réponse à l'intent android.settings.INPUT_METHOD_SETTINGS. L'API Client de télécommande est obsolète à partir d'Android 5.0 au profit du modèle de notification multimédia, qui permet aux applications multimédias de s'intégrer aux commandes de lecture affichées sur l'écran de verrouillage [Ressources, 40] en tant que notifications de l'écran de verrouillage. Les implémentations d'appareils DOIVENT afficher correctement le modèle de notification multimédia dans les notifications de l'écran de verrouillage décrites dans la section 3.8.3.
Android est compatible avec les écrans de veille interactifs appelés "Dreams" [Resources, 41]. Dreams permet aux utilisateurs d'interagir avec des applications lorsqu'un appareil connecté à une source d'alimentation est inactif ou posé sur un socle. Les appareils Android Watch PEUVENT implémenter Dreams, mais les autres types d'implémentations d'appareils DOIVENT prendre en charge Dreams et fournir une option de paramètres permettant aux utilisateurs de configurer Dreams en réponse à l'intent android.settings.DREAM_SETTINGS. Lorsqu'un appareil dispose d'un capteur matériel (par exemple, un GPS) capable de fournir les coordonnées de localisation, les modes de localisation DOIVENT s'afficher dans le menu "Position" des paramètres [Ressources, 42]. Android est compatible avec les caractères emoji en couleur. Lorsque les implémentations d'appareils Android incluent un IME, les appareils DOIVENT fournir à l'utilisateur une méthode de saisie pour les caractères emoji définis dans Unicode 6.1 [Ressources, 43]. Tous les appareils doivent être capables d'afficher ces caractères emoji sous forme de glyphes en couleur. Android est compatible avec la police Roboto 2 avec différentes épaisseurs (sans-serif-thin, sans-serif-light, sans-serif-medium, sans-serif-black, sans-serif-condensed, sans-serif-condensed-light), qui DOIVENT toutes être incluses pour les langues disponibles sur l'appareil et la couverture complète de l'Unicode 7.0 pour le latin, le grec et le cyrillique, y compris les plages Latin Extended A, B, C et D, ainsi que tous les glyphes du bloc des symboles de devise de l'Unicode 7.0. Android inclut des fonctionnalités qui permettent aux applications axées sur la sécurité d'effectuer des fonctions d'administration d'appareils au niveau du système, telles que l'application de règles de mot de passe ou l'effacement à distance, via l'API Android Device Administration [Resources, 44].
Les implémentations d'appareils DOIVENT fournir une implémentation de la classe DevicePolicyManager [Resources, 45].
Les implémentations d'appareils qui incluent la prise en charge des écrans de verrouillage basés sur un CODE (numérique) ou un MOT DE PASSE (alphanumérique) DOIVENT prendre en charge l'ensemble des stratégies d'administration des appareils définies dans la documentation du SDK Android [Ressources, 44] et signaler la fonctionnalité de plate-forme android.software.device_admin. Si une implémentation d'appareil déclare la fonctionnalité android.software.device_admin, le flux de configuration prêt à l'emploi DOIT permettre d'enregistrer une application de contrôle des règles relatives aux appareils (DPC) en tant qu'application du propriétaire de l'appareil [
Ressources, 46]. Les implémentations d'appareils PEUVENT comporter une application préinstallée qui effectue des fonctions d'administration de l'appareil, mais cette application NE DOIT PAS être définie comme l'application du propriétaire de l'appareil sans le consentement explicite ou l'action de l'utilisateur ou de l'administrateur de l'appareil. L'expérience utilisateur du processus de provisionnement du propriétaire de l'appareil (flux lancé par android.app.action.PROVISION_MANAGED_DEVICE [
Ressources, 47]) DOIT être conforme à l'implémentation AOSP. Si l'implémentation de l'appareil signale android.hardware.nfc, le NFC doit être activé, même lors du flux de configuration prêt à l'emploi, afin de permettre le provisionnement NFC des propriétaires d'appareils [Resources, 48].
Si une implémentation d'appareil déclare android.software.managed_users, il DOIT être possible d'inscrire une application de contrôle des règles relatives aux appareils (DPC) en tant que propriétaire d'un nouveau profil géré. [
Ressources, 49] L'expérience utilisateur du processus de provisionnement de profil géré (flux lancé par android.app.action.PROVISION_MANAGED_PROFILE [
Ressources, 50]) DOIT être conforme à l'implémentation AOSP.
Les appareils compatibles avec les profils gérés sont les suivants: Les appareils compatibles avec les profils gérés DOIVENT: Android fournit une couche d'accessibilité qui aide les utilisateurs ayant un handicap à naviguer plus facilement sur leurs appareils. De plus, Android fournit des API de plate-forme qui permettent aux implémentations de services d'accessibilité de recevoir des rappels pour les événements utilisateur et système, et de générer d'autres mécanismes de rétroaction, tels que la synthèse vocale, le retour haptique et la navigation avec le pavé tactile/le pavé directionnel [Ressources, 51]. Les implémentations d'appareils doivent respecter les exigences suivantes: En outre, les implémentations d'appareil DOIVENT fournir une implémentation d'un service d'accessibilité sur l'appareil et DOIVENT fournir un mécanisme permettant aux utilisateurs d'activer le service d'accessibilité lors de la configuration de l'appareil. Une implémentation Open Source d'un service d'accessibilité est disponible dans le projet Eyes Free [Ressources, 53]. Android inclut des API qui permettent aux applications d'utiliser les services de synthèse vocale (TTS) et aux fournisseurs de services de fournir des implémentations de services de synthèse vocale [Ressources, 54]. Les implémentations d'appareils signalant la fonctionnalité android.hardware.audio.output DOIVENT respecter ces exigences liées au framework TTS Android. Implémentations Android Automotive: Toutes les autres implémentations d'appareils: Le framework d'entrée Android TV (TIF) simplifie la diffusion de contenu en direct sur les appareils Android TV. TIF fournit une API standard pour créer des modules d'entrée qui contrôlent les appareils Android TV. Les implémentations d'appareils Android TV DOIVENT prendre en charge le TV Input Framework [Ressources, 55]. Les implémentations d'appareils compatibles avec le TIF DOIVENT déclarer la fonctionnalité de plate-forme android.software.live_tv. Toute implémentation d'appareil qui déclare la prise en charge de la télévision en direct DOIT disposer d'une application TV installée (application TV). Le projet Android Open Source fournit une implémentation de l'application TV. L'application TV DOIT fournir des fonctionnalités permettant d'installer et d'utiliser des chaînes de télévision [Ressources, 56] et doit respecter les exigences suivantes: Les implémentations d'appareils Android TV DOIVENT afficher une superposition informative et interactive, qui DOIT inclure un guide électronique des programmes (EPG) généré à partir des valeurs des champs TvContract.Programs [Resources, 59].
L'EPG doit répondre aux exigences suivantes: Les dispositifs d'entrée de l'appareil Android TV (télécommande, application de télécommande ou manette de jeu) DOIVENT permettre de naviguer vers toutes les sections de l'écran pouvant être actionnées via le pavé directionnel. Le pavé directionnel vers le haut et vers le bas DOIT être utilisé pour changer de chaîne de télévision en direct lorsqu'aucune section ne peut être actionnée à l'écran. L'application TV DOIT transmettre les événements clés aux entrées HDMI via le CEC. Les implémentations d'appareils Android TV DOIVENT prendre en charge l'association d'applications d'entrée TV, ce qui permet à toutes les entrées de fournir des liens d'activité entre l'activité en cours et une autre activité (par exemple, un lien entre une programmation en direct et un contenu associé) [Ressources, 60].
L'application TV doit afficher l'association de l'application d'entrée TV lorsqu'elle est fournie. Les implémentations d'appareils DOIVENT installer et exécuter les fichiers ".apk" Android tels que générés par l'outil "aapt" inclus dans le SDK Android officiel [Ressources, 61]. Les implémentations d'appareils NE DOIVENT PAS étendre les formats de fichier .apk [Ressources, 62], Android Manifest [Ressources, 49], bytecode Dalvik [Ressources, 23] ou bytecode RenderScript de manière à empêcher l'installation et l'exécution correctes de ces fichiers sur d'autres appareils compatibles. Les implémentations d'appareils DOIVENT prendre en charge les principaux formats multimédias spécifiés dans la documentation du SDK Android [Ressources, 64], sauf dans les cas explicitement autorisés dans ce document. Plus précisément, les implémentations d'appareils DOIVENT prendre en charge les formats multimédias, les encodeurs, les décodeurs, les types de fichiers et les formats de conteneur définis dans les tableaux ci-dessous et signalés via MediaCodecList [Resources, 65].
Les implémentations d'appareils DOIVENT également être en mesure de décoder tous les profils signalés dans CamcorderProfile [Ressources, 66] et DOIVENT être en mesure de décoder tous les formats qu'ils peuvent encoder.
Tous ces codecs sont fournis en tant qu'implémentations logicielles dans l'implémentation Android préférée du Projet Android Open Source. Veuillez noter que ni Google ni l'Open Handset Alliance ne font aucune déclaration selon laquelle ces codecs sont exempts de brevets tiers. Les personnes qui souhaitent utiliser ce code source dans des produits matériels ou logiciels sont informées que les implémentations de ce code, y compris dans des logiciels Open Source ou des sharewares, peuvent nécessiter des licences de brevets de la part des titulaires de brevets concernés. 1 Obligatoire pour les implémentations d'appareils qui définissent android.hardware.microphone, mais facultatif pour les implémentations d'appareils Android Watch. 2 Seul le downmix du contenu 5.0/5.1 est obligatoire. L'enregistrement ou le rendu de plus de deux canaux est facultatif. 3 Obligatoire pour les implémentations d'appareils Android portables. 4 Obligatoire pour les implémentations d'appareils qui définissent android.hardware.microphone, y compris les implémentations d'appareils Android Watch. 1 Obligatoire pour les implémentations d'appareils qui incluent du matériel d'appareil photo et définissent android.hardware.camera ou android.hardware.camera.front. 2 Obligatoire pour les implémentations d'appareils, à l'exception des appareils Android Watch. 3 Pour une qualité acceptable des services de streaming vidéo Web et de visioconférence, les implémentations d'appareils DOIVENT utiliser un codec VP8 matériel conforme aux exigences de [Ressources, 68]. 4 Les implémentations d'appareils DOIVENT prendre en charge l'écriture de fichiers Matroska WebM. 5 VITEMENT RECOMMANDÉ pour Android Auto, facultatif pour Android Watch et obligatoire pour tous les autres types d'appareils. 6 Ne s'applique qu'aux implémentations d'appareils Android TV. Les codecs vidéo sont facultatifs pour les implémentations d'appareils Android Watch. Les implémentations d'appareils Android avec des encodeurs H.263 DOIVENT être compatibles avec le niveau de profil de référence 45. Les implémentations d'appareils Android compatibles avec le codec H.264 DOIVENT prendre en charge le niveau 3 du profil de référence et les profils d'encodage vidéo SD (Standard Definition) suivants. Elles DOIVENT également prendre en charge le niveau 4 du profil principal et les profils d'encodage vidéo HD (High Definition) suivants. Il est vivement recommandé d'encoder des vidéos HD 1080p à 30 FPS sur les appareils Android TV. 1 Si le matériel est compatible, mais FORTEMENT RECOMMANDÉ pour les appareils Android TV. Les implémentations d'appareils Android compatibles avec le codec VP8 DOIVENT prendre en charge les profils d'encodage vidéo SD et DOIVENT prendre en charge les profils d'encodage vidéo HD (haute définition) suivants. 1 Si le matériel est compatible. Les codecs vidéo sont facultatifs pour les implémentations d'appareils Android Watch. Les implémentations d'appareils DOIVENT prendre en charge la résolution vidéo dynamique et le changement de fréquence d'images via les API Android standards dans le même flux pour tous les codecs VP8, VP9, H.264 et H.265 en temps réel et jusqu'à la résolution maximale prise en charge par chaque codec sur l'appareil. Les implémentations d'appareils Android avec des décodeurs H.263 DOIVENT être compatibles avec le niveau de profil de référence 30. Les implémentations d'appareils Android avec des décodeurs MPEG-4 DOIVENT prendre en charge le profil simple de niveau 3. Les implémentations d'appareils Android avec des décodeurs H.264 DOIVENT être compatibles avec le profil principal de niveau 3.1 et les profils de décodage vidéo SD suivants, et DEVRAIENT être compatibles avec les profils de décodage HD. Les appareils Android TV DOIVENT être compatibles avec le profil High Profile de niveau 4.2 et le profil de décodage HD 1080p. 1 OBLIGATOIRE lorsque la hauteur indiquée par la méthode Display.getSupportedModes() est égale ou supérieure à la résolution vidéo. 2 OBLIGATOIRE pour les implémentations d'appareils Android TV. Les implémentations d'appareils Android compatibles avec le codec VP8, comme décrit dans la section 5.1.3, DOIVENT prendre en charge les profils de décodage SD suivants et DOIVENT prendre en charge les profils de décodage HD. Les appareils Android TV DOIVENT être compatibles avec le profil de décodage HD 1080p. 1 OBLIGATOIRE lorsque la hauteur indiquée par la méthode Display.getSupportedModes() est égale ou supérieure à la résolution vidéo. 2 OBLIGATOIRE pour les implémentations d'appareils Android TV. Les implémentations d'appareils Android, lorsqu'elles prennent en charge le codec VP9 comme décrit dans la section 5.1.3, DOIVENT prendre en charge les profils de décodage vidéo SD suivants et DOIVENT prendre en charge les profils de décodage HD. Il est vivement recommandé que les appareils Android TV soient compatibles avec le profil de décodage HD 1080p et DOIVENT être compatibles avec le profil de décodage UHD. Lorsque le profil de décodage vidéo UHD est pris en charge, il DOIT prendre en charge la profondeur de couleur 8 bits et DEVRAIT prendre en charge le profil 2 du VP9 (10 bits). 1 Obligatoire pour les implémentations d'appareils Android TV, mais uniquement pour les autres types d'appareils si le matériel est compatible. 2 FORTEMENT RECOMMANDÉ pour les implémentations d'appareils Android TV existantes lorsqu'elles sont compatibles avec le matériel. Les implémentations d'appareils Android, lorsqu'elles prennent en charge le codec H.265 comme décrit dans la section 5.1.3, DOIVENT prendre en charge le niveau principal du profil principal de niveau 3 et les profils de décodage vidéo SD suivants, et DOIVENT prendre en charge les profils de décodage HD.
Il est vivement recommandé que les appareils Android TV soient compatibles avec le profil de décodage UHD et le profil de décodage HD 1080p. Si le profil de décodage HD 1080p est pris en charge, il DOIT prendre en charge le niveau 4.1 du profil principal. Si le décodage UHD est pris en charge, il DOIT prendre en charge le profil de niveau principal 5 Main10. 1 Obligatoire pour les implémentations d'appareils Android TV, mais uniquement pour les autres types d'appareils si le matériel est compatible. 2 FORTEMENT RECOMMANDÉ pour les implémentations d'appareils Android TV existantes lorsqu'elles sont compatibles avec le matériel. Bien que certaines des exigences décrites dans cette section soient indiquées comme "DEVOIR" depuis Android 4.3, la définition de la compatibilité pour une future version prévoit de les remplacer par "DEVOIR". Il est FORTEMENT RECOMMANDÉ que les appareils Android existants et nouveaux respectent ces exigences, qui sont indiquées comme "DOIT". Sinon, ils ne pourront pas être compatibles avec Android lors de la mise à niveau vers la future version. Les implémentations d'appareils qui déclarent android.hardware.microphone DOIVENT permettre la capture de contenu audio brut avec les caractéristiques suivantes: La capture pour les taux d'échantillonnage ci-dessus DOIT être effectuée sans suréchantillonnage, et tout sous-échantillonnage DOIT inclure un filtre anticrénelage approprié. Les implémentations d'appareils qui déclarent android.hardware.microphone DOIVENT permettre la capture de contenu audio brut avec les caractéristiques suivantes: Si la capture pour les taux d'échantillonnage ci-dessus est prise en charge, la capture DOIT être effectuée sans mise à l'échelle à un format supérieur à 16 000:22 050 ou 44 100:48 000.
Tout suréchantillonnage ou sous-échantillonnage DOIT inclure un filtre anticrénelage approprié. En plus des spécifications d'enregistrement ci-dessus, lorsqu'une application a commencé à enregistrer un flux audio à l'aide de la source audio android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION: Si la plate-forme est compatible avec les technologies de suppression du bruit optimisées pour la reconnaissance vocale, l'effet DOIT être contrôlable à partir de l'API android.media.audiofx.NoiseSuppressor. De plus, le champ UUID du descripteur d'effet du suppresseur de bruit DOIT identifier de manière unique chaque implémentation de la technologie de suppression du bruit. La classe android.media.MediaRecorder.AudioSource inclut la source audio REMOTE_SUBMIX. Les appareils qui déclarent android.hardware.audio.output DOIVENT implémenter correctement la source audio REMOTE_SUBMIX afin que, lorsqu'une application utilise l'API android.media.AudioRecord pour enregistrer à partir de cette source audio, elle puisse capturer un mix de tous les flux audio, à l'exception des suivants: Les implémentations d'appareils qui déclarent android.hardware.audio.output DOIVENT respecter les exigences de cette section. L'appareil DOIT permettre la lecture de contenu audio brut avec les caractéristiques suivantes: L'appareil DOIT permettre la lecture de contenu audio brut avec les caractéristiques suivantes: Android fournit une API pour les effets audio pour les implémentations d'appareils [Ressources, 69]. Implémentations d'appareils qui déclarent la fonctionnalité android.hardware.audio.output: Les implémentations d'appareils Android TV DOIVENT prendre en charge le volume principal du système et l'atténuation du volume de sortie audio numérique sur les sorties compatibles, à l'exception de la sortie de passthrough audio compressé (où aucun décodage audio n'est effectué sur l'appareil). La latence audio correspond au délai de transmission d'un signal audio dans un système.
De nombreuses classes d'applications s'appuient sur des latences courtes pour obtenir des effets sonores en temps réel. Aux fins de cette section, utilisez les définitions suivantes: Il est vivement recommandé que les implémentations d'appareils qui déclarent android.hardware.audio.output répondent ou dépassent ces exigences de sortie audio: Si une implémentation d'appareil répond aux exigences de cette section après tout calibrage initial lors de l'utilisation de l'API de file d'attente de tampon PCM OpenSL ES, pour la latence de sortie continue et la latence de sortie à froid sur au moins un appareil de sortie audio compatible, il est FORTEMENT RECOMMANDÉ de signaler la prise en charge de l'audio à faible latence en signalant la fonctionnalité android.hardware.audio.low_latency via la classe android.content.pm.PackageManager [Resources, 70]. À l'inverse, si l'implémentation de l'appareil ne répond pas à ces exigences, elle NE DOIT PAS indiquer la prise en charge de l'audio à faible latence. Il est vivement recommandé que les implémentations d'appareils incluant android.hardware.microphone répondent à ces exigences audio d'entrée: Les appareils DOIVENT prendre en charge les protocoles de réseau multimédia pour la lecture audio et vidéo, comme indiqué dans la documentation du SDK Android [Ressources, 64]. Plus précisément, les appareils DOIVENT être compatibles avec les protocoles réseau multimédias suivants: Les implémentations d'appareils compatibles avec la sortie vidéo sécurisée et capables de prendre en charge les surfaces sécurisées DOIVENT déclarer la prise en charge de Display.FLAG_SECURE. Les implémentations d'appareils qui déclarent la prise en charge de Display.FLAG_SECURE, si elles sont compatibles avec un protocole d'affichage sans fil, DOIVENT sécuriser la liaison avec un mécanisme cryptographique puissant tel que HDCP 2.x ou version ultérieure pour les écrans sans fil Miracast. De même, si elles sont compatibles avec un écran externe filaire, les implémentations de l'appareil DOIVENT être compatibles avec HDCP 1.2 ou version ultérieure. Les implémentations d'appareils Android TV DOIVENT être compatibles avec HDCP 2.2 pour les appareils compatibles avec la résolution 4K et HDCP 1.4 ou version ultérieure pour les résolutions inférieures. L'implémentation Open Source d'Android en amont prend en charge les écrans sans fil (Miracast) et filaires (HDMI) qui répondent à cette exigence.
Si une implémentation d'appareil est compatible avec le transport logiciel MIDI inter-application (appareils MIDI virtuels) et qu'elle est compatible avec le MIDI sur tous les transports matériels compatibles avec le MIDI suivants pour lesquels elle fournit une connectivité générique non MIDI, il est FORTEMENT RECOMMANDÉ de signaler la prise en charge de la fonctionnalité android.software.midi via la classe android.content.pm.PackageManager [Resources, 70].
Les transports matériels compatibles avec le MIDI sont les suivants:
À l'inverse, si l'implémentation de l'appareil fournit une connectivité générique autre que MIDI via un transport matériel compatible avec MIDI listé ci-dessus, mais qu'elle n'est pas compatible avec MIDI via ce transport matériel, elle NE DOIT PAS signaler la prise en charge de la fonctionnalité android.software.midi.
Le MIDI via Bluetooth LE agissant en tant que rôle central (section 7.4.3 Bluetooth) est en phase d'essai. Une implémentation d'appareil qui signale la fonctionnalité android.software.midi et qui fournit une connectivité générique autre que MIDI via Bluetooth LE DOIT prendre en charge le MIDI via Bluetooth LE.
Si une implémentation d'appareil répond à toutes les exigences suivantes, il est FORTEMENT RECOMMANDÉ de signaler la prise en charge de la fonctionnalité android.hardware.audio.pro via la classe android.content.pm.PackageManager [Resources, 70].
Les implémentations d'appareils DOIVENT prendre en charge les outils de développement Android fournis dans le SDK Android. Les appareils Android compatibles DOIVENT être compatibles avec: Les implémentations d'appareils DOIVENT prendre en charge toutes les fonctions adb, comme indiqué dans le SDK Android, y compris dumpsys [Resources, 73]. Le daemon adb côté appareil DOIT être inactif par défaut, et un mécanisme accessible à l'utilisateur DOIT être disponible pour activer Android Debug Bridge. Si une implémentation d'appareil omet le mode périphérique USB, elle DOIT implémenter le pont de débogage Android via un réseau local (tel qu'Ethernet ou 802.11). Android est compatible avec adb sécurisé. adb sécurisé active adb sur les hôtes authentifiés connus. Les implémentations d'appareils DOIVENT être compatibles avec adb sécurisé. Les implémentations d'appareils DOIVENT prendre en charge toutes les fonctionnalités ddms, comme indiqué dans le SDK Android. Comme ddms utilise adb, la prise en charge de ddms DOIT être inactive par défaut, mais DOIT être prise en charge chaque fois que l'utilisateur a activé Android Debug Bridge, comme indiqué ci-dessus. Les implémentations d'appareils DOIVENT inclure le framework Monkey et le rendre disponible pour les applications. Les implémentations d'appareils DOIVENT prendre en charge l'outil Systrace, comme indiqué dans le SDK Android. Systrace doit être inactif par défaut, et un mécanisme accessible par l'utilisateur doit être disponible pour l'activer. La plupart des systèmes Linux et des systèmes Apple Macintosh reconnaissent les appareils Android à l'aide des outils du SDK Android standard, sans assistance supplémentaire. Toutefois, les systèmes Microsoft Windows nécessitent généralement un pilote pour les nouveaux appareils Android.
(Par exemple, les nouveaux ID de fournisseur et parfois les nouveaux ID d'appareil nécessitent des pilotes USB personnalisés pour les systèmes Windows.) Si une implémentation d'appareil n'est pas reconnue par l'outil adb fourni dans le SDK Android standard, les implémentateurs d'appareils DOIVENT fournir des pilotes Windows permettant aux développeurs de se connecter à l'appareil à l'aide du protocole adb. Ces pilotes DOIVENT être fournis pour Windows XP, Windows Vista, Windows 7, Windows 8 et Windows 10, en versions 32 bits et 64 bits.
Android permet aux développeurs de configurer les paramètres liés au développement d'applications. Les implémentations d'appareil DOIVENT respecter l'intent android.settings.APPLICATION_DEVELOPMENT_SETTINGS pour afficher les paramètres liés au développement d'applications [Ressources, 77]. L'implémentation Android en amont masque le menu "Options pour les développeurs" par défaut et permet aux utilisateurs de lancer les options pour les développeurs après avoir appuyé sept fois sur l'élément de menu Settings > About Device > Build Number (Paramètres > À propos de l'appareil > Numéro de version). Les implémentations d'appareils DOIVENT offrir une expérience cohérente pour les options pour les développeurs. Plus précisément, les implémentations d'appareils DOIVENT masquer les options pour les développeurs par défaut et DOIVENT fournir un mécanisme permettant d'activer les options pour les développeurs qui est cohérent avec l'implémentation Android en amont. Si un appareil inclut un composant matériel particulier associé à une API pour les développeurs tiers, l'implémentation de l'appareil DOIT implémenter cette API comme décrit dans la documentation du SDK Android. Si une API du SDK interagit avec un composant matériel déclaré comme facultatif et que l'implémentation de l'appareil ne possède pas ce composant: L'API de téléphonie est un exemple typique de scénario où ces exigences s'appliquent: même sur les appareils autres que des téléphones, ces API doivent être implémentées comme des opérations sans opération raisonnables. Les implémentations d'appareils DOIVENT signaler de manière cohérente des informations de configuration matérielle précises via les méthodes getSystemAvailableFeatures() et hasSystemFeature(String) de la classe android.content.pm.PackageManager pour la même empreinte de compilation. [Resources, 70] Android inclut des fonctionnalités qui ajustent automatiquement les éléments d'application et les mises en page de l'interface utilisateur en fonction de l'appareil, afin de s'assurer que les applications tierces fonctionnent correctement sur différentes configurations matérielles [Resources, 78]. Les appareils DOIVENT implémenter correctement ces API et ces comportements, comme indiqué dans cette section. Les unités référencées par les exigences de cette section sont définies comme suit: Les appareils Android Watch (décrits dans la section 2) peuvent avoir des tailles d'écran plus petites, comme décrit dans cette section. Le framework d'UI Android est compatible avec différentes tailles d'écran et permet aux applications de interroger la taille de l'écran de l'appareil (également appelée "mise en page de l'écran") via android.content.res.Configuration.screenLayout avec SCREENLAYOUT_SIZE_MASK.
Les implémentations d'appareils DOIVENT indiquer la taille d'écran correcte, telle que définie dans la documentation du SDK Android [Resources, 78] et déterminée par la plate-forme Android en amont. Plus précisément, les implémentations d'appareils DOIVENT indiquer la taille d'écran correcte en fonction des dimensions d'écran logiques en pixels indépendants de la densité (dp) suivantes. De plus, Les appareils NE DOIVENT PAS modifier la taille d'écran indiquée à tout moment. Les applications peuvent indiquer les tailles d'écran qu'elles acceptent via l'attribut Les appareils Android Watch peuvent avoir un format de 1,0 (1:1). Le format de l'écran DOIT être compris entre 1,3333 (4:3) et 1,86 (environ 16:9), mais les appareils Android Watch PEUVENT avoir un format de 1,0 (1:1), car une telle implémentation d'appareil utilisera UI_MODE_TYPE_WATCH comme android.content.res.Configuration.uiMode. Le framework d'UI Android définit un ensemble de densités logiques standards pour aider les développeurs d'applications à cibler les ressources d'application. Les implémentations d'appareils DOIVENT n'indiquer qu'une seule des densités logiques du framework Android suivantes via les API android.util.DisplayMetrics, et DOIVENT exécuter les applications à cette densité standard et NE DOIVENT PAS modifier la valeur à tout moment pour l'affichage par défaut. Les implémentations d'appareils DOIVENT définir la densité de framework Android standard la plus proche numériquement de la densité physique de l'écran, sauf si cette densité logique fait passer la taille d'écran indiquée en dessous de la taille minimale prise en charge. Si la densité du framework Android standard la plus proche numériquement de la densité physique donne une taille d'écran inférieure à la plus petite taille d'écran compatible prise en charge (320 dp de largeur), les implémentations d'appareil DOIVENT indiquer la densité du framework Android standard la plus basse. Les implémentations d'appareils DOIVENT indiquer les valeurs correctes pour toutes les métriques d'affichage définies dans android.util.DisplayMetrics [Resources, 79] et DOIVENT indiquer les mêmes valeurs, que l'écran intégré ou externe soit utilisé comme écran par défaut. Les appareils DOIVENT indiquer les orientations d'écran qu'ils prennent en charge (android.hardware.screen.portrait et/ou android.hardware.screen.landscape) et DOIVENT indiquer au moins une orientation compatible. Par exemple, un appareil doté d'un écran en mode paysage à orientation fixe, comme un téléviseur ou un ordinateur portable, DOIT uniquement signaler android.hardware.screen.landscape. Les appareils qui signalent les deux orientations d'écran DOIVENT être compatibles avec l'orientation dynamique des applications en mode portrait ou paysage. Autrement dit, l'appareil doit respecter la demande de l'application pour une orientation d'écran spécifique. Les implémentations d'appareils PEUVENT sélectionner l'orientation portrait ou paysage par défaut. Les appareils DOIVENT indiquer la valeur correcte pour l'orientation actuelle de l'appareil, chaque fois qu'ils sont interrogés via android.content.res.Configuration.orientation, android.view.Display.getOrientation() ou d'autres API. Les appareils NE DOIVENT PAS modifier la taille ou la densité d'écran signalée lors du changement d'orientation. Les implémentations d'appareils DOIVENT être compatibles avec OpenGL ES 1.0 et 2.0, comme indiqué et détaillé dans la documentation du SDK Android. Les implémentations d'appareils DOIVENT être compatibles avec OpenGL ES 3.0 ou 3.1 sur les appareils compatibles. Les implémentations d'appareils DOIVENT également prendre en charge Android RenderScript, comme indiqué dans la documentation du SDK Android [Ressources, 80]. Les implémentations d'appareils DOIVENT également s'identifier correctement comme étant compatibles avec OpenGL ES 1.0, OpenGL ES 2.0, OpenGL ES 3.0 ou OpenGL 3.1. Par exemple : En plus d'OpenGL ES 3.1, Android fournit un pack d'extension avec des interfaces Java [Ressources, 81] et une prise en charge native des fonctionnalités graphiques avancées telles que la tessellation et le format de compression de texture ASTC. Les implémentations d'appareils Android PEUVENT prendre en charge ce pack d'extension et DOIVENT identifier la prise en charge via l'indicateur de fonctionnalité android.hardware.opengles.aep uniquement si elles sont entièrement implémentées. De plus, les implémentations d'appareils PEUVENT implémenter toutes les extensions OpenGL ES souhaitées.
Toutefois, les implémentations d'appareils DOIVENT signaler via les API natives et gérées OpenGL ES toutes les chaînes d'extension qu'elles prennent en charge, et inversement NE DOIVENT PAS signaler les chaînes d'extension qu'elles ne prennent pas en charge. Notez qu'Android permet aux applications de spécifier facultativement qu'elles nécessitent des formats de compression de texture OpenGL spécifiques. Ces formats sont généralement propres au fournisseur. Android n'exige pas d'implémenter de format de compression de texture spécifique pour les implémentations d'appareils. Toutefois, ils DOIVENT signaler avec précision tous les formats de compression de texture qu'ils acceptent, via la méthode getString() de l'API OpenGL. Android inclut un mécanisme permettant aux applications de déclarer qu'elles souhaitent activer l'accélération matérielle pour les graphiques 2D au niveau de l'application, de l'activité, de la fenêtre ou de la vue à l'aide d'une balise de fichier manifeste android:hardwareAccelerated ou d'appels d'API directs [Resources, 82]. Les implémentations d'appareils DOIVENT activer l'accélération matérielle par défaut et DOIVENT désactiver l'accélération matérielle si le développeur le demande en définissant android:hardwareAccelerated="false" ou en désactivant l'accélération matérielle directement via les API View Android. De plus, les implémentations d'appareils DOIVENT présenter un comportement conforme à la documentation du SDK Android sur l'accélération matérielle [Ressources, 82]. Android inclut un objet TextureView qui permet aux développeurs d'intégrer directement des textures OpenGL ES accélérées par matériel en tant que cibles de rendu dans une hiérarchie d'UI.
Les implémentations d'appareils DOIVENT être compatibles avec l'API TextureView et DOIVENT présenter un comportement cohérent avec l'implémentation Android en amont. Android est compatible avec EGL_ANDROID_RECORDABLE, un attribut EGLConfig qui indique si EGLConfig est compatible avec le rendu dans un ANativeWindow qui enregistre des images dans une vidéo. Les implémentations d'appareils DOIVENT prendre en charge l'extension EGL_ANDROID_RECORDABLE [Ressources, 83]. Android spécifie un "mode de compatibilité" dans lequel le framework fonctionne en mode équivalent à la taille d'écran "normale" (largeur de 320 dp) pour le bénéfice des anciennes applications qui n'ont pas été développées pour les anciennes versions d'Android antérieures à l'indépendance de la taille d'écran. La plate-forme Android inclut des API qui permettent aux applications d'afficher des graphiques riches. Les appareils DOIVENT prendre en charge toutes ces API telles que définies par le SDK Android, sauf si cela est spécifiquement autorisé dans ce document. Android est compatible avec l'écran secondaire pour activer les fonctionnalités de partage multimédia et les API pour les développeurs permettant d'accéder aux écrans externes. Si un appareil est compatible avec un écran externe via une connexion filaire, sans fil ou intégrée, l'implémentation de l'appareil DOIT implémenter l'API du gestionnaire d'affichage, comme décrit dans la documentation du SDK Android [Ressources, 84]. Les appareils DOIVENT être compatibles avec un écran tactile ou répondre aux exigences de la section 7.2.2 pour la navigation non tactile. Les implémentations d'Android Watch et d'Android Automotive peuvent implémenter un clavier virtuel. Toutes les autres implémentations d'appareils DOIVENT implémenter un clavier virtuel et: Implémentations de l'appareil: Les appareils Android TV DOIVENT être compatibles avec la croix directionnelle. Implémentations de l'appareil: Les exigences de disponibilité et de visibilité des fonctions Accueil, Récents et Retour varient selon les types d'appareils, comme décrit dans cette section. Les fonctions Accueil, Récents et Retour (mappées respectivement sur les événements de touche KEYCODE_HOME, KEYCODE_APP_SWITCH et KEYCODE_BACK) sont essentielles au paradigme de navigation Android. Par conséquent: Ces fonctions PEUVENT être implémentées via des boutons physiques dédiés (tels que des boutons tactiles mécaniques ou capacitifs) ou à l'aide de touches logicielles dédiées sur une partie distincte de l'écran, des gestes, d'un écran tactile, etc. Android accepte les deux implémentations. Toutes ces fonctions DOIVENT être accessibles par une seule action (par exemple, appuyer, double-cliquer ou effectuer un geste) lorsqu'elles sont visibles. La fonction "Récents", le cas échéant, DOIT comporter un bouton ou une icône visible, sauf si elle est masquée avec d'autres fonctions de navigation en mode plein écran. Cela ne s'applique pas aux appareils qui passent d'anciennes versions d'Android et qui disposent de boutons physiques pour la navigation et pas de touche "Récents". Les fonctions "Accueil" et "Retour", le cas échéant, DOIVENT chacune comporter un bouton ou une icône visible, sauf si elles sont masquées avec d'autres fonctions de navigation en mode plein écran ou lorsque l'attribut uiMode UI_MODE_TYPE_MASK est défini sur UI_MODE_TYPE_WATCH. La fonction Menu est obsolète depuis Android 4.0 et a été remplacée par la barre d'action.
Par conséquent, les nouvelles implémentations d'appareils livrées avec Android 6.0 ou version ultérieure NE DOIVENT PAS implémenter de bouton physique dédié pour la fonction Menu. Les implémentations d'appareils plus anciennes NE DOIVENT PAS implémenter de bouton physique dédié pour la fonction Menu. Toutefois, si le bouton Menu physique est implémenté et que l'appareil exécute des applications avec targetSdkVersion > 10, l'implémentation de l'appareil: Pour assurer la rétrocompatibilité, les implémentations d'appareils DOIVENT mettre la fonction Menu à la disposition des applications lorsque la version targetSdkVersion est inférieure à 10, soit par un bouton physique, une touche logicielle ou des gestes. Cette fonction de menu doit être présentée, sauf si elle est masquée avec d'autres fonctions de navigation. Les implémentations d'appareils Android compatibles avec l'action d'assistance [Ressources, 30] DOIVENT la rendre accessible avec une seule action (par exemple, appuyer, double-cliquer ou effectuer un geste) lorsque d'autres touches de navigation sont visibles. Il est FORTEMENT RECOMMANDÉ d'utiliser l'appui prolongé sur le bouton d'accueil ou la touche logicielle comme action unique. Les implémentations d'appareils PEUVENT utiliser une partie distincte de l'écran pour afficher les touches de navigation. Si tel est le cas, elles DOIVENT respecter les exigences suivantes: Les appareils Android portables et les montres doivent impérativement être compatibles avec la saisie tactile. Les implémentations d'appareils DOIVENT comporter un système d'entrée de pointeur (similaire à une souris ou à un écran tactile). Toutefois, si une implémentation d'appareil n'est pas compatible avec un système de saisie par pointeur, elle NE DOIT PAS signaler la constante de fonctionnalité android.hardware.touchscreen ou android.hardware.faketouch. Implémentations d'appareils qui incluent un système de saisie par pointeur: Android est compatible avec différents écrans tactiles, pavés tactiles et faux périphériques d'entrée tactile. Les implémentations d'appareils à écran tactile sont associées à un écran [Resources, 86] de sorte que l'utilisateur a l'impression de manipuler directement les éléments à l'écran. Étant donné que l'utilisateur touche directement l'écran, le système n'a pas besoin d'affordances supplémentaires pour indiquer les objets manipulés.
À l'inverse, une interface tactile simulée fournit un système de saisie utilisateur qui s'approche d'un sous-ensemble des fonctionnalités d'un écran tactile. Par exemple, une souris ou une télécommande qui dirige un curseur à l'écran s'approche de la saisie tactile, mais nécessite que l'utilisateur pointe ou mette en surbrillance l'élément, puis clique dessus. De nombreux périphériques d'entrée tels que la souris, le pavé tactile, la souris sans fil à gyroscope, le pointeur à gyroscope, le joystick et le pavé tactile multipoint peuvent prendre en charge les interactions tactiles simulées. Android inclut la constante de fonctionnalité android.hardware.faketouch, qui correspond à un périphérique d'entrée non tactile (basé sur un pointeur) haute fidélité, tel qu'une souris ou un pavé tactile, qui peut émuler correctement la saisie tactile (y compris la prise en charge des gestes de base) et indique que l'appareil est compatible avec un sous-ensemble émulé des fonctionnalités de l'écran tactile. Les implémentations d'appareils qui déclarent la fonctionnalité de faux appui DOIVENT respecter les exigences de la section 7.2.5. Les implémentations d'appareils DOIVENT signaler la fonctionnalité appropriée correspondant au type d'entrée utilisé. Les implémentations d'appareils qui incluent un écran tactile (à un seul contact ou mieux) DOIVENT signaler la constante de fonctionnalité de plate-forme android.hardware.touchscreen. Les implémentations d'appareils qui signalent la constante de fonctionnalité de plate-forme android.hardware.touchscreen DOIVENT également signaler la constante de fonctionnalité de plate-forme android.hardware.faketouch. Les implémentations d'appareils qui n'incluent pas d'écran tactile (et qui ne reposent que sur un dispositif de pointage) NE DOIVENT PAS signaler de fonctionnalité d'écran tactile et DOIVENT signaler uniquement android.hardware.faketouch s'ils répondent aux exigences de l'écran tactile simulé de la section 7.2.5. Implémentations d'appareils qui déclarent la prise en charge d'android.hardware.faketouch: Les appareils qui déclarent être compatibles avec android.hardware.faketouch.multitouch.distinct DOIVENT respecter les exigences de faketouch ci-dessus et DOIVENT également prendre en charge le suivi distinct de deux ou plusieurs entrées de pointeur indépendantes. Les implémentations d'appareils Android TV DOIVENT prendre en charge les mappages de boutons pour les manettes de jeu, comme indiqué ci-dessous. L'implémentation Android en amont inclut une implémentation pour les contrôleurs de jeu qui répond à cette exigence. Les implémentations d'appareils Android TV DOIVENT prendre en charge les mappages de clés suivants: 1 [Ressources, 88] 2 Les utilisations HID ci-dessus doivent être déclarées dans une autorité de certification de manette de jeu (0x01 0x0005). 3 Cette utilisation doit avoir une valeur minimale logique de 0, une valeur maximale logique de 7, une valeur minimale physique de 0, une valeur maximale physique de 315, des unités en degrés et une taille de rapport de 4. La valeur logique est définie comme étant la rotation dans le sens des aiguilles d'une montre à partir de l'axe vertical. Par exemple, une valeur logique de 0 représente une absence de rotation et la pression sur le bouton "Haut", tandis qu'une valeur logique de 1 représente une rotation de 45 degrés et la pression sur les touches "Haut" et "Gauche". 4 [Resources, 87] 1 [Resources, 87] Les implémentations d'appareils Android TV DOIVENT fournir une télécommande pour permettre aux utilisateurs d'accéder à l'interface TV. La télécommande peut être une télécommande physique ou une télécommande logicielle accessible depuis un téléphone mobile ou une tablette. La télécommande DOIT répondre aux exigences définies ci-dessous. Android inclut des API permettant d'accéder à différents types de capteurs. Les implémentations d'appareils peuvent généralement omettre ces capteurs, comme indiqué dans les sous-sections suivantes. Si un appareil inclut un type de capteur particulier qui dispose d'une API correspondante pour les développeurs tiers, l'implémentation de l'appareil DOIT implémenter cette API comme décrit dans la documentation du SDK Android et la documentation Open Source Android sur les capteurs [Ressources, 89]. Par exemple, les implémentations d'appareils: La liste ci-dessus n'est pas exhaustive. Le comportement documenté du SDK Android et de la documentation Open Source Android sur les capteurs [Ressources, 89] doit être considéré comme faisant autorité. Certains types de capteurs sont composites, ce qui signifie qu'ils peuvent être dérivés des données fournies par un ou plusieurs autres capteurs. (Exemples : capteur d'orientation et capteur d'accélération linéaire.) Les implémentations d'appareils DOIVENT implémenter ces types de capteurs lorsqu'ils incluent les capteurs physiques requis, comme décrit dans [Ressources, 92].
Si une implémentation d'appareil inclut un capteur composite, elle DOIT implémenter le capteur comme décrit dans la documentation Open Source Android sur les capteurs composites [Ressources, 92]. Certains capteurs Android sont compatibles avec un mode de déclenchement "continu", qui renvoie des données en continu [Resources, 93]. Pour toute API indiquée par la documentation du SDK Android comme étant un capteur continu, les implémentations d'appareils DOIVENT fournir en continu des échantillons de données périodiques dont le jitter DOIT être inférieur à 3%, où le jitter est défini comme l'écart type de la différence entre les valeurs de code temporel signalées entre les événements consécutifs. Notez que les implémentations de l'appareil DOIVENT s'assurer que le flux d'événements du capteur NE DOIT PAS empêcher le processeur de l'appareil de passer en état de suspension ou de se réveiller d'un état de suspension. Enfin, lorsque plusieurs capteurs sont activés, la consommation d'énergie NE DOIT PAS dépasser la somme de la consommation d'énergie indiquée par chaque capteur. Les implémentations d'appareils DOIVENT inclure un accéléromètre à trois axes. Il est vivement recommandé d'inclure ce capteur dans les appareils Android portables et les montres Android. Si une implémentation d'appareil inclut un accéléromètre à trois axes, elle: Les implémentations d'appareils DOIVENT inclure un magnétomètre (boussole) à trois axes. Si un appareil inclut un magnétomètre 3 axes, il: Les implémentations d'appareils DOIVENT inclure un récepteur GPS. Si l'implémentation d'un appareil inclut un récepteur GPS, elle DOIT inclure une forme de technique "GPS assisté" pour réduire le temps de verrouillage du GPS. Les implémentations d'appareils DOIVENT inclure un gyroscope (capteur de changement angulaire).
Les appareils NE DOIVENT PAS inclure de capteur de gyroscope, sauf si un accéléromètre à trois axes est également inclus. Si une implémentation d'appareil inclut un gyroscope: Les implémentations d'appareils DOIVENT inclure un baromètre (capteur de pression de l'air ambiant). Si une implémentation d'appareil inclut un baromètre, elle: Les implémentations d'appareils PEUVENT inclure un thermomètre ambiant (capteur de température).
S'il est présent, il DOIT être défini sur SENSOR_TYPE_AMBIENT_TEMPERATURE et DOIT mesurer la température ambiante (de la pièce) en degrés Celsius. Les implémentations d'appareils PEUVENT, mais NE DOIVENT PAS, inclure un capteur de température du processeur. S'il est présent, il DOIT être défini comme SENSOR_TYPE_TEMPERATURE, DOIT mesurer la température du processeur de l'appareil et NE DOIT PAS mesurer d'autre température.
Notez que le type de capteur SENSOR_TYPE_TEMPERATURE a été abandonné dans Android 4.0. Les implémentations d'appareils PEUVENT inclure un photomètre (capteur de luminosité ambiante). Les implémentations d'appareils PEUVENT inclure un capteur de proximité. Les appareils pouvant passer un appel vocal et indiquant une valeur autre que PHONE_TYPE_NONE dans getPhoneType DOIVENT inclure un capteur de proximité. Si une implémentation d'appareil inclut un capteur de proximité, elle: Les implémentations d'appareils compatibles avec un ensemble de capteurs de meilleure qualité pouvant répondre à toutes les exigences listées dans cette section DOIVENT identifier la compatibilité via le flag de fonctionnalité Un appareil déclarant android.hardware.sensor.hifi_sensors DOIT prendre en charge tous les types de capteurs suivants qui répondent aux exigences de qualité ci-dessous: De plus, un tel appareil DOIT répondre aux exigences suivantes concernant le sous-système de capteurs: Notez que toutes les exigences de consommation d'énergie de cette section n'incluent pas la consommation d'énergie du processeur d'application. Elle comprend la puissance consommée par l'ensemble de la chaîne de capteurs (capteur, circuits de support, système de traitement de capteur dédié, etc.). Les types de capteurs suivants PEUVENT également être compatibles avec une implémentation d'appareil déclarant android.hardware.sensor.hifi_sensors, mais si ces types de capteurs sont présents, ils DOIVENT respecter la capacité de mise en tampon minimale suivante: Les implémentations d'appareils avec un écran de verrouillage sécurisé DOIVENT inclure un lecteur d'empreinte digitale.
Si une implémentation d'appareil inclut un lecteur d'empreinte digitale et dispose d'une API correspondante pour les développeurs tiers, elle: Le terme "téléphonie" utilisé par les API Android et ce document fait spécifiquement référence au matériel lié à la réalisation d'appels vocaux et à l'envoi de messages SMS via un réseau GSM ou CDMA. Bien que ces appels vocaux puissent ou non être commutés par paquets, ils sont considérés comme indépendants de toute connectivité de données pouvant être implémentée sur le même réseau. En d'autres termes, les fonctionnalités et les API de "téléphonie" Android font spécifiquement référence aux appels vocaux et aux SMS. Par exemple, les implémentations d'appareils qui ne peuvent pas passer d'appels ni envoyer/recevoir de messages SMS NE DOIVENT PAS signaler la fonctionnalité android.hardware.telephony ni aucune sous-fonctionnalité, que ce soit ou non via un réseau mobile pour la connectivité de données. Android peut être utilisé sur des appareils qui n'incluent pas de matériel de téléphonie. Autrement dit, Android est compatible avec des appareils autres que des téléphones. Toutefois, si l'implémentation d'un appareil inclut la téléphonie GSM ou CDMA, elle DOIT prendre en charge entièrement l'API pour cette technologie. Les implémentations d'appareils qui n'incluent pas de matériel de téléphonie DOIVENT implémenter les API complètes en tant que no-ops. Les implémentations d'appareils Android TV DOIVENT inclure la prise en charge du Wi-Fi. Les implémentations d'appareils Android TV DOIVENT être compatibles avec une ou plusieurs formes de 802.11 (b/g/a/n, etc.), et les autres types d'implémentation d'appareils Android DOIVENT être compatibles avec une ou plusieurs formes de 802.11. Si l'implémentation d'un appareil inclut la prise en charge de la norme 802.11 et expose la fonctionnalité à une application tierce, elle DOIT implémenter l'API Android correspondante et: Les implémentations d'appareils DOIVENT prendre en charge le Wi-Fi Direct (Wi-Fi peer-to-peer). Si une implémentation d'appareil inclut la prise en charge de Wi-Fi Direct, elle DOIT implémenter l'API Android correspondante, comme décrit dans la documentation du SDK [Ressources, 98]. Si l'implémentation d'un appareil est compatible avec Wi-Fi Direct, elle: Les implémentations d'appareils Android TV DOIVENT prendre en charge la configuration de liaison directe en tunnel Wi-Fi (TDLS). Les implémentations d'appareils Android TV DOIVENT prendre en charge la configuration de liaison directe en tunnel Wi-Fi (TDLS), et les autres types d'implémentations d'appareils Android DOIVENT prendre en charge le TDLS Wi-Fi, comme décrit dans la documentation du SDK Android [Ressources, 99]. Si l'implémentation d'un appareil inclut la prise en charge de TDLS et que TDLS est activé par l'API WiFiManager, l'appareil: Les implémentations Android Watch et Automotive doivent OBLIGATOIREMENT être compatibles avec le Bluetooth. Les implémentations d'Android TV DOIVENT prendre en charge le Bluetooth et le Bluetooth LE. Android est compatible avec le Bluetooth et le Bluetooth à basse consommation [Ressources, 100]. Les implémentations d'appareils qui incluent la prise en charge du Bluetooth et du Bluetooth à basse consommation DOIVENT déclarer les fonctionnalités de plate-forme pertinentes (android.hardware.bluetooth et android.hardware.bluetooth_le, respectivement) et implémenter les API de la plate-forme. Les implémentations d'appareils DOIVENT implémenter les profils Bluetooth pertinents tels que A2DP, AVCP, OBEX, etc., selon les besoins de l'appareil. Les implémentations d'appareils Android Television DOIVENT prendre en charge le Bluetooth et le Bluetooth LE. Implémentations d'appareils prenant en charge le Bluetooth à basse consommation: Les implémentations d'appareils DOIVENT inclure un émetteur-récepteur et du matériel associé pour la technologie NFC (communication en champ proche). Si une implémentation d'appareil inclut du matériel NFC et prévoit de le mettre à la disposition d'applications tierces, elle: (Notez que les liens publics ne sont pas disponibles pour les spécifications JIS, ISO et NFC Forum citées ci-dessus.) Android est compatible avec le mode NFC Host Card Emulation (HCE). Si l'implémentation d'un appareil inclut un chipset de contrôleur NFC compatible avec la technologie HCE et le routage de l'ID d'application (AID), elle: De plus, les implémentations d'appareils PEUVENT inclure la prise en charge des lecteurs/lecteurs pour les technologies MIFARE suivantes. Notez qu'Android inclut des API pour ces types MIFARE. Si une implémentation d'appareil est compatible avec MIFARE dans le rôle de lecteur/écrivain, elle: Si une implémentation d'appareil n'inclut pas de matériel NFC, elle NE DOIT PAS déclarer la fonctionnalité android.hardware.nfc à partir de la méthode android.content.pm.PackageManager.hasSystemFeature() [Resources, 70] et DOIT implémenter l'API NFC Android comme une opération sans effet. Comme les classes android.nfc.NdefMessage et android.nfc.NdefRecord représentent un format de représentation de données indépendant du protocole, les implémentations d'appareils DOIVENT implémenter ces API, même si elles n'incluent pas la compatibilité avec la technologie NFC ni ne déclarent la fonctionnalité android.hardware.nfc. Les implémentations d'appareils DOIVENT prendre en charge une ou plusieurs formes de mise en réseau de données. Plus précisément, les implémentations d'appareils DOIVENT prendre en charge au moins une norme de données capable de 200 kbit/s ou plus. EDGE, HSPA, EV-DO, 802.11g, Ethernet, PAN Bluetooth, etc. sont des exemples de technologies qui répondent à cette exigence. Les implémentations d'appareils où une norme de réseau physique (telle qu'Ethernet) constitue la connexion de données principale DOIVENT également prendre en charge au moins une norme de données sans fil courante, telle que 802.11 (Wi-Fi). Les appareils PEUVENT implémenter plusieurs formes de connectivité de données. Les appareils DOIVENT inclure une pile réseau IPv6 et prendre en charge la communication IPv6 à l'aide des API gérées, telles que IPv6 DOIT être activé par défaut. Pour que la communication IPv6 soit aussi fiable qu'IPv4, les paquets IPv6 unicast envoyés à l'appareil NE DOIVENT PAS être abandonnés, même lorsque l'écran n'est pas actif. Les paquets IPv6 multicast redondants, tels que les annonces de routeur identiques répétées, PEUVENT être limités en débit au niveau du matériel ou du micrologiciel si cela est nécessaire pour économiser de l'énergie. Dans ce cas, la limitation de débit NE DOIT PAS entraîner la perte de connectivité IPv6 de l'appareil sur un réseau compatible avec IPv6 qui utilise des durées de vie RA d'au moins 180 secondes. La connectivité IPv6 DOIT être maintenue en mode Doze. La synchronisation automatique principale doit être activée par défaut dans les implémentations d'appareils afin que la méthode getMasterSyncAutomatically() renvoie "true" [Resources, 109]. Les implémentations d'appareils DOIVENT inclure une caméra arrière et PEUVENT inclure une caméra avant. Une caméra arrière est une caméra située sur le côté de l'appareil, à l'opposé de l'écran. Autrement dit, elle capture des scènes à l'arrière de l'appareil, comme une caméra traditionnelle. Une caméra avant est une caméra située du même côté de l'appareil que l'écran. Autrement dit, il s'agit d'une caméra généralement utilisée pour prendre une photo de l'utilisateur, par exemple pour les visioconférences et les applications similaires. Si une implémentation d'appareil inclut au moins une caméra, une application DOIT pouvoir allouer simultanément trois bitmaps égaux à la taille des images produites par le capteur d'appareil photo de la plus haute résolution de l'appareil. Les implémentations d'appareils DOIVENT inclure une caméra arrière. Si l'implémentation d'un appareil inclut au moins une caméra arrière: Les implémentations d'appareils PEUVENT inclure une caméra avant. Si l'implémentation d'un appareil inclut au moins une caméra avant, elle: Les implémentations d'appareils avec le mode hôte USB PEUVENT inclure la compatibilité avec une caméra externe connectée au port USB. Si un appareil est compatible avec une caméra externe: La prise en charge de la compression vidéo (par exemple, MJPEG) est RECOMMANDÉE pour permettre le transfert de flux non encodés de haute qualité (c'est-à-dire des flux d'images bruts ou compressés indépendamment). L'encodage vidéo basé sur l'appareil photo peut être pris en charge. Si tel est le cas, un flux non encodé/ MJPEG simultané (résolution QVGA ou supérieure) DOIT être accessible à l'implémentation de l'appareil. Android inclut deux packages d'API pour accéder à l'appareil photo. L'API android.hardware.camera2 la plus récente expose le contrôle de l'appareil photo de niveau inférieur à l'application, y compris des flux de streaming/rafale efficaces sans copie et des commandes par frame de l'exposition, du gain, des gains de balance des blancs, de la conversion des couleurs, du dénoyage, de l'accentuation, etc. L'ancien package d'API, android.hardware.Camera, est marqué comme obsolète dans Android 5.0. Toutefois, comme il doit toujours être disponible pour que les applications puissent utiliser les implémentations d'appareils Android, vous devez assurer la prise en charge continue de l'API, comme décrit dans cette section et dans le SDK Android. Les implémentations d'appareils DOIVENT implémenter les comportements suivants pour les API liées à la caméra, pour toutes les caméras disponibles: Les implémentations d'appareils DOIVENT toujours implémenter l'API Camera complète incluse dans la documentation du SDK Android [Ressources, 111], que l'appareil inclue ou non un autofocus matériel ou d'autres fonctionnalités. Par exemple, les appareils photo qui ne disposent pas d'autofocus DOIVENT toujours appeler les instances android.hardware.Camera.AutoFocusCallback enregistrées (même si cela n'a aucune pertinence pour un appareil photo sans autofocus). Notez que cela s'applique aux caméras avant. Par exemple, même si la plupart des caméras avant ne sont pas compatibles avec la mise au point automatique, les rappels d'API doivent toujours être "faussés" comme décrit. Les implémentations d'appareils DOIVENT reconnaître et respecter chaque nom de paramètre défini comme constante dans la classe android.hardware.Camera.Parameters, si le matériel sous-jacent est compatible avec la fonctionnalité. Si le matériel de l'appareil n'est pas compatible avec une fonctionnalité, l'API doit se comporter comme indiqué dans la documentation. À l'inverse, les implémentations d'appareils NE DOIVENT PAS respecter ni reconnaître les constantes de chaîne transmises à la méthode android.hardware.Camera.setParameters() autres que celles documentées en tant que constantes sur android.hardware.Camera.Parameters. Autrement dit, les implémentations d'appareils DOIVENT prendre en charge tous les paramètres d'appareil photo standards si le matériel le permet et NE DOIVENT PAS prendre en charge les types de paramètres d'appareil photo personnalisés. Par exemple, les implémentations d'appareils compatibles avec la capture d'images à l'aide de techniques d'imagerie HDR (High Dynamic Range) DOIVENT prendre en charge le paramètre de l'appareil photo Camera.SCENE_MODE_HDR [Ressources, 112]. Étant donné que toutes les implémentations d'appareils ne peuvent pas prendre en charge toutes les fonctionnalités de l'API android.hardware.camera2, les implémentations d'appareils DOIVENT indiquer le niveau de prise en charge approprié avec la propriété android.info.supportedHardwareLevel, comme décrit dans le SDK Android [Resources, 113] et indiquer les indicateurs de fonctionnalité de framework appropriés [Resources, 114]. Les implémentations d'appareils DOIVENT également déclarer les fonctionnalités individuelles de la caméra d'android.hardware.camera2 via la propriété android.request.availableCapabilities et déclarer les indicateurs de fonctionnalité appropriés [Resources, 114]. Un appareil doit définir l'indicateur de fonctionnalité si l'un de ses appareils photo connectés est compatible avec la fonctionnalité. Les implémentations d'appareils DOIVENT diffuser l'intent Camera.ACTION_NEW_PICTURE chaque fois qu'une nouvelle photo est prise par l'appareil photo et que l'entrée de la photo a été ajoutée au Media Store. Les implémentations d'appareils DOIVENT diffuser l'intent Camera.ACTION_NEW_VIDEO chaque fois qu'une nouvelle vidéo est enregistrée par l'appareil photo et que l'entrée de l'image a été ajoutée au store multimédia. Les caméras avant et arrière, le cas échéant, DOIVENT être orientées de sorte à faire correspondre la dimension longue de la caméra à la dimension longue de l'écran. Autrement dit, lorsque l'appareil est tenu en mode paysage, les appareils photo DOIVENT capturer des images en mode paysage. Cela s'applique quelle que soit l'orientation naturelle de l'appareil, c'est-à-dire aux appareils en mode paysage et en mode portrait. Les appareils Android TV doivent disposer d'au moins 5 Go d'espace de stockage non volatile pour les données privées de l'application. La mémoire disponible pour le noyau et l'espace utilisateur dans les implémentations d'appareils DOIT être au moins égale ou supérieure aux valeurs minimales spécifiées dans le tableau suivant. (Pour connaître les définitions de la taille et de la densité de l'écran, consultez la section 7.1.1.) Les valeurs de mémoire minimale DOIVENT s'ajouter à tout espace de mémoire déjà dédié à des composants matériels tels que la radio, la vidéo, etc. qui ne sont pas sous le contrôle du noyau. Les implémentations d'appareils disposant de moins de 512 Mo de mémoire disponibles pour le noyau et l'espace utilisateur, sauf pour une montre Android, DOIVENT renvoyer la valeur "true" pour ActivityManager.isLowRamDevice(). Les appareils Android TV doivent disposer d'au moins 5 Go, et les autres implémentations d'appareils doivent disposer d'au moins 1,5 Go d'espace de stockage non volatile disponible pour les données privées de l'application. Autrement dit, la partition /data doit être d'au moins 5 Go pour les appareils Android TV et d'au moins 1,5 Go pour les autres implémentations d'appareils.
Il est FORTEMENT RECOMMANDÉ que les implémentations d'appareils exécutant Android disposent d'au moins 3 Go d'espace de stockage non volatile pour les données privées de l'application afin qu'elles puissent passer aux futures versions de la plate-forme. Les API Android incluent un gestionnaire de téléchargement que les applications PEUVENT utiliser pour télécharger des fichiers de données [Ressources, 115]. L'implémentation du Gestionnaire de téléchargement sur l'appareil DOIT être capable de télécharger des fichiers individuels d'au moins 100 Mo à l'emplacement par défaut du "cache". Les implémentations d'appareils DOIVENT proposer un stockage partagé pour les applications, également souvent appelé "stockage externe partagé". Les implémentations d'appareils DOIVENT être configurées avec un stockage partagé installé par défaut. Si le stockage partagé n'est pas installé sur le chemin d'accès Linux /sdcard, l'appareil DOIT inclure un lien symbolique Linux de /sdcard au point d'installation réel. Les implémentations d'appareils PEUVENT comporter du matériel pour le stockage amovible accessible par l'utilisateur, tel qu'un emplacement pour carte Secure Digital (SD). Si ce créneau est utilisé pour répondre à l'exigence de stockage partagé, l'implémentation de l'appareil: Les implémentations d'appareils PEUVENT également allouer de l'espace de stockage interne (non amovible) en tant qu'espace de stockage partagé pour les applications, comme indiqué dans le projet Android Open Source en amont. Les implémentations d'appareils DOIVENT utiliser cette configuration et cette implémentation logicielle. Si une implémentation d'appareil utilise un espace de stockage interne (non amovible) pour répondre aux exigences de stockage partagé, alors que cet espace de stockage PEUT partager l'espace avec les données privées de l'application, il DOIT avoir une taille d'au moins 1 Go et être installé sur /sdcard (ou /sdcard DOIT être un lien symbolique vers l'emplacement physique s'il est installé ailleurs). Les implémentations d'appareils DOIVENT appliquer l'autorisation android.permission.WRITE_EXTERNAL_STORAGE sur cet espace de stockage partagé, comme indiqué dans la documentation.
Sinon, l'espace de stockage partagé DOIT être accessible en écriture par toute application qui obtient cette autorisation. Les implémentations d'appareils qui incluent plusieurs chemins d'espace de stockage partagé (comme un emplacement pour carte SD et un espace de stockage interne partagé) DOIVENT n'autoriser que les applications Android préinstallées et privilégiées disposant de l'autorisation WRITE_EXTERNAL_STORAGE à écrire sur l'espace de stockage externe secondaire, sauf lorsqu'elles écrivent dans leurs répertoires spécifiques au package ou dans le Toutefois, les implémentations d'appareils DOIVENT exposer le contenu des deux chemins de stockage de manière transparente via le service de numérisation multimédia d'Android et android.provider.MediaStore. Quelle que soit la forme de stockage partagé utilisée, si l'implémentation de l'appareil comporte un port USB compatible avec le mode périphérique USB, elle DOIT fournir un mécanisme permettant d'accéder au contenu du stockage partagé à partir d'un ordinateur hôte. Les implémentations d'appareils PEUVENT utiliser le stockage de masse USB, mais DOIVENT utiliser le protocole de transfert multimédia pour répondre à cette exigence. Si l'implémentation de l'appareil est compatible avec le protocole Media Transfer, elle: Il est vivement recommandé d'implémenter un stockage adoptable si le port de l'appareil de stockage amovible se trouve dans un emplacement stable à long terme, tel que dans le compartiment de la batterie ou dans un autre boîtier de protection [Ressources, 117]. Les implémentations d'appareils tels qu'un téléviseur PEUVENT permettre l'adoption via des ports USB, car l'appareil est censé être statique et non mobile. Toutefois, pour les autres implémentations d'appareils de nature mobile, il est FORTEMENT RECOMMANDÉ d'implémenter le stockage adoptable dans un emplacement stable à long terme, car une déconnexion accidentelle peut entraîner une perte ou une corruption de données. Les implémentations d'appareils DOIVENT prendre en charge le mode périphérique USB et le mode hôte USB. Si l'implémentation d'un appareil inclut un port USB compatible avec le mode périphérique: Si une implémentation d'appareil inclut un port USB compatible avec le mode hôte: Les implémentations Android Handheld, Watch et Automotive DOIVENT inclure un micro. Les implémentations d'appareils PEUVENT omettre un micro. Toutefois, si une implémentation d'appareil omet un micro, elle NE DOIT PAS signaler la constante de fonctionnalité android.hardware.microphone et DOIT implémenter l'API d'enregistrement audio au moins en tant que no-ops, conformément à la section 7.
À l'inverse, les implémentations d'appareils qui disposent d'un micro: Les montres Android peuvent inclure une sortie audio. Implémentations d'appareils incluant un haut-parleur ou un port de sortie audio/multimédia pour un périphérique de sortie audio tel qu'un casque ou une enceinte externe: À l'inverse, si l'implémentation d'un appareil n'inclut pas de haut-parleur ni de port de sortie audio, elle NE DOIT PAS signaler la fonctionnalité de sortie android.hardware.audio et DOIT implémenter les API liées à la sortie audio en tant que no-ops au moins. L'implémentation de l'appareil Android Watch PEUT, mais NE DOIT PAS, avoir une sortie audio. En revanche, les autres types d'implémentations d'appareils Android DOIVENT avoir une sortie audio et déclarer android.hardware.audio.output. Pour être compatible avec les casques et autres accessoires audio utilisant la prise audio 3,5 mm dans l'écosystème Android [Ressources, 122], si une implémentation d'appareil inclut un ou plusieurs ports audio analogiques, au moins l'un des ports audio DOIT être un connecteur audio 3,5 mm à quatre conducteurs. Si l'implémentation d'un appareil comporte une prise audio 3,5 mm à quatre conducteurs, elle: L'audio proche des ultrasons correspond à la bande de fréquences de 18,5 kHz à 20 kHz.
Les implémentations d'appareils DOIVENT signaler correctement la prise en charge de la fonctionnalité audio à ultrasons via l'API AudioManager.getProperty comme suit:
Certains critères de performances et d'alimentation minimaux sont essentiels à l'expérience utilisateur et ont une incidence sur les hypothèses de référence que les développeurs peuvent avoir lors du développement d'une application. Les appareils Android Watch DOIVENT et les autres types d'implémentations d'appareils DOIVENT respecter les critères suivants: Les implémentations d'appareils DOIVENT fournir une interface utilisateur fluide en assurant un taux de rafraîchissement et des temps de réponse cohérents pour les applications et les jeux. Les implémentations d'appareils DOIVENT répondre aux exigences suivantes: Les implémentations d'appareils DOIVENT assurer la cohérence des performances d'accès aux fichiers de stockage interne pour les opérations de lecture et d'écriture. Toutes les applications exemptées du mode Veille des applications et/ou du mode Doze DOIVENT être visibles par l'utilisateur final. De plus, les algorithmes de déclenchement, de maintenance, de réveil et l'utilisation des paramètres système globaux de ces modes d'économie d'énergie DOIVENT respecter le projet Open Source Android. Une comptabilisation et une création de rapports plus précises de la consommation d'énergie fournissent au développeur d'applications à la fois les incitations et les outils nécessaires pour optimiser le schéma d'utilisation de l'énergie de l'application. Par conséquent, les implémentations d'appareils: Les implémentations d'appareils DOIVENT implémenter un modèle de sécurité conforme au modèle de sécurité de la plate-forme Android, tel que défini dans le document de référence sur la sécurité et les autorisations des API [Ressources, 126] de la documentation pour les développeurs Android. Les implémentations d'appareils DOIVENT prendre en charge l'installation d'applications autosignées sans nécessiter d'autorisations/certificats supplémentaires de la part de tiers/autorités. Plus précisément, les appareils compatibles DOIVENT prendre en charge les mécanismes de sécurité décrits dans les sous-sections suivantes. Les implémentations d'appareils DOIVENT prendre en charge le modèle d'autorisations Android tel que défini dans la documentation pour les développeurs Android [Ressources, 126]. Plus précisément, les implémentations DOIVENT appliquer chaque autorisation définie comme décrit dans la documentation du SDK. Aucune autorisation ne peut être omise, modifiée ou ignorée. Les implémentations PEUVENT ajouter des autorisations supplémentaires, à condition que les nouvelles chaînes d'ID d'autorisation ne se trouvent pas dans l'espace de noms android.*. Les autorisations dont le niveau de protection est dangereux sont des autorisations d'exécution. Les applications avec targetSdkVersion > 22 les demandent au moment de l'exécution. Implémentations de l'appareil: Les implémentations d'appareils DOIVENT prendre en charge le modèle de bac à sable d'application Android, dans lequel chaque application s'exécute en tant qu'UID unique de style Unix et dans un processus distinct. Les implémentations d'appareils DOIVENT prendre en charge l'exécution de plusieurs applications avec le même ID utilisateur Linux, à condition que les applications soient correctement signées et construites, comme défini dans la référence sur la sécurité et les autorisations [Ressources, 126]. Les implémentations d'appareils DOIVENT prendre en charge le modèle d'autorisations d'accès aux fichiers Android tel que défini dans la référence sur la sécurité et les autorisations [Ressources, 126]. Les implémentations d'appareils PEUVENT inclure des environnements d'exécution qui exécutent des applications à l'aide d'un autre logiciel ou d'une autre technologie que le format exécutable Dalvik ou le code natif. Toutefois, ces environnements d'exécution alternatifs NE DOIVENT PAS compromettre le modèle de sécurité Android ni la sécurité des applications Android installées, comme décrit dans cette section. Les environnements d'exécution alternatifs DOIVENT eux-mêmes être des applications Android et respecter le modèle de sécurité Android standard, comme décrit ailleurs dans la section 9. Les environnements d'exécution alternatifs NE DOIVENT PAS être autorisés à accéder aux ressources protégées par des autorisations non demandées dans le fichier AndroidManifest.xml de l'environnement d'exécution via le mécanisme Les environnements d'exécution alternatifs NE DOIVENT PAS autoriser les applications à utiliser des fonctionnalités protégées par des autorisations Android limitées aux applications système. Les environnements d'exécution alternatifs DOIVENT respecter le modèle de bac à sable Android. Plus précisément, les environnements d'exécution alternatifs: Les fichiers .apk des environnements d'exécution alternatifs PEUVENT être inclus dans l'image système d'une implémentation d'appareil, mais DOIVENT être signés avec une clé distincte de celle utilisée pour signer les autres applications incluses avec l'implémentation de l'appareil. Lors de l'installation d'applications, les environnements d'exécution alternatifs DOIVENT obtenir le consentement de l'utilisateur pour les autorisations Android utilisées par l'application. Si une application doit utiliser une ressource d'appareil pour laquelle une autorisation Android correspondante est disponible (appareil photo, GPS, etc.), le runtime alternatif DOIT informer l'utilisateur que l'application pourra accéder à cette ressource. Si l'environnement d'exécution n'enregistre pas les fonctionnalités de l'application de cette manière, l'environnement d'exécution DOIT lister toutes les autorisations détenues par l'environnement d'exécution lui-même lors de l'installation d'une application utilisant cet environnement d'exécution. Cette fonctionnalité est facultative pour tous les types d'appareils. Android est compatible avec plusieurs utilisateurs et prend en charge l'isolation complète des utilisateurs [Resources, 127]. Les implémentations d'appareils PEUVENT permettre l'utilisation de plusieurs utilisateurs, mais lorsqu'elles sont activées, elles DOIVENT respecter les exigences suivantes liées à la prise en charge du mode multi-utilisateur [Ressources, 128]: Android permet d'avertir les utilisateurs de tout message SMS sortant surtaxé [Ressources, 130]. Les SMS premium sont des messages envoyés à un service enregistré auprès d'un opérateur qui peuvent entraîner des frais pour l'utilisateur. Les implémentations d'appareils qui déclarent la prise en charge d'android.hardware.telephony DOIVENT avertir les utilisateurs avant d'envoyer un message SMS à des numéros identifiés par des expressions régulières définies dans le fichier /data/misc/sms/codes.xml de l'appareil. Le projet Android Open Source en amont fournit une implémentation qui répond à cette exigence. Le bac à sable Android inclut des fonctionnalités qui utilisent le système de contrôle des accès obligatoire (MAC) Security-Enhanced Linux (SELinux) et d'autres fonctionnalités de sécurité du noyau Linux. SELinux ou toute autre fonctionnalité de sécurité implémentée sous le framework Android: Si une API de configuration de règles est exposée à une application pouvant affecter une autre application (telle qu'une API d'administration d'appareils), elle NE DOIT PAS autoriser les configurations qui compromettent la compatibilité. Les appareils DOIVENT implémenter SELinux ou, s'ils utilisent un noyau autre que Linux, un système de contrôle d'accès obligatoire équivalent. Les appareils doivent également respecter les exigences suivantes, qui sont satisfaites par l'implémentation de référence dans le projet Open Source Android en amont. Implémentations de l'appareil: Les implémentations d'appareils DOIVENT conserver la stratégie SELinux par défaut fournie dans le dossier external/sepolicy du projet Open Source Android en amont et ne doivent ajouter à cette stratégie que pour leur propre configuration spécifique à l'appareil. Les implémentations d'appareils DOIVENT être compatibles avec le projet Android Open Source en amont.
Si l'appareil implémente une fonctionnalité dans le système qui capture les contenus affichés à l'écran et/ou enregistre le flux audio diffusé sur l'appareil, il DOIT informer l'utilisateur en continu chaque fois que cette fonctionnalité est activée et qu'elle capture/enregistre activement. Si une implémentation d'appareil comporte un mécanisme qui achemine le trafic de données réseau via un serveur proxy ou une passerelle VPN par défaut (par exemple, le préchargement d'un service VPN avec android.permission.CONTROL_VPN accordé), l'implémentation de l'appareil DOIT demander le consentement de l'utilisateur avant d'activer ce mécanisme. Si une implémentation d'appareil comporte un port USB compatible avec le mode périphérique USB, elle DOIT présenter une interface utilisateur demandant le consentement de l'utilisateur avant d'autoriser l'accès au contenu du stockage partagé via le port USB. Facultatif pour les implémentations d'appareils Android sans écran de verrouillage. Si l'implémentation de l'appareil est compatible avec un écran de verrouillage sécurisé qui signale " Pour les implémentations d'appareils compatibles avec le chiffrement de disque complet et dont les performances de chiffrement AES (Advanced Encryption Standard) dépassent 50 Mo/s, le chiffrement de disque complet DOIT être activé par défaut au moment où l'utilisateur a terminé l'expérience de configuration prête à l'emploi. Si une implémentation d'appareil est déjà lancée sur une version antérieure d'Android avec le chiffrement de disque complet désactivé par défaut, cet appareil ne peut pas répondre à l'exigence via une mise à jour du logiciel système et peut donc être exempté. Le chiffrement DOIT utiliser AES avec une clé de 128 bits (ou plus) et un mode conçu pour le stockage (par exemple, AES-XTS, AES-CBC-ESSIV). La clé de chiffrement NE DOIT PAS être écrite sur le stockage à tout moment sans être chiffrée. Sauf lorsqu'elle est utilisée, la clé de chiffrement DOIT être chiffrée AES avec le code de verrouillage de l'écran étiré à l'aide d'un algorithme d'étirement lent (par exemple, PBKDF2 ou scrypt).
Si l'utilisateur n'a pas spécifié de code secret pour l'écran de verrouillage ou a désactivé l'utilisation du code secret pour le chiffrement, le système DOIT utiliser un code secret par défaut pour encapsuler la clé de chiffrement. Si l'appareil fournit un keystore intégré au matériel, l'algorithme d'étirement de mot de passe DOIT être lié de manière cryptographique à ce keystore. La clé de chiffrement NE DOIT PAS être envoyée en dehors de l'appareil (même lorsqu'elle est encapsulée avec le code secret de l'utilisateur et/ou la clé liée au matériel). Le projet Android Open Source en amont fournit une implémentation privilégiée de cette fonctionnalité basée sur la fonctionnalité dm-crypt du noyau Linux.
Le démarrage validé est une fonctionnalité qui garantit l'intégrité du logiciel de l'appareil.
Si une implémentation d'appareil est compatible avec cette fonctionnalité, elle DOIT:
Le projet Android Open Source en amont fournit une implémentation privilégiée de cette fonctionnalité basée sur la fonctionnalité dm-verity du noyau Linux. À partir d'Android 6.0, les implémentations d'appareils avec des performances de cryptographie AES (Advanced Encryption Standard) supérieures à 50 Mo/s DOIVENT prendre en charge le démarrage validé pour l'intégrité de l'appareil.
Si une implémentation d'appareil est déjà lancée sans prendre en charge le démarrage validé sur une version antérieure d'Android, cet appareil ne peut pas prendre en charge cette fonctionnalité avec une mise à jour du logiciel système et est donc exempté de cette exigence. Le système Android Keystore [Ressources, 133] permet aux développeurs d'applications de stocker des clés cryptographiques dans un conteneur et de les utiliser dans des opérations cryptographiques via l'API KeyChain [Ressources, 134] ou l'API Keystore [Ressources, 135].
Toutes les implémentations d'appareils Android DOIVENT respecter les exigences suivantes: Notez que, bien que les exigences ci-dessus liées au TEE soient indiquées comme FORTEMENT RECOMMANDÉES, la définition de la compatibilité pour la prochaine version de l'API prévoit de les remplacer par "EXIGÉ". Si une implémentation d'appareil est déjà lancée sur une version antérieure d'Android et qu'elle n'a pas implémenté de système d'exploitation approuvé sur le matériel sécurisé, il est possible qu'un tel appareil ne puisse pas répondre aux exigences via une mise à jour logicielle du système. Il est donc fortement recommandé d'implémenter un TEE. Les appareils DOIVENT fournir aux utilisateurs un mécanisme permettant d'effectuer un "rétablissement de la configuration d'usine" qui permet de supprimer de manière logique et physique toutes les données, à l'exception de l'image système et des données d'autres partitions pouvant être considérées comme faisant partie de l'image système.
Cette méthode doit respecter les normes du secteur applicables à la suppression des données, telles que la norme NIST SP800-88.
Cette méthode DOIT être utilisée pour l'implémentation de l'API wipeData() (qui fait partie de l'API Android Device Administration) décrite dans la section 3.9 Administration des appareils. Les appareils peuvent fournir un effacement rapide des données qui effectue un effacement logique des données. Les implémentations d'appareils DOIVENT réussir tous les tests décrits dans cette section. Toutefois, notez qu'aucun package de test logiciel n'est totalement complet. Pour cette raison, il est FORTEMENT RECOMMANDÉ aux implémentateurs d'appareils d'apporter le moins de modifications possible à l'implémentation de référence et privilégiée d'Android disponible dans le projet Android Open Source. Cela réduit le risque d'introduire des bugs qui créent des incompatibilités nécessitant des retouches et des mises à jour potentielles de l'appareil. Les implémentations d'appareils DOIVENT réussir les tests de compatibilité Android (CTS) [Ressources, 137] disponibles sur le projet Android Open Source, à l'aide du logiciel final fourni sur l'appareil. En outre, les implémentateurs d'appareils DOIVENT utiliser autant que possible l'implémentation de référence dans l'arborescence Open Source Android et DOIVENT assurer la compatibilité en cas d'ambiguïté dans le CTS et pour toute réimplémentation de parties du code source de référence. Le CTS est conçu pour être exécuté sur un appareil réel. Comme tout logiciel, le CTS peut lui-même contenir des bugs. La version du CTS sera gérée indépendamment de cette définition de la compatibilité. Plusieurs révisions du CTS peuvent être publiées pour Android 6.0. Les implémentations d'appareils DOIVENT réussir les tests de la dernière version de CTS disponible au moment où le logiciel de l'appareil est finalisé. Les implémentations d'appareils DOIVENT exécuter correctement tous les cas applicables dans le vérificateur CTS. Le vérificateur CTS est inclus dans la suite de tests de compatibilité. Il est destiné à être exécuté par un opérateur humain pour tester les fonctionnalités qui ne peuvent pas être testées par un système automatisé, comme le bon fonctionnement d'une caméra et de capteurs. Le vérificateur CTS propose des tests pour de nombreux types de matériel, y compris certains matériels facultatifs. Les implémentations d'appareils DOIVENT réussir tous les tests du matériel dont elles disposent. Par exemple, si un appareil possède un accéléromètre, il DOIT exécuter correctement le scénario de test de l'accéléromètre dans le vérificateur CTS. Les cas de test des fonctionnalités indiquées comme facultatives par ce document de définition de la compatibilité PEUVENT être ignorés ou omis. Chaque appareil et chaque build DOIVENT exécuter correctement le vérificateur CTS, comme indiqué ci-dessus. Toutefois, comme de nombreuses versions sont très similaires, les implémentateurs d'appareils ne sont pas tenus d'exécuter explicitement le vérificateur CTS sur des versions qui ne diffèrent que de manière triviale. Plus précisément, les implémentations d'appareils qui ne diffèrent d'une implémentation ayant réussi le vérificateur CTS que par l'ensemble des paramètres régionaux, de la marque, etc. PEUVENT omettre le test du vérificateur CTS. Les implémentations d'appareils DOIVENT inclure un mécanisme permettant de remplacer l'intégralité du logiciel système. Le mécanisme n'a pas besoin d'effectuer de mises à niveau "en direct". Autrement dit, un redémarrage de l'appareil peut être nécessaire. N'importe quelle méthode peut être utilisée, à condition qu'elle puisse remplacer l'intégralité du logiciel préinstallé sur l'appareil. Par exemple, l'une des approches suivantes répond à cette exigence: Toutefois, si l'implémentation de l'appareil prend en charge une connexion de données non limitée, telle que le profil 802.11 ou le profil Bluetooth PAN (Personal Area Network) : Le mécanisme de mise à jour utilisé DOIT être compatible avec les mises à jour sans effacer les données utilisateur. Autrement dit, le mécanisme de mise à jour DOIT préserver les données privées et les données partagées de l'application. Notez que le logiciel Android en amont inclut un mécanisme de mise à jour qui répond à cette exigence. Pour les implémentations d'appareils lancées avec Android 6.0 ou version ultérieure, le mécanisme de mise à jour DOIT permettre de vérifier que l'image système est identique au résultat attendu après une mise à jour OTA. L'implémentation OTA basée sur les blocs dans le projet Android Open Source en amont, ajoutée depuis Android 5.1, répond à cette exigence. Si une erreur est détectée dans l'implémentation d'un appareil après sa sortie, mais dans la durée de vie raisonnable du produit déterminée en consultation avec l'équipe de compatibilité Android, et qu'elle affecte la compatibilité des applications tierces, l'implémentateur de l'appareil DOIT corriger l'erreur via une mise à jour logicielle disponible qui peut être appliquée conformément au mécanisme décrit ci-dessus. Android inclut des fonctionnalités qui permettent à l'application propriétaire de l'appareil (si elle est présente) de contrôler l'installation des mises à jour du système. Pour faciliter cette tâche, le sous-système de mise à jour du système pour les appareils qui signalent android.software.device_admin DOIT implémenter le comportement décrit dans la classe SystemUpdatePolicy [
Ressources, 138]. Le tableau suivant récapitule les modifications apportées à la définition de la compatibilité dans cette version. Vous pouvez rejoindre le forum de compatibilité Android [Ressources, 139] et demander des précisions ou soulever les problèmes que vous pensez que le document ne couvre pas. 1. Niveaux d'exigences de la norme IETF RFC 2119: http://www.ietf.org/rfc/rfc2119.txt 2. Projet Android Open Source: http://source.android.com/ 3. Fonctionnalités Android Television: http://developer.android.com/reference/android/content/pm/PackageManager.html#FEATURE_LEANBACK 4. Fonctionnalité Android Watch: http://developer.android.com/reference/android/content/res/Configuration.html#UI_MODE_TYPE_WATCH 5. API Android UI_MODE_TYPE_CAR: http://developer.android.com/reference/android/content/res/Configuration.html#UI_MODE_TYPE_CAR 6. Définitions et documentation des API: http://developer.android.com/reference/packages.html 7. Documentation de référence sur les autorisations Android: http://developer.android.com/reference/android/Manifest.permission.html 8. Documentation android.os.Build: http://developer.android.com/reference/android/os/Build.html 9. Chaînes de version autorisées pour Android 6.0: http://source.android.com/docs/compatibility/6.0/versions.html 10. Paramètres du développeur Android: http://developer.android.com/reference/android/provider/Settings.html 11. Fournisseur de téléphonie: http://developer.android.com/reference/android/provider/Telephony.html 12. Gestion des ABI Android NDK: https://developer.android.com/ndk/guides/abis.html 13. Architecture SIMD avancée: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0388f/Beijfcja.html 14. Android Extension Pack: http://developer.android.com/guide/topics/graphics/opengl.html#aep 15. Classe android.webkit.WebView: http://developer.android.com/reference/android/webkit/WebView.html 16. Compatibilité avec WebView: http://www.chromium.org/ 17. HTML5: http://html.spec.whatwg.org/multipage/ 18. Fonctionnalités hors connexion HTML5: http://dev.w3.org/html5/spec/Overview.html#offline 19. Balise vidéo HTML5: http://dev.w3.org/html5/spec/Overview.html#video 20. API de géolocalisation HTML5/W3C: http://www.w3.org/TR/geolocation-API/ 21. API Webstorage HTML5/W3C: http://www.w3.org/TR/webstorage/ 22. API IndexedDB HTML5/W3C: http://www.w3.org/TR/IndexedDB/ 23. Format Dalvik Executable et spécification du bytecode: disponible dans le code source Android, à l'adresse dalvik/docs 24. AppWidgets: http://developer.android.com/guide/practices/ui_guidelines/widget_design.html 25. Notifications: http://developer.android.com/guide/topics/ui/notifiers/notifications.html 26. Ressources d'application: https://developer.android.com/guide/topics/resources/available-resources.html 27. Guide de style des icônes de la barre d'état: http://developer.android.com/design/style/iconography.html 28. Ressources sur les notifications: https://developer.android.com/design/patterns/notifications.html 29. Gestionnaire de recherche: http://developer.android.com/reference/android/app/SearchManager.html 30. Action Assist: http://developer.android.com/reference/android/content/Intent.html#ACTION_ASSIST 31. API Android Assist: https://developer.android.com/reference/android/app/assist/package-summary.html 32. Toasts: http://developer.android.com/reference/android/widget/Toast.html 33. Thèmes: http://developer.android.com/guide/topics/ui/themes.html 34. Classe R.style: http://developer.android.com/reference/android/R.style.html 35. Material Design: http://developer.android.com/reference/android/R.style.html#Theme_Material 36. Fonds d'écran animés: http://developer.android.com/reference/android/service/wallpaper/WallpaperService.html 37. Ressources sur l'écran "Vue d'ensemble" : http://developer.android.com/guide/components/recents.html 38. Épinglage d'écran: https://developer.android.com/about/versions/android-5.0.html#ScreenPinning 39. Modes de saisie: http://developer.android.com/guide/topics/text/creating-input-method.html 40. Notification multimédia: https://developer.android.com/reference/android/app/Notification.MediaStyle.html 41. Dreams: http://developer.android.com/reference/android/service/dreams/DreamService.html 42. Settings.Secure LOCATION_MODE: http://developer.android.com/reference/android/provider/Settings.Secure.html#LOCATION_MODE 43. Unicode 6.1.0: http://www.unicode.org/versions/Unicode6.1.0/ 44. Android Device Administration: http://developer.android.com/guide/topics/admin/device-admin.html 45. Documentation DevicePolicyManager: http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html 46. Application du propriétaire de l'appareil: http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#isDeviceOwnerApp(java.lang.String) 47. Flux de provisionnement du propriétaire d'appareil Android: http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#ACTION_PROVISION_MANAGED_DEVICE 48. Provisionnement du propriétaire de l'appareil via NFC: /devices/tech/admin/provision.html#device_owner_provisioning_via_nfc 49. Application propriétaire du profil Android:http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#isProfileOwnerApp(java.lang.String) 50. Flux de provisionnement de profil géré Android: http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#ACTION_PROVISION_MANAGED_PROFILE 51. API Android Accessibility Service: http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html 52. API d'accessibilité Android: http://developer.android.com/reference/android/view/accessibility/package-summary.html 53. Projet Eyes Free: http://code.google.com/p/eyes-free 54. API Text-to-Speech: http://developer.android.com/reference/android/speech/tts/package-summary.html 55. Television Input Framework: /devices/tv/index.html 56. Chaînes de l'application TV: http://developer.android.com/reference/android/media/tv/TvContract.Channels.html 57. Entrées TV tierces: /devices/tv/index.html#third-party_input_example 58. Entrées TV: /devices/tv/index.html#tv_inputs 59. Champs de l'EPG des chaînes de télévision: https://developer.android.com/reference/android/media/tv/TvContract.Programs.html 60. Association d'applications d'entrée TV: http://developer.android.com/reference/android/media/tv/TvContract.Channels.html#COLUMN_APP_LINK_INTENT_URI 61. Documentation de référence des outils (pour adb, aapt, ddms et systrace): http://developer.android.com/tools/help/index.html 62. Description du fichier APK Android: http://developer.android.com/guide/components/fundamentals.html 63. Fichiers manifestes: http://developer.android.com/guide/topics/manifest/manifest-intro.html 64. Formats multimédias Android: http://developer.android.com/guide/appendix/media-formats.html 65. API Android MediaCodecList: http://developer.android.com/reference/android/media/MediaCodecList.html 66. API Android CamcorderProfile: http://developer.android.com/reference/android/media/CamcorderProfile.html 67. Projet WebM: http://www.webmproject.org/ 68. Exigences de codage matériel RTC: http://www.webmproject.org/hardware/rtc-coding-requirements/ 69. API AudioEffect: http://developer.android.com/reference/android/media/audiofx/AudioEffect.html 70. Classe android.content.pm.PackageManager et liste des fonctionnalités matérielles Android: http://developer.android.com/reference/android/content/pm/PackageManager.html 71. Draft Protocol HTTP Live Streaming: http://tools.ietf.org/html/draft-pantos-http-live-streaming-03 72. ADB: http://developer.android.com/tools/help/adb.html 73. Dumpsys: /devices/input/diagnostics.html 74. DDMS: http://developer.android.com/tools/debugging/ddms.html 75. Outil de test du singe: http://developer.android.com/tools/help/monkey.html 76. Outil Systrace: http://developer.android.com/tools/help/systrace.html 77. Paramètres liés au développement d'applications Android: http://developer.android.com/reference/android/provider/Settings.html#ACTION_APPLICATION_DEVELOPMENT_SETTINGS 78. Compatibilité avec plusieurs écrans: http://developer.android.com/guide/practices/screens_support.html 79. android.util.DisplayMetrics: http://developer.android.com/reference/android/util/DisplayMetrics.html 80. RenderScript: http://developer.android.com/guide/topics/renderscript/ 81. Pack d'extensions Android pour OpenGL ES: https://developer.android.com/reference/android/opengl/GLES31Ext.html 82. Accélération matérielle: http://developer.android.com/guide/topics/graphics/hardware-accel.html 83. Extension EGL-EGL_ANDROID_RECORDABLE: http://www.khronos.org/registry/egl/extensions/ANDROID/EGL_ANDROID_recordable.txt 84. Gestionnaire d'affichage: http://developer.android.com/reference/android/hardware/display/DisplayManager.html 85. android.content.res.Configuration: http://developer.android.com/reference/android/content/res/Configuration.html 86. Configuration de la saisie tactile: http://source.android.com/docs/core/interaction/input/touch-devices 87. API Motion Event: http://developer.android.com/reference/android/view/MotionEvent.html 88. API Key Event: http://developer.android.com/reference/android/view/KeyEvent.html 89. Capteurs Open Source Android: http://source.android.com/docs/core/interaction/sensors 90. android.hardware.SensorEvent: http://developer.android.com/reference/android/hardware/SensorEvent.html 91. Événement de capteur avec code temporel: http://developer.android.com/reference/android/hardware/SensorEvent.html#timestamp 92. Capteurs composites Android Open Source: /docs/core/interaction/sensors/sensor-types#composite_sensor_type_summary 93. Mode de déclenchement continu: http://developer.android.com/reference/android/hardware/Sensor.html#TYPE_ACCELEROMETER 95. API Android Fingerprint: https://developer.android.com/reference/android/hardware/fingerprint/package-summary.html 96. HAL d'empreinte digitale Android: /devices/tech/security/authentication/fingerprint-hal.html 97. API Wi-Fi Multicast: http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html 98. Wi-Fi Direct (Wi-Fi P2P): http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html 99. API WifiManager: http://developer.android.com/reference/android/net/wifi/WifiManager.html 100. API Bluetooth: http://developer.android.com/reference/android/bluetooth/package-summary.html 101. API Bluetooth ScanFilter: https://developer.android.com/reference/android/bluetooth/le/ScanFilter.html 102. Code-barres NFC: http://developer.android.com/reference/android/nfc/tech/NfcBarcode.html 103. Protocole NDEF Push: http://source.android.com/docs/compatibility/ndef-push-protocol.pdf 104. Android Beam: http://developer.android.com/guide/topics/connectivity/nfc/nfc.html 105. Paramètres de partage NFC Android: http://developer.android.com/reference/android/provider/Settings.html#ACTION_NFCSHARING_SETTINGS 106. Transfert de connexion NFC: http://members.nfc-forum.org/specs/spec_list/#conn_handover 107. Bluetooth Secure Simple Pairing Using NFC: http://members.nfc-forum.org/apps/group_public/download.php/18688/NFCForum-AD-BTSSP_1_1.pdf 108. Émulation de carte basée sur l'hôte: http://developer.android.com/guide/topics/connectivity/nfc/hce.html 109. Résolveur de contenu: http://developer.android.com/reference/android/content/ContentResolver.html 110. API d'orientation de l'appareil photo: http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int) 111. Caméra: http://developer.android.com/reference/android/hardware/Camera.html 112. Caméra: http://developer.android.com/reference/android/hardware/Camera.Parameters.html 113. Niveau matériel de l'appareil photo: https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#INFO_SUPPORTED_HARDWARE_LEVEL 114. Compatibilité avec les versions de l'appareil photo: http://source.android.com/docs/core/camera/versioning 115. Android DownloadManager: http://developer.android.com/reference/android/app/DownloadManager.html 116. Android File Transfer: http://www.android.com/filetransfer 117. Stockage extensible: http://source.android.com/docs/core/storage/adoptable 118. Accessoires Android Open: http://developer.android.com/guide/topics/connectivity/usb/accessory.html 119. Audio USB Android: http://developer.android.com/reference/android/hardware/usb/UsbConstants.html#USB_CLASS_AUDIO 120. Spécification de recharge de la batterie USB, version 1.2: http://www.usb.org/developers/docs/devclass_docs/BCv1.2_070312.zip 121. API USB Host: http://developer.android.com/guide/topics/connectivity/usb/host.html 122. Casque audio filaire: http://source.android.com/docs/core/interaction/accessories/headset/plug-headset-spec 123. Composants du profil d'alimentation: http://source.android.com/docs/core/power/values 124. Batterystats: https://developer.android.com/tools/dumpsys#battery 125. Résumé de la consommation d'énergie: http://developer.android.com/reference/android/content/Intent.html#ACTION_POWER_USAGE_SUMMARY 126. Documentation de référence sur la sécurité et les autorisations Android: http://developer.android.com/guide/topics/security/permissions.html 127. Documentation de référence sur UserManager: http://developer.android.com/reference/android/os/UserManager.html 128. Référence sur le stockage externe: http://source.android.com/docs/core/storage/traditional 129. API de stockage externe: http://developer.android.com/reference/android/os/Environment.html 130. Code court SMS: http://en.wikipedia.org/wiki/Short_code 131. Signalement de l'écran de verrouillage sécurisé: http://developer.android.com/reference/android/app/KeyguardManager.html#isDeviceSecure() 132. Chiffrement Open Source Android: http://source.android.com/docs/security/features/encryption 133. Système Android Keystore: https://developer.android.com/training/articles/keystore.html 134. API KeyChain: https://developer.android.com/reference/android/security/KeyChain.html 135. API Keystore: https://developer.android.com/reference/java/security/KeyStore.html 136. HAL Gatekeeper: http://source.android.com/docs/security/features/authentication/gatekeeper 137. Présentation du programme de compatibilité Android: http://source.android.com/docs/compatibility 138. Classe SystemUpdatePolicy: http://developer.android.com/reference/android/app/admin/SystemUpdatePolicy.html 139. Forum sur la compatibilité Android: https://groups.google.com/forum/#!forum/android-compatibility 140. Gérer les liens d'application: https://developer.android.com/training/app-links/index.html 141. Google Digital Asset Links: https://developers.google.com/digital-asset-links Bon nombre de ces ressources sont dérivées directement ou indirectement du SDK Android et sont fonctionnellement identiques aux informations de la documentation de ce SDK. Dans tous les cas où cette définition de la compatibilité ou la suite de tests de compatibilité ne sont pas conformes à la documentation du SDK, la documentation du SDK est considérée comme faisant autorité. Tous les détails techniques fournis dans les références ci-dessus sont considérés comme faisant partie de cette définition de compatibilité.3.7. Compatibilité avec l'environnement d'exécution
Mise en page de l'écran
Densité d'écran
Mémoire minimale de l'application
Montre Android
120 PPP (ldpi)
32 Mo
160 ppp (mdpi)
213 ppp (tvdpi)
240 ppp (hdpi)
36 Mo
280 ppp (280 dpi)
320 ppp (xhdpi)
48 Mo
360 dpi (360 dpi)
400 ppp (400 dpi)
56 Mo
420 ppp (420dpi)
64 Mo
480 dpi (xxhdpi)
88 Mo
560 ppp (560dpi)
112 Mo
640 ppp (xxxhdpi)
154 Mo
petite/normale
120 PPP (ldpi)
32 Mo
160 ppp (mdpi)
213 ppp (tvdpi)
48 Mo
240 ppp (hdpi)
280 ppp (280 dpi)
320 ppp (xhdpi)
80 Mo
360 dpi (360 dpi)
400 ppp (400 dpi)
96 Mo
420 ppp (420dpi)
112 Mo
480 dpi (xxhdpi)
128 Mo
560 ppp (560dpi)
192 Mo
640 ppp (xxxhdpi)
256 Mo
grande
120 PPP (ldpi)
32 Mo
160 ppp (mdpi)
48 Mo
213 ppp (tvdpi)
80 Mo
240 ppp (hdpi)
280 ppp (280 dpi)
96 Mo
320 ppp (xhdpi)
128 Mo
360 dpi (360 dpi)
160 Mo
400 ppp (400 dpi)
192 Mo
420 ppp (420dpi)
228 Mo
480 dpi (xxhdpi)
256 Mo
560 ppp (560dpi)
384 Mo
640 ppp (xxxhdpi)
512 Mo
xlarge
120 PPP (ldpi)
48 Mo
160 ppp (mdpi)
80 Mo
213 ppp (tvdpi)
96 Mo
240 ppp (hdpi)
280 ppp (280 dpi)
144 Mo
320 ppp (xhdpi)
192 Mo
360 dpi (360 dpi)
240 Mo
400 ppp (400 dpi)
288 Mo
420 ppp (420dpi)
336 Mo
480 dpi (xxhdpi)
384 Mo
560 ppp (560dpi)
576 Mo
640 ppp (xxxhdpi)
768 Mo
3.8. Compatibilité de l'interface utilisateur
3.8.1. Lanceur (écran d'accueil)
3.8.2. Widgets
3.8.3. Notifications
3.8.4. Recherche
3.8.5. Notifications toast
3.8.6. Thèmes
3.8.7. Fonds d'écran animés
3.8.8. Changement d'activité
3.8.9. Gestion des entrées
3.8.10. Contrôle des contenus multimédias sur l'écran de verrouillage
3.8.11. Rêves
3.8.12. Position
3.8.13. Unicode et police
3.9. Gestion de l'appareil
3.9.1 Préparation de l'appareil
3.9.1.1 Provisionnement du propriétaire de l'appareil
3.9.1.2 Provisionnement de profils gérés
3.9.2 Prise en charge des profils gérés
3.10. Accessibilité
3.11. Synthèse vocale
3.12. TV Input Framework
3.12.1. Application TV
3.12.1.1. Guide des programmes électroniques
3.12.1.2. Navigation
3.12.1.3. Association d'applications à une entrée TV
4. Compatibilité du packaging d'applications
5. Compatibilité multimédia
5.1. Codecs multimédias
5.1.1. Codecs audio
Format/Codec
Encodeur
Décodeur
Détails
Types de fichiers/Formats de conteneurs compatibles
Profil MPEG-4 AAC
(AAC LC)OBLIGATOIRE1
REQUIRED
Compatibilité avec les contenus mono/stéréo/5.0/5.12 avec des taux d'échantillonnage standards de 8 à 48 kHz.
Profil MPEG-4 HE AAC (AAC+)
OBLIGATOIRE1
(Android 4.1 ou version ultérieure)REQUIRED
Compatibilité avec le contenu mono/stéréo/5.0/5.12 avec des taux d'échantillonnage standards de 16 à 48 kHz.
Profil MPEG-4 HE AACv2
(AAC+ amélioré)
REQUIRED
Compatibilité avec le contenu mono/stéréo/5.0/5.12 avec des taux d'échantillonnage standards de 16 à 48 kHz.
AAC ELD (AAC à faible latence amélioré)
OBLIGATOIRE1
(Android 4.1 et versions ultérieures)OBLIGATOIRE
(Android 4.1 ou version ultérieure)Compatibilité avec le contenu mono/stéréo avec des taux d'échantillonnage standards de 16 à 48 kHz.
AMR-NB
OBLIGATOIRE3
OBLIGATOIRE3
4,75 à 12,2 kbit/s échantillonnés à 8 kHz
3GPP (.3gp)
AMR-WB
OBLIGATOIRE3
OBLIGATOIRE3
9 débits de 6,60 kbit/s à 23,85 kbit/s échantillonnés à 16 kHz
FLAC
OBLIGATOIRE
(Android 3.1 et versions ultérieures)Mono/Stéréo (pas de multicanaux) Taux d'échantillonnage jusqu'à 48 kHz (mais jusqu'à 44,1 kHz RECOMMANDÉ sur les appareils avec sortie 44,1 kHz, car le convertisseur 48 kHz vers 44,1 kHz n'inclut pas de filtre passe-bas). 16 bits RECOMMANDÉ ; aucun tramage appliqué pour les 24 bits.
FLAC (.flac) uniquement
MP3
REQUIRED
Mono/Stéréo 8-320 kbit/s constant (CBR) ou débit variable (VBR)
MP3 (.mp3)
MIDI
REQUIRED
Types MIDI 0 et 1 Versions 1 et 2 de DLS XMF et Mobile XMF. Compatibilité avec les formats de sonnerie RTTTL/RTX, OTA et iMelody
Vorbis
REQUIRED
PCM/WAVE
OBLIGATOIRE4
(Android 4.1 ou version ultérieure)REQUIRED
PCM linéaire 16 bits (débits jusqu'à la limite du matériel). Les appareils DOIVENT prendre en charge les taux d'échantillonnage pour l'enregistrement PCM brut aux fréquences de 8 000, 11 025, 16 000 et 44 100 Hz.
WAVE (.wav)
Opus
OBLIGATOIRE
(Android 5.0 ou version ultérieure)
Matroska (.mkv)
5.1.2. Codecs d'image
Format/Codec
Encodeur
Décodeur
Détails
Types de fichiers/Formats de conteneurs compatibles
JPEG
REQUIRED
REQUIRED
Base+progressive
JPEG (.jpg)
GIF
REQUIRED
GIF (.gif)
PNG
REQUIRED
REQUIRED
PNG (.png)
BMP
REQUIRED
BMP (.bmp)
WebP
REQUIRED
REQUIRED
WebP (.webp)
5.1.3. Codecs vidéo
Format/Codec
Encodeur
Décodeur
Détails
Types de fichiers/Formats de conteneurs compatibles
H.263
OBLIGATOIRE1
OBLIGATOIRE2
H.264 AVC
OBLIGATOIRE2
OBLIGATOIRE2
Pour en savoir plus, consultez les sections 5.2 et 5.3.
H.265 HEVC
OBLIGATOIRE5
Pour en savoir plus, consultez la section 5.3.
MPEG-4 (.mp4)
MPEG-2
FORTEMENT RECOMMANDÉ6
Main Profile
MPEG2-TS
MPEG-4 SP
OBLIGATOIRE2
3GPP (.3gp)
VP83
OBLIGATOIRE2
(Android 4.3 ou version ultérieure)OBLIGATOIRE2
(Android 2.3.3 ou version ultérieure)Pour en savoir plus, consultez les sections 5.2 et 5.3.
VP9
OBLIGATOIRE2
(Android 4.4 ou version ultérieure)Pour en savoir plus, consultez la section 5.3.
5.2. Encodage vidéo
SD (basse qualité)
SD (haute qualité)
HD 720p1
HD 1080p1
Résolution vidéo
320 x 240 px
720 x 480 px
1 280 x 720 px
1 920 x 1 080 px
Fréquence d'images de la vidéo
20 fps
30 ips
30 ips
30 ips
Débit vidéo
384 kbit/s
2 Mbit/s
4 Mbit/s
10 Mbit/s
SD (basse qualité)
SD (haute qualité)
HD 720p1
HD 1080p1
Résolution vidéo
320 x 180 px
640 x 360 px
1 280 x 720 px
1 920 x 1 080 px
Fréquence d'images de la vidéo
30 ips
30 ips
30 ips
30 ips
Débit vidéo
800 Kbit/s
2 Mbit/s
4 Mbit/s
10 Mbit/s
5.3. Décodage vidéo
SD (basse qualité)
SD (haute qualité)
HD 720p1
HD 1080p1
Résolution vidéo
320 x 240 px
720 x 480 px
1 280 x 720 px
1 920 x 1 080 px
Fréquence d'images de la vidéo
30 ips
30 ips
60 FPS
30 FPS / 60 FPS2
Débit vidéo
800 Kbit/s
2 Mbit/s
8 Mbit/s
20 Mbit/s
SD (basse qualité)
SD (haute qualité)
HD 720p1
HD 1080p1
Résolution vidéo
320 x 180 px
640 x 360 px
1 280 x 720 px
1 920 x 1 080 px
Fréquence d'images de la vidéo
30 ips
30 ips
30 FPS / 60 FPS2
30 / 60 FPS2
Débit vidéo
800 Kbit/s
2 Mbit/s
8 Mbit/s
20 Mbit/s
SD (basse qualité)
SD (haute qualité)
HD 720p1
HD 1080p2
UHD2
Résolution vidéo
320 x 180 px
640 x 360 px
1 280 x 720 px
1 920 x 1 080 px
3 840 x 2 160 px
Fréquence d'images de la vidéo
30 ips
30 ips
30 ips
60 FPS
60 FPS
Débit vidéo
600 Kbits/s
1,6 Mbit/s
4 Mbit/s
5 Mbit/s
20 Mbit/s
SD (basse qualité)
SD (haute qualité)
HD 720p1
HD 1080p2
UHD2
Résolution vidéo
352 x 288 px
640 x 360 px
1 280 x 720 px
1 920 x 1 080 px
3 840 x 2 160 px
Fréquence d'images de la vidéo
30 ips
30 ips
30 ips
60 FPS2
60 FPS
Débit vidéo
600 Kbits/s
1,6 Mbit/s
4 Mbit/s
10 Mbit/s
20 Mbit/s
5.4. Enregistrement audio
5.4.1. Capture audio RAW
5.4.2. Enregistrer pour la reconnaissance vocale
5.4.3. Capture pour le redirignement de la lecture
5.5. Lecture audio
5.5.1. Lecture audio brute
5.5.2. Effets audio
5.5.3. Volume de sortie audio
5.6. Latence audio
5.7. Protocoles de réseau
5.8. Secure Media
5.9. MIDI (Musical Instrument Digital Interface)
5.10. Audio professionnel
6. Compatibilité des outils et options pour les développeurs
6.1. Outils pour les développeurs
6.2. Options pour les développeurs
7. Compatibilité matérielle
7.1. Écran et graphismes
7.1.1. Configuration de l'écran
7.1.1.1. Taille d'écran
7.1.1.2. Format d'écran
7.1.1.3. Densité d'écran
7.1.2. Métriques sur le Réseau Display
7.1.3. Orientation de l'écran
7.1.4. Accélération graphique 2D et 3D
7.1.5. Ancien mode de compatibilité des applications
7.1.6. Technologie d'affichage
7.1.7. Écrans secondaires
7.2. Périphériques d'entrée
7.2.1. Clavier
7.2.2. Navigation non tactile
7.2.3. Touches de navigation
7.2.4. Saisie par écran tactile
7.2.5. Saisie tactile fictive
7.2.6. Compatibilité avec les manettes de jeu
7.2.6.1. Mappages des boutons
Bouton
Utilisation de l'HID2
Bouton Android
A1
0x09 0x0001
KEYCODE_BUTTON_A (96)
B1
0x09 0x0002
KEYCODE_BUTTON_B (97)
X1
0x09 0x0004
KEYCODE_BUTTON_X (99)
Y1
0x09 0x0005
KEYCODE_BUTTON_Y (100)
Croix directionnelle vers le haut1
Croix directionnelle vers le bas10x01 0x00393
AXIS_HAT_Y4
Flèche vers la gauche du pavé directionnel 1
Flèche vers la droite du pavé directionnel10x01 0x00393
AXIS_HAT_X4
Bouton de l'épaule gauche1
0x09 0x0007
KEYCODE_BUTTON_L1 (102)
Bouton de l'épaule droite1
0x09 0x0008
KEYCODE_BUTTON_R1 (103)
Clic sur le stick gauche1
0x09 0x000E
KEYCODE_BUTTON_THUMBL (106)
Clic sur le stick droit1
0x09 0x000F
KEYCODE_BUTTON_THUMBR (107)
Accueil1
0x0c 0x0223
KEYCODE_HOME (3)
Retour1
0x0c 0x0224
KEYCODE_BACK (4)
Commandes analogiques1
Utilisation des périphériques HID
Bouton Android
Gauche
0x02 0x00C5
AXIS_LTRIGGER
Gauche
0x02 0x00C4
AXIS_RTRIGGER
Stick gauche
0x01 0x0030
0x01 0x0031AXIS_X
AXIS_Y
Stick droit
0x01 0x0032
0x01 0x0035AXIS_Z
AXIS_RZ7.2.7. Télécommande
7.3. Capteurs
7.3.1. Accéléromètre
7.3.2. Magnétomètre
7.3.3. GPS
7.3.4. Gyroscope
7.3.5. Le baromètre
7.3.6. Thermomètre
7.3.7. Photomètre
7.3.8. Capteur de proximité
7.3.9. Capteurs haute fidélité
android.hardware.sensor.hifi_sensors
.
7.3.10. Lecteur d'empreinte digitale
7.4. Connectivité des données
7.4.1. Téléphonie
7.4.2. IEEE 802.11 (Wi-Fi)
7.4.2.1. Wi-Fi Direct
7.4.2.2. Configuration du lien direct en tunnel Wi-Fi
7.4.3. Bluetooth
7.4.4. Communication en champ proche
7.4.5. Capacité réseau minimale
java.net.Socket
et java.net.URLConnection
, ainsi que des API natives, telles que les sockets AF_INET6
. Le niveau de compatibilité IPv6 requis dépend du type de réseau, comme suit:
7.4.6. Paramètres de synchronisation
7.5. Caméras
7.5.1. Caméra arrière
7.5.2. Caméra avant
7.5.3. Caméra externe
7.5.4. Comportement de l'API Camera
7.5.5. Orientation de l'appareil photo
7.6. Mémoire et stockage
7.6.1. Mémoire et stockage minimums
Densité et taille de l'écran
Appareil 32 bits
Appareil 64 bits
Appareils Android Watch (en raison des écrans plus petits)
416 Mo
Non applicable
424 Mo
704 Mo
512 Mo
832 Mo
896 Mo
1 280 Mo
1 344 Mo
1 824 Mo
7.6.2. Stockage partagé de l'application
URI
renvoyé en déclenchant l'intent ACTION_OPEN_DOCUMENT_TREE
.
7.6.3. Stockage adoptable
7.7. USB
iInterface
de la description de l'interface du stockage de masse USB.
7.8. Audio
7.8.1. Micro
7.8.2. Sortie audio
7.8.2.1. Ports audio analogiques
7.8.3. Ultrasons proches
8. Performances et puissance
8.1. Cohérence de l'expérience utilisateur
8.2. Performances d'accès aux E/S de fichiers
8.3. Modes d'économie d'énergie
8.4. Comptabilisation de la consommation d'énergie
uid_cputime
.adb shell dumpsys
batterystats
[Resources, 124].9. Compatibilité des modèles de sécurité
9.1. Autorisations
9.2. UID et isolation des processus
9.3. Autorisations du système de fichiers
9.4. Environnements d'exécution alternatifs
9.5. Compatibilité multi-utilisateur
9.6. Avertissement concernant les SMS premium
9.7. Fonctionnalités de sécurité du noyau
9.8. Confidentialité
9.9. Chiffrement complet de disque
true
" pour KeyguardManager.isDeviceSecure() [Ressources, 131] et qu'il ne s'agit pas d'un appareil dont la mémoire est limitée, comme indiqué par la méthode ActivityManager.isLowRamDevice(), l'appareil DOIT prendre en charge le chiffrement de disque complet [Ressources, 132] des données privées de l'application (partition /data), ainsi que la partition de stockage partagé de l'application (partition /sdcard) s'il s'agit d'une partie permanente et non amovible de l'appareil.9.10. démarrage validé
9.11. Clés et identifiants
9.12. Suppression des données
10. Tests de compatibilité des logiciels
10.1. Compatibility Test Suite
10.2. Validateur CTS
11. Logiciels pouvant être mis à jour
12. Journal des modifications du document
Section
Résumé des modifications
Divers
Occurrences du terme "recommandé" remplacées par "RECOMMANDÉ"
2. Types d'appareils
Mise à jour pour les implémentations Android Automotive
3.2.2. Paramètres de compilation
Ajouts pour le numéro de série du matériel et le niveau du correctif de sécurité d'un build
3.2.3.2. Résolution des intents
La section "Forcer un intent" a été rebaptisée "Résolution d'intent", avec de nouvelles exigences concernant l'association d'applications par défaut faisant autorité.
3.3.1. Interfaces binaires d'application
Ajouts pour la prise en charge de l'ABI Android ; modification liée au nom de la bibliothèque Vulkan
3.4.1. Compatibilité avec WebView
Modification de la chaîne user-agent signalée par la WebView
3.7. Compatibilité avec l'environnement d'exécution
Modifications apportées au tableau d'allocation de mémoire
3.8.4. Recherche
Informations sur les exigences concernant l'Assistant
3.8.6. Thèmes
Ajout de l'obligation de prendre en charge les icônes système noires lorsque le drapeau SYSTEM_UI_FLAG_LIGHT_STATUS_BAR est demandé
3.8.8. Changement d'activité
Assouplissement des exigences concernant le nombre de titres dans la vue d'ensemble
3.8.10. Contrôle des contenus multimédias sur l'écran de verrouillage
Contrôle multimédia de l'écran de verrouillage pour en savoir plus sur la section 3.8.3.
3.9.1. Provisionnement de l'appareil
Contient de nouvelles sections pour le provisionnement du propriétaire de l'appareil et le provisionnement du profil géré
3.9.2. Assistance pour les profils gérés
Nouvelle section avec les exigences concernant la prise en charge de la fonctionnalité de profil géré par les appareils
3.12.1. Application TV
Ajout d'une section pour clarifier les exigences concernant les applications TV pour les appareils Android TV
3.12.1.1. Guide des programmes électroniques
Ajout d'une section pour clarifier les exigences concernant l'EPG pour les appareils Android TV
3.12.1.2. Navigation
Ajout d'une section pour clarifier les exigences de navigation dans les applications TV pour les appareils Android TV
3.12.1.3. Association d'applications à une entrée TV
Ajout d'une section pour clarifier les exigences concernant la prise en charge de l'association d'applications d'entrée TV pour les appareils Android TV
5.1. Codecs multimédias
Informations sur la prise en charge des formats multimédias principaux et du décodage.
5.1.3. Codecs vidéo
Modifications et ajouts concernant les téléviseurs Android
5.2. Encodage vidéo
Modifications pour les encodeurs
5.3. Décodage vidéo
Modifications apportées aux décodeurs, y compris concernant la compatibilité avec la résolution vidéo dynamique, le changement de fréquence d'images, etc.
5.4. Enregistrement audio
Ajouts liés à la capture audio
5.6. Latence audio
Mise à jour concernant les rapports sur la prise en charge de l'audio à faible latence
5.10. Audio professionnel
Mises à jour générales pour la prise en charge de l'audio professionnel, mises à jour des spécifications des appareils mobiles (connecteur), du mode hôte audio USB et autres mises à jour
5.9. MIDI (Musical Instrument Digital Interface)
Ajout d'une section sur la compatibilité facultative avec l'interface MIDI (Musical Instrument Digital Interface)
6.1. Outils pour les développeurs
Mise à jour des pilotes compatibles avec Windows 10
7.1.1.3. Densité d'écran
Mises à jour de la densité d'écran, par exemple en lien avec une montre Android
7.2.3. Touches de navigation
Mise à jour des exigences pour les implémentations d'appareils incluant l'action d'assistance
7.3. Capteurs (et sous-sections)
Nouvelles exigences pour certains types de capteurs
7.3.9. Capteurs haute fidélité
Nouvelle section avec les exigences concernant les appareils compatibles avec les capteurs haute fidélité
7.3.10. Lecteur d'empreinte digitale
Nouvelle section sur les exigences liées aux lecteurs d'empreinte digitale
7.4.2. IEEE 802.11 (Wi-Fi)
Informations sur la prise en charge du multicast DNS (mDNS)
7.4.3. Bluetooth
Ajout concernant l'adresse privée résoluble (RPA) pour le Bluetooth Low Energy (BLE)
7.4.4. Communication en champ proche
Ajouts aux exigences concernant la technologie NFC (communication en champ proche)
7.4.5. Capacité réseau minimale
Ajout de conditions requises pour la compatibilité avec IPv6
7.6.3. Stockage adoptable
Nouvelle section pour l'implémentation du stockage adoptable
7.7. USB
Exigences liées à la mise en œuvre de la spécification AOA
7.8.3. Ultrasons proches
Ajouts liés à l'enregistrement, à la lecture et à l'audio en ultrason
Assouplissement des exigences concernant le rapport signal/bruit du micro à ultrasons
8.3. Modes d'économie d'énergie
Nouvelle section contenant les exigences concernant les modes Mise en veille des applications et Sommeil
8.4. Comptabilisation de la consommation d'énergie
Nouvelle section contenant les exigences concernant le suivi de la consommation d'énergie des composants matériels et l'attribution de cette consommation à des applications spécifiques
9.1. Autorisations
Ajout aux conditions d'autorisation
9.7. Fonctionnalités de sécurité du noyau
Mises à jour de SE Linux
9.8. Confidentialité
Ajout concernant le consentement de l'utilisateur pour accéder au stockage partagé via un port USB
9.9. Chiffrement complet de disque
Exigences concernant le chiffrement de disque
9.10. démarrage validé
Exigence supplémentaire pour le démarrage validé
9.11. Clés et identifiants
Nouvelle section d'exigences concernant les clés et les identifiants
9.12. Suppression des données
Nouvelle section pour "Rétablir la configuration d'usine"
11. Logiciels pouvant être mis à jour
Exigence liée à la règle de mise à jour du système définie par le propriétaire de l'appareil
13. Nous contacter
14. Ressources