Présentation de la compatibilité des appareils

Android est conçu pour s'exécuter sur de nombreux appareils différents, tels que les téléphones, les tablettes et les téléviseurs. La gamme d'appareils offre une énorme audience potentielle pour votre application. Pour que votre application soit performante sur tous les appareils, elle doit tolérer la variabilité des fonctionnalités et fournir une interface utilisateur flexible qui s'adapte à différentes configurations d'écran.

Pour faciliter la compatibilité des appareils, Android fournit un framework d'application dynamique dans lequel vous pouvez fournir des ressources d'application spécifiques à la configuration dans des fichiers statiques, telles que différentes mises en page XML pour différentes tailles d'écran. Android charge ensuite les ressources appropriées en fonction de la configuration actuelle de l'appareil. En réfléchissant à la conception de votre application et en disposant de ressources supplémentaires, vous pouvez publier un seul package d'application (APK) qui optimise l'expérience utilisateur sur divers appareils.

Toutefois, si nécessaire, vous pouvez spécifier les fonctionnalités requises de votre application et contrôler les types d'appareils autorisés à l'installer à partir du Google Play Store. Ce document explique comment contrôler les appareils qui ont accès à vos applications et comment les préparer pour toucher la bonne audience.

Que signifie "compatibilité" ?

En ce qui concerne le développement Android, il existe deux types de compatibilité : la compatibilité des appareils et la compatibilité des applications.

Android étant un projet Open Source, n'importe quel fabricant de matériel peut créer un appareil exécutant le système d'exploitation Android. Toutefois, un appareil n'est "compatible avec Android" que s'il peut exécuter correctement des applications écrites pour l'environnement d'exécution Android. Les détails exacts de l'environnement d'exécution Android sont définis par le programme de compatibilité Android. Chaque appareil doit passer avec succès la suite de tests de compatibilité (CTS, Compatibility Test Suite) pour être considéré comme compatible.

En tant que développeur d'applications, vous n'avez pas à vous soucier de la compatibilité d'un appareil avec Android, car seuls les appareils compatibles avec Android incluent le Google Play Store. Par conséquent, si un utilisateur installe votre application à partir du Google Play Store, il utilise un appareil compatible avec Android.

Toutefois, vous devez déterminer si votre application est compatible avec chaque configuration d'appareil potentielle. Étant donné qu'Android s'exécute sur un large éventail de configurations d'appareil, certaines fonctionnalités ne sont pas disponibles sur tous les appareils. Par exemple, certains appareils peuvent ne pas inclure de capteur de boussole. Si la fonctionnalité de base de votre application nécessite une boussole, elle n'est compatible qu'avec les appareils qui intègrent cette fonctionnalité.

Contrôler la disponibilité de votre application sur les appareils

Android est compatible avec diverses fonctionnalités que votre application peut exploiter via des API de plate-forme. Certaines fonctionnalités sont basées sur le matériel, comme un capteur de boussole, d'autres sont basées sur un logiciel, comme les widgets d'application. D'autres dépendent de la version de la plate-forme. Tous les appareils ne sont pas compatibles avec toutes les fonctionnalités. Vous devrez donc peut-être contrôler la disponibilité de votre application sur les appareils en fonction des fonctionnalités requises par votre application.

Pour toucher la plus grande base d'utilisateurs possible de votre application, prenez en charge un maximum de configurations d'appareil à l'aide d'un seul fichier APK ou AAB. Dans la plupart des cas, vous pouvez le faire en désactivant les fonctionnalités facultatives au moment de l'exécution et en fournissant des ressources d'application avec des alternatives pour différentes configurations, telles que des mises en page différentes pour différentes tailles d'écran. Si nécessaire, vous pouvez limiter la disponibilité de votre application à certains appareils via le Google Play Store en fonction des caractéristiques d'appareil suivantes:

Fonctionnalités de l'appareil

Pour gérer la disponibilité de votre application en fonction des fonctionnalités de l'appareil, Android définit des ID de fonctionnalité pour toutes les fonctionnalités matérielles ou logicielles susceptibles de ne pas être disponibles sur tous les appareils. Par exemple, l'ID de fonctionnalité du capteur de boussole est FEATURE_SENSOR_COMPASS, et l'ID de fonctionnalité des widgets d'application est FEATURE_APP_WIDGETS.

Si nécessaire, vous pouvez empêcher les utilisateurs d'installer votre application lorsque leurs appareils ne fournissent pas une fonctionnalité nécessaire en déclarant la fonctionnalité à l'aide d'un élément <uses-feature> dans le fichier manifeste de votre application.

Par exemple, si votre application n'a aucun sens sur un appareil dépourvu de capteur de boussole, vous pouvez déclarer le capteur de boussole comme obligatoire avec la balise de fichier manifeste suivante:

<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>

Le Google Play Store compare les fonctionnalités dont votre application a besoin à celles disponibles sur l'appareil de chaque utilisateur pour déterminer si elle est compatible avec chaque appareil. Si l'appareil ne dispose pas de toutes les fonctionnalités requises par votre application, l'utilisateur ne peut pas l'installer.

Toutefois, si la fonctionnalité principale de votre application n'a pas besoin d'une fonctionnalité d'appareil, définissez l'attribut required sur "false" et recherchez la fonctionnalité de l'appareil au moment de l'exécution. Si la fonctionnalité de l'application n'est pas disponible sur l'appareil actuel, effectuez une dégradation élégante de la fonctionnalité correspondante. Par exemple, vous pouvez demander si une fonctionnalité est disponible en appelant hasSystemFeature() comme suit:

Kotlin

