Quelle est la différence entre compileSdkVersion et targetSdkVersion?

j'ai regardé la documentation pour la construction avec Gradle, mais je ne suis pas encore sûr quelle est la différence entre compileSdkVersion et targetSdkVersion .

Tous il est dit:

la propriété compileSdkVersion spécifie la cible de compilation.

Eh bien, qu'est-ce que la"cible de compilation"?

je vois deux façons possibles d'interpréter ceci:

  1. compileSdkVersion est la version du compilateur utilisé dans la construction de l'application, tandis que targetSdkVersion est le "niveau API que l'application cible" . (Si tel était le cas, je supposerais que compileSdkVersion doit être supérieur ou égal au targetSdkVersion ?
  2. ça veut dire la même chose. "compilation cible" == "niveau de l'API de l'application des objectifs"
  3. autre chose?

je vois que cette question a déjà été posée, mais la seule réponse ne fait que citer le doc, ce qui n'est pas clair pour moi.

404
demandé sur Community 2014-11-02 01:54:26

9 réponses

compileSdkVersion

le compileSdkVersion est la version de L'API sur laquelle l'application est compilée. Cela signifie que vous pouvez utiliser les fonctionnalités de L'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 mettez compileSdkVersion à 15, vous obtiendrez une erreur de compilation. Si vous mettez compileSdkVersion à 16, Vous pouvez toujours lancer L'application sur un périphérique API 15 aussi longtemps que les chemins d'exécution de votre application ne tentent pas d'invoquer tout IPA spécifique à L'API 16.

targetSdkVersion

le targetSdkVersion n'a rien à voir avec la façon dont votre application est compilée ou ce que les API que vous pouvez utiliser. Le targetSdkVersion est censé indiquer que vous avez testé votre application sur la (probablement jusqu'à et y compris) la version que vous spécifiez. C'est plus comme une certification ou un signe que vous donnez L'OS Android comme un indice sur la façon dont il devrait gérer votre application en termes de fonctionnalités OS.

par exemple, comme la documentation stipule:

par exemple, le fait de définir cette valeur à" 11 " ou plus permet au système d'appliquer un nouveau thème par défaut (Holo) à votre application Lorsqu'elle tourne sur Android 3.0 ou plus...

L'OS Android, à l'exécution , peut changer la façon dont votre application est stylisée ou autrement exécutée dans le contexte de L'OS basé sur cette valeur. Y quelques autres exemples connus qui sont influencés par cette valeur et cette liste est susceptible de se renforcer au fil du temps.

pour toutes les applications pratiques, la plupart des applications vont vouloir mettre targetSdkVersion à la dernière version publiée de l'API. Cela assurera que votre application semble aussi bon que possible sur les appareils Android les plus récents. Si vous ne spécifiez pas le targetSdkVersion , il est par défaut au minSdkVersion .

429
répondu Jeff Mixon 2014-11-01 23:17:30

comme guide oneliner:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

idéalement:

minSdkVersion (lowest possible) <= targetSdkVersion == compileSdkVersion (latest SDK)

Lire la suite de ce grand billet par Ian Lake

115
répondu Jimmy Kane 2016-06-15 19:03:55

le compileSdkVersion devrait être la plus récente version stable. Le targetSdkVersion doit être entièrement éprouvé et inférieur ou égal à compileSdkVersion .

29
répondu androidwifi 2015-11-27 17:49:11

la Fin de la partie.. et il y a plusieurs bonnes réponses ci-dessus-- essentiellement, que le compileSdkVersion est la version de l'API contre laquelle l'application est compilée, tandis que le targetSdkVersion indique la version contre laquelle l'application a été testée.

j'aimerais compléter ces réponses avec les notes suivantes:

  1. Que targetSdkVersion impact sur la manière dont les autorisations sont demandées :

    • si L'appareil exécute Android 6.0 (niveau API 23) ou plus, et l'application targetSdkVersion est de 23 ou plus, l'application demande des permissions de l'utilisateur à l'exécution.
    • si L'appareil exécute Android 5.1 (niveau API 22) ou inférieur, ou l'application targetSdkVersion est 22 ou inférieur, le système demande à l'utilisateur d'accorder les permissions lorsque l'utilisateur installe l'application.
  2. si la compileSdkVersion est supérieure à la version déclarée par votre application targetSdkVersion , le système peut activer les comportements de compatibilité pour s'assurer que votre application continue à fonctionner comme vous l'attendez. ( ref )

  3. avec chaque nouvelle version Android...

    • targetSdkVersion doit être incrémenté pour correspondre au dernier niveau de L'API, puis soigneusement testez votre application sur la version de plate-forme correspondante
    • compileSdkVersion , d'un autre côté, n'a pas besoin d'être modifié à moins que vous n'ajoutiez des fonctionnalités exclusives à la nouvelle version de la plate-forme
    • en conséquence, alors que targetSdkVersion est souvent (initialement) moins que le compileSdkVersion , il n'est pas rare de voir une application bien entretenue / établie avec targetSdkVersion > compileSdkVersion
