web-dev-qa-db-fra.com

Quelle est la différence entre compileSdkVersion et targetSdkVersion?

J'ai consulté documentation pour la construction avec Gradle, mais je ne suis toujours pas sûr de la différence entre compileSdkVersion et targetSdkVersion.

Tout ce qu'il dit est:

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

Eh bien, quelle est la "cible de la compilation"?

Je vois deux façons d'interpréter cela:

  1. compileSdkVersion est la version du compilateur utilisé dans la construction de l'application, tandis que targetSdkVersion est le "niveau de l'API que l'application vise" . (Si tel était le cas, je supposerais que compileSdkVersion doit être supérieur ou égal à targetSdkVersion?
  2. Ils veulent dire la même chose. "compilation target" == "le niveau de l'API que l'application cible"
  3. Autre chose?

Je vois que cette question a déjà été posée, mais la seule réponse citée est la doc, ce qui n’est pas clair pour moi.

477
coder123

compileSdkVersion

La compileSdkVersion est la version de l'API avec laquelle l'application est compilée. Cela signifie que vous pouvez utiliser Android les fonctionnalités de l'API incluses dans cette version de l'API (ainsi que toutes les versions précédentes, bien évidemment). Si vous essayez d'utiliser les fonctionnalités de l'API 16 mais que vous 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 périphérique API 15 tant que les chemins d'exécution de votre application ne tentent pas d'appeler des API spécifiques à l'API 16.

targetSdkVersion

La targetSdkVersion n'a rien à voir avec la manière dont votre application est compilée ou avec les API que vous pouvez utiliser. La targetSdkVersion est censée indiquer que vous avez testé votre application sur (probablement jusqu'à la version incluse) la version que vous avez spécifiée. Cela ressemble plus à une certification ou à une fermeture de session que vous donnez au système d'exploitation Android comme indication de la manière dont il convient de gérer votre application en termes de fonctionnalités du système d'exploitation.

Par exemple, comme la documentation dit:

Par exemple, si vous définissez cette valeur sur "11" ou supérieure, le système pourra appliquer un nouveau thème par défaut (Holo) à votre application lorsqu'il s'exécute sur Android 3.0 ou supérieur ...

Le système d'exploitation Android au moment de l'exécution peut modifier la manière dont votre application est stylisée ou exécutée dans le contexte du système d'exploitation basé sur celui-ci. valeur. Il existe quelques autres exemples connus qui sont influencés par cette valeur et cette liste augmentera probablement avec le temps.

Pour des raisons pratiques, la plupart des applications vont vouloir définir targetSdkVersion sur la dernière version publiée de l'API. Cela garantira que votre application aura la meilleure apparence possible sur les appareils Android les plus récents. Si vous ne spécifiez pas la targetSdkVersion, la valeur par défaut est minSdkVersion.

507
Jeff Mixon

En guise de guide:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

Idéalement:

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

Lisez plus de ce super post de Ian Lake

137
Jimmy Kane

La compileSdkVersion devrait être la dernière version stable. La targetSdkVersion doit être entièrement testée et inférieure ou égale à compileSdkVersion.

32
androidwifi

Tard au jeu .. et il y a plusieurs bonnes réponses ci-dessus - essentiellement, le compileSdkVersion est la version de l'API avec laquelle l'application est compilée, tandis que le targetSdkVersion indique la version utilisée par l'application testé contre.

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

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

    • Si l'appareil est en cours d'exécution Android 6.0 (API de niveau 23) ou supérieur, et , le targetSdkVersion de l'application est 23 ou plus haut, l'application demande des autorisations à l'utilisateur au moment de l'exécution.
    • Si l'appareil est en cours d'exécution Android 5.1 (API de niveau 22) ou inférieur, ou si targetSdkVersion de l'application est 22 ou en bas, le système demande à l'utilisateur d'accorder les autorisations lorsqu'il installe l'application.
  2. Si la variable compileSdkVersion est supérieure à la version déclarée par targetSdkVersion de votre application, le système peut activer les comportements de compatibilité pour garantir que votre application continue de fonctionner comme prévu. ( ref )

  3. À chaque nouvelle version de Android ...

    • targetSdkVersion doit être incrémenté pour correspondre au dernier niveau de l'API, puis testez minutieusement votre application sur la version de la plate-forme correspondante.
    • compileSdkVersion, en revanche, n'a pas besoin d'être modifié, sauf si vous ajoutez des fonctionnalités exclusives à la nouvelle version de la plateforme.
    • Par conséquent, bien que targetSdkVersion soit souvent (initialement) inférieur à compileSdkVersion, il n'est pas rare de voir une application bien entretenue/établie avec targetSdkVersion > compileSdkVersion
25
Austin D

The CompileSdkVersion est la version de la plate-forme SDK utilisée par votre application pour la compilation, etc. PENDANT le processus de développement (vous devez toujours utiliser la dernière version). Livré avec la version de l'API que vous utilisez.

enter image description here

Vous verrez ceci dans votre fichier build.gradle:

enter image description here

