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:
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
?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.
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.
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
.
En guise de guide:
minSdkVersion <= targetSdkVersion <= compileSdkVersion
Idéalement:
minSdkVersion (lowest possible) <= targetSdkVersion == compileSdkVersion (latest SDK)
La compileSdkVersion
devrait être la dernière version stable. La targetSdkVersion
doit être entièrement testée et inférieure ou égale à compileSdkVersion
.
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:
Cela targetSdkVersion
influe sur la manière dont les autorisations sont demandées :
targetSdkVersion
de l'application est 23 ou plus haut, l'application demande des autorisations à l'utilisateur au moment de l'exécution.targetSdkVersion
de l'application est 22 ou en bas, le système demande à l'utilisateur d'accorder les autorisations lorsqu'il installe l'application.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 )
À 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.targetSdkVersion
soit souvent (initialement) inférieur à compileSdkVersion
, il n'est pas rare de voir une application bien entretenue/établie avec targetSdkVersion > compileSdkVersion
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.
Vous verrez ceci dans votre fichier build.gradle
:
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 .
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.
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".
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;
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