Quelle est la différence entre la version minimale du SDK / la version cible du SDK et la version compilée du SDK?

214

Quelles sont les différences entre «version min sdk / version sdk cible» et «compiler la version sdk»? Je sais ce que signifie min et target sdk, mais que signifie compiler sdk version?

Dans Eclipse, j'ai min / max et sdk cible, mais dans Android Studio, il y a ces trois paramètres.

Tobias
la source
Je travaille actuellement sur une application où j'ai utilisé targetdkversion comme 12 et toutes mes mises en page fonctionnent très anormalement, puis je le remets à 23 et cela fonctionne comme un charme donc je pense que la version de targetdk doit être toujours la même que la version compilée
Shahid Sarwar

Réponses:

232

La version min sdk est la première version du SDK Android sur laquelle votre application peut s'exécuter. Habituellement, cela est dû à un problème avec les API antérieures, à un manque de fonctionnalités ou à un autre problème de comportement.

La version cible sdk est la version de votre application a été ciblée pour fonctionner. Idéalement, cela est dû à une sorte de conditions de fonctionnement optimales. Si vous deviez "créer votre application pour la version 19", c'est là que cela serait spécifié. Il peut fonctionner sur des versions antérieures ou ultérieures, mais c'est ce que vous visiez. Il s'agit principalement d'indiquer le niveau actuel de votre application pour une utilisation sur le marché, etc.

La version compile sdk est la version d'Android que votre IDE (ou tout autre moyen de compilation je suppose) utilise pour créer votre application lorsque vous publiez un .apkfichier. Ceci est utile pour tester votre application car il est courant de compiler votre application au fur et à mesure que vous la développez. Comme ce sera la version à compiler en APK, ce sera naturellement la version de votre version. De même, il est conseillé que cela corresponde à votre version sdk cible.

Mat
la source
Ma version sdk de compilation et la version sdk cible sont les mêmes. C'est 21. Mon application se bloque lorsque je l'exécute sur des appareils avec un niveau d'API inférieur. Je suis nouveau sur Android, comment dois-je procéder maintenant?
prgmrDev
2
@prgmrDev Si votre application se bloque sur des versions inférieures à 21, vous devez probablement définir votre version minimale du SDK sur 21. Cela ne fixera pas réellement votre application sur des cibles inférieures à 21, il remarquera simplement que votre application n'est pas prise en charge sur les versions inférieures. Vous avez également la possibilité de déterminer ce qui casse exactement votre application (ce qui a changé dans la version 21) et d'ajouter un support pour prendre en charge cette dépendance, mais je pense que cela demandera beaucoup de travail et ne sera pas à la portée d'un débutant Android projet.
Matt
1
Que se passe-t-il si je mets mon minSdkVersion = 14; targetSdkVersion = 23; et compiler le SDK à 19?
thadeuszlay
5
@thadeuszlay votre question est hors de propos car vous devriez penser un peu que si vous visez à exécuter sur la version 23 alors comment est-il possible de la compiler avec 19! S'il vous plaît suivre la formule minSdkVersion <= targetSdkVersion <= compileSdkVersion
Asad
@Matt peut-il arriver que lorsque j'utilise compileVersion 26 par exemple, j'utilise accidentellement une fonctionnalité ou une API java qui n'est pas prise en charge sur la version 21, qui est min sdk? désolé, pas vraiment obtenir quelques concepts fondamentaux ici
haart
83

La formule est

minSdkVersion <= targetSdkVersion <= compileSdkVersion

minSdkVersion - est un marqueur qui définit une version minimale d'Android sur laquelle l'application pourra être installée. Il est également utilisé par Lint pour empêcher l'appel d'API qui n'existe pas. Cela a également un impact sur le temps de construction. Vous pouvez donc utiliser des versions de génération pour remplacer minSdkVersion au maximum pendant le développement. Cela aidera à accélérer la construction en utilisant toutes les améliorations que l'équipe Android nous propose. Par exemple, certaines fonctionnalités Java 8 sont disponibles uniquement à partir d'une version spécifique de minSdkVersion.

targetSdkVersion - indique que le système Android doit activer des changements de comportement spécifiques.