if (!packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device doesn't have a compass. Turn off the compass feature.
    disableCompassFeature()
}

Java

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device doesn't have a compass. Turn off the compass feature.
    disableCompassFeature();
}

Pour en savoir plus sur tous les filtres que vous pouvez utiliser pour contrôler la disponibilité de votre application via le Google Play Store, consultez la documentation Filtres sur Google Play.

Version de la plate-forme

Chaque appareil peut exécuter différentes versions de la plate-forme Android, comme Android 12 ou Android 13. Souvent, chaque version de plate-forme successive ajoute des API non disponibles dans la version précédente. Pour indiquer quel ensemble d'API est disponible, chaque version de la plate-forme spécifie un niveau d'API. Par exemple, Android 12 correspond au niveau d'API 31, et Android 13 au niveau d'API 33.

Vous devez spécifier les valeurs minSdkVersion et targetSdkVersion dans le fichier build.gradle:

Kotlin

android {
    defaultConfig {
        applicationId = "com.example.myapp"

        // Defines the minimum API level required to run the app.
        minSdkVersion(30)

        // Specifies the API level used to test the app.
        targetSdkVersion(33)
        ...
    }
}

Groovy

android {
    defaultConfig {
        applicationId 'com.example.myapp'

        // Defines the minimum API level required to run the app.
        minSdkVersion 30

        // Specifies the API level used to test the app.
        targetSdkVersion 33
        ...
    }
}

Pour en savoir plus sur le fichier build.gradle, consultez Configurer votre build.

Chaque version successive d'Android est compatible avec les applications créées à l'aide des API des versions précédentes de la plate-forme. Votre application sera ainsi compatible avec les futures versions d'Android tout en utilisant les API Android documentées.

Toutefois, si votre application utilise des API ajoutées dans une version plus récente de la plate-forme, mais n'en a pas besoin pour sa fonctionnalité principale, vérifiez le niveau d'API au moment de l'exécution et effectuez une dégradation élégante des fonctionnalités correspondantes lorsque le niveau d'API est trop bas. Dans ce cas, définissez minSdkVersion sur la valeur la plus basse possible pour la fonctionnalité principale de votre application, puis comparez la version actuelle du système, SDK_INT, à la constante du nom de code dans Build.VERSION_CODES qui correspond au niveau d'API que vous souhaitez vérifier, comme illustré dans l'exemple suivant:

Kotlin

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag and drop features that use ClipboardManager APIs.
    disableDragAndDrop()
}

Java

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag and drop features that use ClipboardManager APIs.
    disableDragAndDrop();
}

Configuration de l'écran

Android fonctionne sur des appareils de différentes tailles tels que des téléphones, des tablettes et des téléviseurs. Pour catégoriser les appareils par type d'écran, Android définit deux caractéristiques pour chaque appareil: la taille de l'écran (la taille physique de l'écran) et la densité de l'écran (la densité physique des pixels à l'écran, appelée PPP). Pour simplifier les différentes configurations, Android généralise ces variantes en groupes qui les rendent plus faciles à cibler:

  • Quatre tailles généralisées: petite, normale, grande et très grande
  • Plusieurs densités généralisées: mdpi (moyen), hdpi (élevé), xhdpi (très élevé), xxhdpi (très très élevé), etc.

Par défaut, votre application est compatible avec toutes les tailles et densités d'écran, car le système ajuste la mise en page de l'interface utilisateur et les ressources d'image si nécessaire pour chaque écran. Fournissez des images bitmap optimisées pour les densités d'écran courantes.

Optimisez l'expérience utilisateur en utilisant autant que possible des mises en page flexibles. Lorsqu'il existe des mises en page pour des changements de configuration importants (portrait et paysage) ou des fenêtres de grande ou petite taille, envisagez de proposer d'autres mises en page flexibles en cas de plus petites modifications de la configuration. Cela améliore l'expérience utilisateur sur les facteurs de forme tels que les tablettes, les téléphones et les pliables. Cela peut également être utile lorsque les fenêtres changent de taille en mode multifenêtre.

Pour savoir comment créer d'autres ressources pour différents écrans et limiter votre application à certaines tailles d'écran si nécessaire, consultez la présentation de la compatibilité des écrans et les consignes relatives à la qualité des applications sur grand écran.

Contrôler la disponibilité de votre application pour des raisons professionnelles

En plus de restreindre la disponibilité de votre application en fonction des caractéristiques de l'appareil, vous devrez peut-être également restreindre la disponibilité de votre application pour des raisons commerciales ou légales. Dans ce type de situation, le Google Play Store propose des options de filtrage dans la Play Console qui vous permettent de contrôler la disponibilité de votre application pour des raisons non techniques, telles que les paramètres régionaux de l'utilisateur ou l'opérateur sans fil.

Le filtrage en fonction de la compatibilité technique, comme les composants matériels requis, est toujours basé sur les informations contenues dans votre fichier APK ou AAB. Toutefois, le filtrage pour des raisons non techniques, telles que les paramètres régionaux géographiques, est toujours géré dans la Google Play Console.

Autres ressources :

Présentation des ressources de l'application
Informations sur la structure des applications Android afin de séparer les ressources de l'application du code de l'application, y compris la manière dont vous pouvez fournir d'autres ressources pour des configurations d'appareil spécifiques.
Filtres sur Google Play
Informations sur les différentes manières dont le Google Play Store peut empêcher l'installation de votre application sur différents appareils.
Autorisations sur Android
Comment Android limite l'accès des applications à certaines API avec un système d'autorisations nécessitant le consentement de l'utilisateur pour que votre application utilise ces API.