21
répondu Austin D 2018-04-02 23:09:30

The CompileSdkVersion est la version de la plate-forme SDK avec laquelle votre application fonctionne pour la compilation, etc pendant le processus de développement (vous devez toujours utiliser la dernière) il est livré avec la version API que vous utilisez

enter image description here

vous le verrez dans votre fichier build.gradle :

enter image description here

targetSdkVersion: contient l'information que votre app envoie après le processus de développement à l'app store qui lui permet de TARGET the SPECIFIED version of the Android platform . Selon les fonctionnalités de votre application, il peut cibler des versions D'API inférieures à la version actuelle.Par exemple, vous pouvez cibler API 18 même si la version actuelle est 23.

regardez bien Ce Google officiel page .

18
répondu ojonugwa ochalifu 2016-04-18 20:24:36

je vois beaucoup de différences sur compiledSdkVersion dans les réponses précédentes, donc je vais essayer de clarifier un peu ici, en suivant la page Web d'android.

a-ce que dit Android

selon https://developer.android.com/guide/topics/manifest/uses-sdk-element.html :

sélectionner une version de la plate-forme et le niveau de L'API lorsque vous êtes développer votre application, vous aurez besoin de choisir la version de la plateforme contre qui vous permettra de compiler l'application. En général, vous devez compiler votre application contre la version la plus basse possible de la plateforme que votre application peut supporter.

Donc, ce serait le bon ordre selon Android:

compiledSdkVersion = minSdkVersion <= targetSdkVersion

B - Ce que d'autres disent aussi

certaines personnes préfèrent toujours utiliser la version compilée la plus élevée disponible. C'est parce qu'ils vont s'appuyer sur des conseils de code pour vérifier s'ils utilisent des fonctionnalités API plus récentes que minSdkVersion, donc soit en changeant le code pour ne pas les utiliser, soit en vérifiant la version de L'API utilisateur à l'exécution pour les utiliser conditionnellement avec des retombées pour les versions plus anciennes de L'API.

les indices sur les utilisations dépréciées apparaîtraient aussi dans le code, vous permettant sachez que quelque chose est déprécié dans les nouveaux niveaux D'API, de sorte que vous pouvez réagir en conséquence si vous le souhaitez.

Donc, ce serait le bon ordre selon d'autres:

minSdkVersion <= targetSdkVersion <= compiledSdkVersion (highest possible)

Que faire?

Il dépend de vous et de votre application.

si vous prévoyez d'offrir différentes fonctionnalités API en fonction du niveau D'API de l'utilisateur à l'exécution, utilisez option B. Vous obtiendrez des indices sur les fonctionnalités que vous utilisez lors du codage. Assurez-vous simplement de ne jamais utiliser de nouvelles fonctionnalités D'API que minSdkVersion sans vérifier le niveau de L'API utilisateur à l'exécution, sinon votre application va se planter. Cette approche a également l'avantage d'apprendre ce qui est nouveau et ce qui est ancien tout en codant.

si vous savez déjà ce qui est nouveau ou ancien et que vous développez une application unique qui ne sera certainement jamais mise à jour, ou si vous êtes sûr de ne pas proposer de nouvelles fonctionnalités API vous ne vous ennuierez pas avec des indices dépréciés et vous ne pourrez jamais utiliser les nouvelles fonctionnalités de L'API, même si vous êtes tenté de le faire.

6
répondu CGodo 2017-04-12 11:11:16

mes 2 cents: compilez contre n'importe quelle version du SDK mais faites attention à ne pas appeler D'API que votre "version SDK minimum" ne supporte pas. Cela signifie que vous" pouvez " compiler avec la dernière version du SDK.

comme pour "version cible" il se réfère simplement à ce que vous avez prévu de cibler en premier lieu et ont peut-être testé contre. Si vous n'avez pas fait la diligence raisonnable, alors c'est la façon D'informer Android qu'il doit effectuer des vérifications supplémentaires avant qu'il déploie votre permet de dire "Lollipop" application ciblée sur "Oreo".

donc la" version cible "n'est évidemment pas inférieure à votre" version SDK minimale "mais elle ne peut pas être supérieure à votre"version compilée".

1
répondu Prab 2017-11-16 02:51:04

ne répondant pas à vos questions directes, car il ya déjà beaucoup de réponses détaillées, mais il est intéressant de mentionner, que, au contraire de la documentation Android, Android Studio suggère d'utiliser la même version pour compileSDKVersion et targetSDKVersion .

enter image description here

1
répondu sshturma 2018-02-12 03:03:41

les paramètres D'Application des propriétés D'un projet Android dans Visual Studio 2017 (15.8.5) semblent les avoir combinés ou quelque chose comme:

enter image description here

0
répondu samis 2018-09-21 12:50:45