Par exemple:

  • À partir d'Android 6.0 (API niveau 23) Runtime Permissionsont été introduits. Si vous définissez targetSdkVersionsur 22 ou inférieur, votre application ne demande pas à un utilisateur une autorisation pendant l'exécution.

  • À partir d'Android 8.0 (API niveau 26), tous notificationsdoivent être attribués à un canal ou il n'apparaîtra pas. Sur les appareils exécutant Android 7.1 (API niveau 25) et inférieur, les utilisateurs peuvent gérer les notifications par application uniquement (en fait, chaque application ne dispose que d'un canal sur Android 7.1 et inférieur).

  • À partir d'Android 9 (API niveau 28) Web-based data directories separated by process,. Si targetSdkVersionest 28+ et que vous en créez plusieurs WebViewdans différents processus, vous obtiendrezjava.lang.RuntimeException

compileSdkVersion - en fait, c'est la version de la plate-forme SDK et indique à Gradle quel SDK Android utiliser pour compiler. Lorsque vous souhaitez utiliser de nouvelles fonctionnalités ou déboguer des .javafichiers à partir du SDK Android, vous devez prendre soin de compileSdkVersion. Un autre exemple est l'utilisation d' AndroidX qui oblige à utiliser compileSdkVersion- le niveau 28. compileSdkVersion n'est pas inclus dans votre APK : il est purement utilisé à compile time. La modification de votre compileSdkVersion ne modifie pas le comportement d'exécution. Il peut générer par exemple de nouveaux avertissements / erreurs du compilateur. Par conséquent, il est fortement recommandé de toujours compiler avec le dernier SDK. Vous bénéficierez de tous les avantages des nouvelles vérifications de compilation sur le code existant, éviterez les nouvelles API obsolètes et serez prêt à utiliser de nouvelles API. Un autre fait estcompileSdkVersion >= Support Library version

Vous pouvez en savoir plus ici . Je vous recommande également de jeter un œil à l'exemple de la migration vers Android 8.0.

yoAlex5
la source
9
Meilleure réponse ici car elle explique en fait la différence pratique entre targetSdkVersion et compileSdkVersion
Dean Wild
@ yoAlex5 Merci pour votre réponse. Je vois de nombreux cas targetSdkVersion et compileSdkVersion sont les mêmes. Pourquoi Android en a fait deux en tant que séparé ne peut-il pas être suffisant pour gérer ou y a-t-il une raison spécifique derrière la création de deux champs séparés?
Manju
@Manju vous pouvez en trouver plus dans le thread SO stackoverflow.com/questions/26694108/…
yoAlex5
@ yoAlex5 ce que vous voulez dire par «système Android pour activer des changements de comportement spécifiques», pouvez-vous expliquer?
k_kumar
@atishr 'changements de comportement spécifiques' sont répertoriés dans le bloc 'Par exemple'
yoAlex5
74

La version min sdk est la version minimale du système d'exploitation Android requise pour exécuter votre application.

La version SDK cible est la version d'Android sur laquelle votre application a été créée pour fonctionner.

La version de compilation de sdk est la version d'Android que les outils de génération utilisent pour compiler et générer l'application afin de publier, exécuter ou déboguer.

Habituellement, la version de compilation sdk et la version cible de sdk sont les mêmes.

anuraagie
la source
23
Et quand ce ne sont pas les mêmes avantages / inconvénients?
powder366
4

compileSdkVersion : la compileSdkVersion est la version de l'API avec laquelle l'application est compilée. Cela signifie que vous pouvez utiliser les fonctionnalités d'API Android incluses dans cette version de l'API (ainsi que toutes les versions précédentes, évidemment). Si vous essayez d'utiliser les fonctionnalités de l'API 16 mais définissez compileSdkVersion sur 15, vous obtiendrez une erreur de compilation. Si vous définissez compileSdkVersion sur 16, vous pouvez toujours exécuter l'application sur un appareil API 15.

minSdkVersion : La version min sdk est la version minimale du système d'exploitation Android requise pour exécuter votre application.

targetSdkVersion : la version sdk cible est la version sur laquelle votre application doit s'exécuter.

Vinay John
la source