targetSdkVersion: contient les informations fournies par votre application APRÈS le processus de développement dans la boutique d'applications qui lui permet de TARGET the SPECIFIED version of the Android platform. Selon les fonctionnalités de votre application, elle peut cibler des versions d'API inférieures à l'instance actuelle. Pour l'instance, vous pouvez cibler l'API 18, même si la version actuelle est 23.

Regardez bien ce Google officiel page .

18
ojonugwa ochalifu

Je vois beaucoup de différences à propos de compiledSdkVersion dans les réponses précédentes, je vais donc essayer de préciser un peu ici, en suivant la page Web d'Android.

A - Ce que Android dit

Selon https://developer.Android.com/guide/topics/manifest/uses-sdk-element.html :

Sélection d'une version de plate-forme et d'un niveau d'API Lorsque vous développez votre application, vous devez choisir la version de la plate-forme avec laquelle vous compilerez l'application. En général, vous devez compiler votre application avec la version la plus basse possible de la plate-forme que votre application peut prendre en charge.

Donc, ce serait le bon ordre selon Android:

compiledSdkVersion = minSdkVersion <= targetSdkVersion

B - Ce que les autres disent aussi

Certaines personnes préfèrent toujours utiliser la version compiledSkdVersion la plus élevée disponible. C’est parce qu’ils s’appuieront sur des indicateurs de code pour vérifier s’ils utilisent des fonctionnalités API plus récentes que minSdkVersion, ce qui permet de modifier le code afin de ne pas les utiliser ou de vérifier la version de l’API utilisateur au moment de l’exécution pour les utiliser de manière conditionnelle avec des replis pour les versions d’API plus anciennes.

Des indications sur les utilisations déconseillées apparaissent également dans le code, ce qui vous permet de savoir que quelque chose est déconseillé dans les niveaux d'API les plus récents. Vous pouvez ainsi réagir en conséquence si vous le souhaitez.

Donc, ce serait le bon ordre selon les autres:

minSdkVersion <= targetSdkVersion <= compiledSdkVersion (highest possible)

Que faire?

Cela dépend de vous et de votre application.

Si vous envisagez de proposer différentes fonctionnalités d'API en fonction du niveau d'API de l'utilisateur au moment de l'exécution, utilisez l'option B. Vous obtiendrez des conseils sur les fonctionnalités que vous utiliserez lors du codage. Assurez-vous simplement de ne jamais utiliser les nouvelles fonctionnalités de l'API que minSdkVersion sans vérifier le niveau de l'API de l'utilisateur au moment de l'exécution, faute de quoi votre application se planterait. Cette approche présente également l'avantage d'apprendre ce qui est nouveau et ce qui est vieux lors du codage.

Si vous savez déjà ce qui est nouveau ou ancien et que vous développez une application unique qui, à coup sûr, ne sera jamais mise à jour, ou si vous êtes certain de ne pas offrir de nouvelles fonctionnalités d'API de manière conditionnelle, utilisez l'option A. Vous ne serez pas dérangé avec des astuces obsolètes et vous ne pourrez jamais utiliser les nouvelles fonctionnalités de l'API, même si vous êtes tenté de le faire.

7
CGodo

Mes 2 cents: Compilez avec n'importe quelle version du SDK, mais veillez à ne pas appeler les API que votre "version minimale du SDK" ne prend pas en charge. Cela signifie que vous "pourriez" compiler avec la dernière version du SDK.

Quant à "version cible", il fait simplement référence à ce que vous aviez prévu de cibler et contre lequel vous avez éventuellement effectué des tests. Si vous n'avez pas encore fait preuve de diligence raisonnable, voici le moyen d'informer Android qu'il doit effectuer des vérifications supplémentaires avant de déployer votre application ciblée "Lollipop" sur "Oreo".

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

2
Prabhu M

Ne répondez pas à vos questions directes, car il y a déjà beaucoup de réponses détaillées, mais il convient de mentionner que contrairement à Android documentation, Android Studio suggère d'utiliser le même version pour compileSDKVersion et targetSDKVersion.

enter image description here

1
sshturma

Les paramètres d'application des propriétés d'un projet Android dans Visual Studio 2017 (15.8.5) semblent les combiner, ou quelque chose du genre:

enter image description here

0
samis

compiledSdkVersion ==> quelle version du SDK doit compiler votre code à bytecode (il utilise dans l’environnement de développement) point: mieux vaut utiliser la dernière version du SDK.

minSdkVersion ==> Cet élément utilise pour l'installation de l'APK (il est utilisé dans l'environnement de production). Par exemple:

if(client-sdk-version   <   min-sdk-versoin )
    client-can-not-install-apk;
else
    client-can-install-apk;
0
M.Namjo

Résumé rapide:

Pour minSDKversion, voir la dernière entrée dans le descripteur Twitter: https://Twitter.com/minSdkVersion

TargetSDKversion: voir la dernière entrée dans le descripteur Twitter: https://Twitter.com/targtSdkVersion ou utilisez le dernier niveau d'API indiqué dans la version de développement https://developer.Android.com/guide /topics/manifest/uses-sdk-element.html

Version compilée: le rendre identique à TargetSDKversion

maxSdkVersion: les conseils de Android ne doivent pas être définis, car vous ne souhaitez pas limiter l'application pour ne pas fonctionner dans les futures versions de Android

0
kush