J'ai regardé la documentation pour construire avec Gradle, mais je ne sais toujours pas quelle est la différence entre compileSdkVersion
et targetSdkVersion
est.
Tout ce qu'il dit est:
La
compileSdkVersion
propriété spécifie la cible de compilation.
Eh bien, quelle est la "cible de compilation"?
Je vois deux façons possibles d'interpréter cela:
compileSdkVersion
est la version du compilateur utilisée dans la création de l'application, tandis quetargetSdkVersion
le "niveau API que l'application cible" . (Si tel était le cas, je suppose qu'ilcompileSdkVersion
doit être supérieur ou égal autargetSdkVersion
?- Ils signifient la même chose. "cible de compilation" == "le niveau d'API que l'application cible"
- Autre chose?
Je vois que cette question a déjà été posée, mais la seule réponse cite simplement le document, ce qui n'est pas clair pour moi.
Réponses:
compileSdkVersion
C'est
compileSdkVersion
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 que vous la définissezcompileSdkVersion
sur 15, vous obtiendrez une erreur de compilation. Si vous définissezcompileSdkVersion
sur 16, vous pouvez toujours exécuter l'application sur un appareil API 15 tant que les chemins d'exécution de votre application n'essaient pas d'appeler des API spécifiques à API 16.targetSdkVersion
Cela
targetSdkVersion
n'a rien à voir avec la façon dont votre application est compilée ou avec les API que vous pouvez utiliser. LetargetSdkVersion
est censé indiquer que vous avez testé votre application sur (probablement jusqu'à et y compris) la version que vous spécifiez. Cela ressemble plus à une certification ou à une signature que vous donnez au système d'exploitation Android comme un indice de la façon dont il doit gérer votre application en termes de fonctionnalités du système d'exploitation.Par exemple, comme l' indique la documentation :
Le système d'exploitation Android, au moment de l'exécution , peut changer la façon dont votre application est stylisée ou exécutée d'une autre manière dans le contexte du système d'exploitation en fonction de cette valeur. Il y a quelques autres exemples connus qui sont influencés par cette valeur et cette liste ne fera probablement qu'augmenter avec le temps.
À toutes fins pratiques, la plupart des applications voudront définir
targetSdkVersion
la dernière version publiée de l'API. Cela garantira que votre application est aussi belle que possible sur les appareils Android les plus récents. Si vous ne spécifiez pas letargetSdkVersion
, il est par défaut leminSdkVersion
.la source
targetSdkVersion
très probablement sera plus élevécompileSdkVersion
et à juste titre. Cela signifie que, bien que vous ayez conçu une application pour cibler l'API 16, par exemple, elle fonctionne toujours bien sur l'API 21 (Lollipop) et vous devriez passertargetSdkVersion
à 21 pour indiquer que le système d'exploitation Android peut appliquer les styles Lollipop qui peuvent existent dans votre application.compileSdkVersion
à une version supérieure signifierait que vous souhaitiez utiliser de nouvelles API qui ne sont incluses que dans cette version particulière. Si vous ne prévoyez pas d'utiliser des fonctionnalités spécifiques à Lollipop dans votre application, il n'y a vraiment (généralement) aucune raison de jamais définircompileSdkVersion
à 21. Cependant, votre application fonctionnera probablement très bien sur API 21 en l'état, vous changez donctargetSdkVersion
pour indiquer que votre application s'exécute comme prévu (cible) sur l'API 21, mais que vous n'utilisez aucune API spécifique à 21 (compiler) et que vouscompileSdkVersion
pouvez donc rester à 15 dans cet exemple.En tant que guide oneliner:
Idéalement:
En savoir plus sur ce super article de Ian Lake
la source
minSdkVersion
signifie- t-il que l'application de niveau API de l'appareil le plus bascan
fonctionne? Vraisemblablement parce qu'il utilise certaines API disponibles àminSdkVersion
partir de maintenant?minSdkVersion
est 15 (qui est ICS 4.0.3), les appareils avec API 14 (qui est ICS 4.0) ne devraient pas pouvoir installer l'application. Et au moins pour l'instant, l'application fonctionnera les 15, 16, 17, 18, 19 (20 mais c'est pour l'ancien système d'exploitation), 21, 22, 23, 24, 25, 26, 27, 28, etc. dans le futur (probablement)La
compileSdkVersion
dernière version stable devrait être. LetargetSdkVersion
doit être entièrement testé et inférieur ou égal àcompileSdkVersion
.la source
targetSdkVersion
sur une version inférieure. Donc, letargetSdkVersion
devrait être celui que vous avez testé et connaître le comportement exact, et peut être <= la dernière stable.compileSdkVersion
devrait être la dernière version stable" devrait être suffixée avec "dont vous utilisez les fonctionnalités de l'API". Cela n'a aucun sens de compiler avec l'API 27 (la dernière API stable d'aujourd'hui) si vous n'utilisez que des fonctionnalités de version d'API inférieures. Cependant, la dernière version stable pourrait inclure certaines fonctionnalités qui s'améliorent automatiquement, par exemple une sécurité renforcée ou une compilation efficace avec une compatibilité descendante. Par conséquent, il est conseillé d'utiliser la dernière version stable ou au moins une version stable récente, mais elle «ne devrait [pas] être» la dernière version en soi .Tard dans le jeu ... et il y a plusieurs bonnes réponses ci-dessus - essentiellement, c'est la
compileSdkVersion
version de l'API avec laquelle l'application est compilée, tandis que latargetSdkVersion
indique la version contre laquelle l'application a été testée.Je voudrais compléter ces réponses par les notes suivantes:
Cela a un
targetSdkVersion
impact sur la manière dont les autorisations sont demandées :targetSdkVersion
est de 23 ou supérieure, l'application demande des autorisations à l'utilisateur au moment de l'exécution.targetSdkVersion
est inférieure ou égale à 22, le système demande à l'utilisateur d'accorder les autorisations lorsque l'utilisateur installe l'application.Si la version
compileSdkVersion
est supérieure à la version déclarée par votre applicationtargetSdkVersion
, le système peut activer des comportements de compatibilité pour garantir que votre application continue de fonctionner comme prévu. ( ref )Avec chaque nouvelle version d'Android ...
targetSdkVersion
doit être incrémenté pour correspondre au dernier niveau d'API, puis testez soigneusement votre application sur la version de plate-forme correspondantecompileSdkVersion
, d'autre part, n'a pas besoin d'être modifié sauf si vous ajoutez des fonctionnalités exclusives à la nouvelle version de la plate-formetargetSdkVersion
soit souvent (initialement) inférieur à lacompileSdkVersion
, il n'est pas rare de voir une application bien entretenue / établie avectargetSdkVersion > compileSdkVersion
la source
targetSdkVersion
vous pouvez voir des comportements de compatibilité. Je ne pense pas que cela ait quoi que ce soit à voir aveccompileSdkVersion
.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 version). Elle est livrée avec la version d'API que vous utilisezVous le verrez dans votre
build.gradle
dossier:targetSdkVersion:
contient les informations fournies avec votre application APRÈS le processus de développement dans l'App Store qui le permetTARGET the SPECIFIED version of the Android platform
. En fonction des fonctionnalités de votre application, elle peut cibler des versions d'API inférieures à la version actuelle.Par exemple, vous pouvez cibler l'API 18 même si la version actuelle est 23.Jetez un œil à cette page officielle de Google .
la source
Je vois beaucoup de différences
compiledSdkVersion
dans les réponses précédentes, je vais donc 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 :
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 compiléeSkdVersion la plus élevée disponible. C'est parce qu'ils s'appuieront sur des astuces de code pour vérifier s'ils utilisent des fonctionnalités d'API plus récentes que minSdkVersion, modifiant ainsi le code pour ne pas les utiliser ou vérifiant la version de l'API utilisateur au moment de l'exécution pour les utiliser conditionnellement avec des solutions de secours pour les anciennes versions d'API.
Des conseils sur les utilisations obsolètes apparaîtront également dans le code, vous permettant de savoir que quelque chose est obsolète dans les niveaux d'API plus récents, afin que vous puissiez 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 prévoyez d'offrir 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 utilisez lors du codage. Assurez-vous simplement de ne jamais utiliser de fonctionnalités d'API plus récentes que minSdkVersion sans vérifier le niveau de l'API utilisateur lors de l'exécution, sinon votre application se bloquera. Cette approche a également l'avantage d'apprendre les nouveautés et les anciennes lors du codage.
Si vous savez déjà ce qui est nouveau ou ancien et que vous développez une application unique qui ne sera certainement pas mise à jour, ou si vous êtes sûr de ne pas proposer de nouvelles fonctionnalités API sous condition, utilisez l'option A. Vous ne serez pas dérangé avec des indications obsolètes et vous ne pourrez jamais utiliser les nouvelles fonctionnalités de l'API même si vous êtes tenté de le faire.
la source
<uses-sdk>
documentation est extrêmement vague et ambiguë.Mes 2 centimes: compilez avec n'importe quelle version du SDK mais veillez à ne pas appeler d'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 à la "version cible", elle se réfère simplement à ce que vous aviez prévu de cibler en premier lieu et que vous avez éventuellement testé. Si vous n'avez pas fait preuve de diligence raisonnable, c'est 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».
Ainsi, la "version cible" n'est évidemment pas inférieure à votre "version minimale du SDK" mais elle ne peut pas être supérieure à votre "version compilée".
la source
Ne répondant pas à vos questions directes, car il y a déjà beaucoup de réponses détaillées, mais il convient de mentionner que, contrairement à la documentation Android, Android Studio suggère d'utiliser la même version pour
compileSDKVersion
ettargetSDKVersion
.la source
compiledSdkVersion ==> quelle version du SDK doit compiler votre code en bytecode (il utilise dans l'environnement de développement): il vaut mieux utiliser la dernière version du SDK.
minSdkVersion ==> cet élément utilise pour l'installation d'APK (il utilise dans l'environnement de production). Par exemple:
la source
Résumé rapide:
Pour minSDKversion, voir la dernière entrée dans la poignée Twitter: https://twitter.com/minSdkVersion
TargetSDKversion: voir la dernière entrée dans la poignée Twitter: https://twitter.com/targtSdkVersion ou utilisez le dernier niveau d'API comme indiqué sur devel https://developer.android.com/guide/topics/manifest/uses-sdk-element. html
Version compilée: rendez-la identique à TargetSDKversion
maxSdkVersion: le conseil d'Android est de ne pas définir cela car vous ne voulez pas limiter votre application pour qu'elle ne fonctionne pas sur les futures versions d'Android
la source
Les paramètres d'application des propriétés d'un projet Android dans Visual Studio 2017 (15.8.5) les combinent:
la source