Bons amis du soir. Nous avons préparé une traduction utile pour les futurs étudiants du développeur Android. Cours avancé . " Nous sommes heureux de partager ce matériel avec vous.
Si vous lisez cet article, cela signifie que vous pourriez être intéressé par des choses telles que:
- Que signifie le niveau API?
- Comment utiliser
compileSdkVersion
, minSdkVersion
ou targetSdkVersion
? - Comment puis-je garantir que l'application fonctionnera correctement sur les appareils avec différentes versions du système d'exploitation?

Tous ces concepts sont liés les uns aux autres, et je vais essayer de vous les expliquer dans cet article d'une manière simple mais efficace.
Pour ce faire, vous devez comprendre la différence entre le
SDK et l'
API et connaître
le niveau d'API dans l'écosystème Android.
Il est vrai que dans Android, il existe une relation 1: 1 entre le SDK et l'API, et souvent ces deux termes sont utilisés comme synonymes, mais il est important de comprendre que ce n'est pas la même chose.
Il est plus correct de dire que pour chaque version d'Android, il existe un SDK et une API équivalente, ainsi que le niveau de cette API.
SDK
Il signifie
Kit de développement logiciel . Faites attention au mot "kit" (kit) ... il se compose simplement d'un ensemble de divers outils, bibliothèques, documentation, exemples qui aident les développeurs à créer, déboguer et exécuter des applications Android. Une API est fournie avec le SDK.
Si vous ouvrez le
SDK Manager dans Android Studio, vous pouvez voir plus clairement en quoi consiste le SDK Android.
Le premier onglet du
Platform SDK répertorie les SDK de chaque version d'Android.
Comme le montre l'image ci-dessous, le SDK Android 9.0 (également connu sous le nom de Pie) contient:
- Android SDK Platform 28 (il s'agit de l'API du framework).
- Le code source pour Android 28 (c'est une implémentation de l' API, comme vous pouvez le voir, il est facultatif ... rappelez-vous cela).
- et un tas d'autres choses ... par exemple, diverses images système pour l'émulateur Android.
Présentation du SDK dans le gestionnaire de SDK Android Studio.Le deuxième onglet des
outils du
SDK affiche d'autres outils qui font également partie du SDK mais sont indépendants de la version de la plateforme. Cela signifie qu'ils peuvent être publiés ou mis à jour séparément.
API
Il signifie
Interface de programmation d'application . Ce n'est qu'une interface, une couche d'abstraction qui fournit un lien entre deux «parties» différentes du logiciel. Il fonctionne comme un contrat entre un fournisseur (par exemple, une bibliothèque) et un consommateur (par exemple, une application).
Il s'agit d'un ensemble de définitions formelles, telles que les classes, méthodes, fonctions, modules, constantes, qui peuvent être utilisées par d'autres développeurs pour écrire leur code. Cependant, l'API n'inclut pas d'implémentation.
Niveau API
Le niveau d'API est une valeur entière qui identifie de manière unique la version de l'API de framework offerte par la plateforme Android.
En règle générale, les mises à jour de l'API du framework de plateforme sont conçues de manière à ce que la nouvelle version de l'API reste compatible avec les versions antérieures, de sorte que la plupart des modifications apportées à la nouvelle API sont additives et que les anciennes parties de l'API deviennent obsolètes mais ne sont pas supprimées.
Et maintenant, quelqu'un peut se demander ...
si l'API Android ne fournit pas d'implémentation et que le
SDK Manager propose un code source d'API téléchargeable en option dans le cadre du SDK, alors où est l'implémentation correspondante?
La réponse est simple.
Sur l'appareil.Voyons ça ...
Du code source au fichier APK
En règle générale, un projet Android se compose de code écrit par des développeurs utilisant l'API Android (module d'application), ainsi que d'autres bibliothèques / dépendances (fichiers .jar, AAR, modules, etc.) et de ressources.
Le processus de compilation convertit le code écrit en Java ou Kotlin, y compris les dépendances (l'une des raisons de réduire votre code!), En bytecode en DEX, puis compresse tout dans un fichier APK avec les ressources. À ce stade, l'implémentation de l'API n'est pas incluse dans l'APK final!
Processus de construction - Développeurs AndroidFichiers DEX et Android Runtime
Architecture Android - Développeurs AndroidAndroid Runtime est l'endroit où tout le sale travail est effectué et où les fichiers DEX sont exécutés. Il se compose de deux éléments principaux:
- Une machine virtuelle pour profiter de la portabilité du code et de l'indépendance de la plateforme. À partir d'Android 5.0 (Lollipop), l'ancien runtime, Dalvik Virtual Machine, a été complètement remplacé par le nouveau Android RunTime (ART). Dalvik a utilisé le compilateur JIT, tandis que ART utilise la compilation AOT (Ahead of time) plus JIT pour profiler le code lors de l'exécution.
- Les bibliothèques de base sont des bibliothèques Java et Android standard. Autrement dit, c'est là que se trouve l'implémentation de l'API.
La version de l'API disponible à ce niveau correspond à la version de la plateforme Android sur laquelle s'exécute l'application.
Par exemple, si Android 9 (Pie) est installé sur l'appareil réel, toutes les API jusqu'au niveau 28 sont disponibles.
Si vous comprenez les points clés d'Android Runtime et quel est le rôle de l'API, il devrait être facile de comprendre la
compatibilité ascendante et descendante , ainsi que l'utilisation de
compileSdkVersion
,
minSdkVersion
et
targetSdkVersion
.
compileSdkVersion
Cette valeur est uniquement utilisée pour
indiquer à Gradle la version du SDK avec laquelle compiler votre application. Cela permet aux développeurs d'accéder à toutes les API disponibles jusqu'au niveau de l'API défini pour
compileSdkVersion
.
La compilation avec le dernier SDK est fortement recommandée:- Un niveau élevé d'API permet aux développeurs de profiter de la dernière API et des opportunités offertes par les nouvelles plateformes.
- Pour utiliser la dernière version de
SupportLibrary
, compileSdkVersion
doit correspondre à la version de SupportLibrary
.
Par exemple, pour utiliser
SupportLibrary-28.xx
,
compileSdkVersion
doit également être 28.
- Pour basculer vers AndroidX ou l'utiliser, compileSdkVersion doit être défini sur au moins 28.
- pour être prêt à répondre aux exigences du niveau d'API cible de Google Play . Google a annoncé qu'il établirait chaque année un niveau cible d'API minimum pour les nouvelles applications et mises à jour afin de diffuser plus rapidement les nouvelles versions d'Android sur le marché de Google. Vous pouvez trouver plus d'informations ici et ici .
Les applications Android sont compatibles avec les nouvelles versions de la plate-forme Android, car les modifications apportées à l'API sont généralement additives, et l'ancienne API peut devenir obsolète, mais pas supprimée.
Cela signifie que
la compatibilité directe est principalement garantie par la plate-forme, et lorsque vous exécutez l'application sur un appareil avec un niveau d'API plus élevé que celui spécifié dans
compileSdkVersion
, il n'y a aucun problème au moment de l'exécution, l'application fonctionnera comme prévu sur versions plus récentes de la plateforme.
Par exemple:
L'application +
compileSdkVersion =
26 et la méthode API
xyz()
introduites dans l'
API niveau 26 peuvent fonctionner sur un appareil avec Android 8 Oreo (API niveau 26).
La même application peut fonctionner sur un appareil avec Android 9 Pie (API niveau 28), car la méthode API
xyz()
est toujours disponible au niveau API 28.
minSdkVersion
Cette valeur indique le niveau d'API minimum auquel l'application peut s'exécuter.
Il s'agit d'une exigence minimale. S'il n'est pas spécifié, la valeur par défaut est 1 .
Les développeurs doivent définir la valeur correcte et garantir le bon fonctionnement de l'application jusqu'à ce niveau d'API. C'est ce qu'on appelle la
compatibilité descendante .
Pendant le développement,
Lint
avertira également les développeurs lorsqu'ils essaient d'utiliser une API inférieure à celle spécifiée dans
minSdkVersion
.
Il est très important de ne pas ignorer les avertissements et de les corriger!Pour garantir la
compatibilité descendante , les développeurs peuvent vérifier la version de la plate-forme au moment de l'exécution et utiliser la nouvelle API dans les versions plus récentes de la plate-forme et l'ancienne API dans les anciennes versions ou, selon le cas, utiliser certaines bibliothèques statiques qui offrent une compatibilité descendante.
Il est également important de mentionner que le Google Play Store utilise cette valeur pour déterminer si l'application peut être installée sur un appareil spécifique en comparant la version de la plate-forme de l'appareil avec l'application
minSdkVersion
.
Les développeurs doivent être très prudents lors du choix de cette valeur, car la compatibilité descendante n'est pas garantie par la plate-forme.
Choisir la «bonne» valeur pour un projet est également une décision commerciale, car elle affecte la taille de l'audience de l'application. Regardez la
distribution des plateformes .
Par exemple:
L'application +
compileSdkVersion =
26 +
minSdkVersion
=
22 et la méthode API
xyz()
introduite dans l'API niveau 26 peuvent fonctionner sur un appareil avec Android 8 Oreo (API niveau 26).
La même application peut être installée et exécutée sur un appareil plus ancien avec Android 5.1 Lollipop (API niveau 22), où la méthode API
xyz()
n'existe pas. Si les développeurs n'ont pas fourni de compatibilité descendante via des vérifications d'exécution ou via des bibliothèques, l'application se bloque dès qu'elle essaie d'accéder à la méthode API
xyz()
.
targetSdkVersion
Cette valeur indique le niveau d'API auquel l'application a été développée.
Ne le confondez pas avec
compileSdkVersion
. Ce dernier n'est utilisé qu'au moment de la compilation et met de nouvelles API à la disposition des développeurs. Le premier, en revanche, fait partie de l'APK (ainsi que
minSdkVersion
) et modifie le comportement du runtime. C'est ainsi que les développeurs peuvent contrôler
la compatibilité directe .
Parfois, il peut y avoir des changements d'API dans le système de base qui peuvent affecter le comportement de l'application lorsque vous travaillez dans un nouvel environnement d'exécution.
Le niveau d'application cible inclut un comportement d'exécution spécifique à la version de la plateforme. Si l'application n'est pas prête à prendre en charge ces modifications du comportement d'exécution, il est probable qu'elle échoue.
Un exemple simple est la
Runtime Permission , qui a été introduite dans Android 6 Marshmallow (API niveau 23).
Une application peut être compilée à l'aide d'une API de niveau 23, mais avoir une API de niveau 22 cible si elle n'est pas encore prête à prendre en charge le nouveau modèle d'autorisation d'exécution.
Ainsi, une application peut toujours être compatible sans inclure de nouveau comportement d'exécution.
Dans tous les cas, comme déjà mentionné, Google exige que les applications répondent aux nouvelles exigences du niveau API cible, vous devez donc toujours avoir une priorité élevée pour mettre à jour cette valeur.
Maintenant, tout cela ensemble, nous voyons une relation claire
minSdkVersion ≤ targetSdkVersion ≤ compileSdkVersion
Gardez à l'esprit qu'il est fortement recommandé de compiler avec le dernier niveau d'API et d'essayer d'utiliser
targetSdkVersion ==
compileSdkVersion .
Les sources