web-dev-qa-db-de.com

Was ist der Unterschied zwischen compileSdkVersion und targetSdkVersion?

Ich habe mir die Dokumentation für das Bauen mit Gradle angesehen, bin mir aber immer noch nicht sicher, was der Unterschied zwischen compileSdkVersion und targetSdkVersion ist.

Alles was es sagt ist:

Die Eigenschaft compileSdkVersion gibt das Kompilierungsziel an.

Nun, was ist das "Kompilierungsziel"?

Ich sehe zwei Möglichkeiten, dies zu interpretieren:

  1. compileSdkVersion ist die Version des Compilers, der beim Erstellen der App verwendet wird, während targetSdkVersion die "API-Ebene, auf die die Anwendung abzielt" ist. (Wenn dies der Fall wäre, würde ich annehmen, dass compileSdkVersion größer oder gleich dem targetSdkVersion sein muss?
  2. Sie meinen das Gleiche. "compilation target" == "Die API-Ebene, auf die sich die Anwendung bezieht"
  3. Etwas anderes?

Ich sehe, dass diese Frage schon einmal gestellt wurde, aber die eine Antwort zitiert nur das Dokument, was mir unklar ist.

477
coder123

compileSdkVersion

compileSdkVersion ist die Version der API, mit der die App kompiliert wird. Dies bedeutet, dass Sie Android API-Funktionen verwenden können, die in dieser Version der API enthalten sind (und natürlich auch in allen früheren Versionen). Wenn Sie versuchen, API 16-Funktionen zu verwenden, aber compileSdkVersion auf 15 setzen, wird ein Kompilierungsfehler angezeigt. Wenn Sie compileSdkVersion auf 16 setzen, können Sie die App weiterhin auf einem API 15-Gerät ausführen, solange die Ausführungspfade Ihrer App nicht versuchen, APIs aufzurufen, die für API 16 spezifisch sind.

targetSdkVersion

Das targetSdkVersion hat nichts damit zu tun, wie Ihre App kompiliert wird oder welche APIs Sie verwenden können. Das targetSdkVersion soll anzeigen, dass Sie Ihre App auf der von Ihnen angegebenen Version (vermutlich bis einschließlich) getestet haben. Dies ähnelt eher einer Zertifizierung oder Abmeldung, die Sie dem Betriebssystem Android als Hinweis darauf geben, wie es mit Ihrer App in Bezug auf die Betriebssystemfunktionen umgehen soll.

Zum Beispiel, wie die Dokumentation besagt:

Wenn Sie diesen Wert beispielsweise auf "11" oder höher festlegen, kann das System ein neues Standardthema (Holo) auf Ihre App anwenden, wenn Android 3.0 oder höher ausgeführt wird.

Das Android-Betriebssystem zur Laufzeit ändert möglicherweise die Art und Weise, in der Ihre App im Kontext des Betriebssystems auf dieser Grundlage stilisiert oder auf andere Weise ausgeführt wird Wert. Es gibt einige andere bekannte Beispiele, die von diesem Wert beeinflusst werden, und diese Liste wird wahrscheinlich nur mit der Zeit zunehmen.

Aus praktischen Gründen möchten die meisten Apps targetSdkVersion auf die neueste veröffentlichte Version der API setzen. Auf diese Weise wird sichergestellt, dass Ihre App auf den neuesten Android Geräten so gut wie möglich aussieht. Wenn Sie targetSdkVersion nicht angeben, wird standardmäßig minSdkVersion verwendet.

507
Jeff Mixon

Als Oneliner-Leitfaden:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

Idealerweise:

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

Lesen Sie mehr von diesem tollen Beitrag von Ian Lake

137
Jimmy Kane

Die compileSdkVersion sollte die neueste stabile Version sein. Die targetSdkVersion sollte vollständig getestet werden und kleiner oder gleich compileSdkVersion sein.

32
androidwifi

Spät zum Spiel ... und es gibt oben einige großartige Antworten - im Wesentlichen, dass compileSdkVersion die Version der API ist, mit der die App kompiliert wurde, während targetSdkVersion die Version der App angibt getestet gegen.

Ich möchte diese Antworten mit den folgenden Anmerkungen ergänzen:

  1. Das targetSdkVersion wirkt sich auf die Art und Weise aus, in der Berechtigungen angefordert werden :

    • Wenn auf dem Gerät Android 6.0 (API-Stufe 23) oder höher und ausgeführt wird, ist targetSdkVersion der App 23 oder höher höher, fordert die App zur Laufzeit Berechtigungen vom Benutzer an.
    • Wenn auf dem Gerät Android 5.1 (API-Stufe 22) oder niedriger ausgeführt wird oder die targetSdkVersion der App 22 oder höher ist niedriger, fordert das System den Benutzer auf, die Berechtigungen zu erteilen, wenn der Benutzer die App installiert.
  2. Wenn die compileSdkVersion höher ist als die von der targetSdkVersion Ihrer App deklarierte Version, aktiviert das System möglicherweise Kompatibilitätsverhalten, um sicherzustellen, dass Ihre App weiterhin wie erwartet funktioniert. ( ref )

  3. Mit jeder neuen Android Version ...

    • targetSdkVersion sollte erhöht werden, um der neuesten API-Version zu entsprechen. Testen Sie dann Ihre Anwendung gründlich auf der entsprechenden Plattformversion
    • compileSdkVersion muss hingegen nur geändert werden, wenn Sie Funktionen hinzufügen, die nur für die neue Plattformversion verfügbar sind
    • Daher ist targetSdkVersion zwar (anfangs) häufig kleiner als compileSdkVersion, es ist jedoch nicht ungewöhnlich, eine gut gewartete/etablierte App mit targetSdkVersion > compileSdkVersion zu sehen.
25
Austin D

The CompileSdkVersion ist die Version der SDK-Plattform, mit der Ihre App zum Kompilieren usw. verwendet wird. WÄHREND des Entwicklungsprozesses (Sie sollten immer die neueste Version verwenden) Diese wird mit der von Ihnen verwendeten API-Version geliefert

enter image description here

Sie sehen dies in Ihrer build.gradle -Datei:

enter image description here

targetSdkVersion: enthält die Informationen, die Ihre App NACH dem Entwicklungsprozess an den App Store sendet, mit denen sie TARGET the SPECIFIED version of the Android platform ausführen kann. Abhängig von der Funktionalität Ihrer App kann sie auf API-Versionen abzielen, die niedriger als die aktuelle sind. Beispielsweise können Sie auf API 18 abzielen, auch wenn die aktuelle Version 23 ist.

Werfen Sie einen Blick auf diese offizielle Google Seite .

18

Ich sehe in früheren Antworten viele Unterschiede zu compiledSdkVersion, daher werde ich hier versuchen, anhand der Webseite von Android ein wenig zu klären.

A - Was Android sagt

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

Auswählen einer Plattformversion und einer API-Ebene Wenn Sie Ihre Anwendung entwickeln, müssen Sie die Plattformversion auswählen, mit der Sie die Anwendung kompilieren möchten. Im Allgemeinen sollten Sie Ihre Anwendung mit der niedrigstmöglichen Version der Plattform kompilieren, die Ihre Anwendung unterstützen kann.

Das wäre also die richtige Reihenfolge für Android:

compiledSdkVersion = minSdkVersion <= targetSdkVersion

B - Was andere auch sagen

Einige Leute bevorzugen es, immer die höchste verfügbare compiledSkdVersion zu verwenden. Dies liegt daran, dass sie sich auf Codehinweise stützen, um zu überprüfen, ob sie neuere API-Funktionen als minSdkVersion verwenden. Ändern Sie daher entweder den Code, um sie nicht zu verwenden, oder überprüfen Sie die Benutzer-API-Version zur Laufzeit, um sie bei Fallbacks für ältere API-Versionen bedingt zu verwenden.

Hinweise zu veralteten Verwendungen werden auch im Code angezeigt, sodass Sie wissen, dass in neueren API-Ebenen etwas veraltet ist, sodass Sie auf Wunsch entsprechend reagieren können.

Das wäre also die richtige Reihenfolge für andere:

minSdkVersion <= targetSdkVersion <= compiledSdkVersion (highest possible)

Was ist zu tun?

Es hängt von Ihnen und Ihrer App ab.

Wenn Sie verschiedene API-Funktionen entsprechend der API-Ebene des Benutzers zur Laufzeit anbieten möchten, verwenden Sie Option B. Sie erhalten Hinweise zu den Funktionen, die Sie beim Codieren verwenden. Stellen Sie nur sicher, dass Sie nie neuere API-Funktionen als minSdkVersion verwenden, ohne die Benutzer-API-Ebene zur Laufzeit zu überprüfen, da sonst Ihre App abstürzt. Dieser Ansatz hat auch den Vorteil, dass Sie beim Codieren lernen, was neu und was alt ist.

Wenn Sie bereits wissen, was neu oder alt ist, und Sie eine einmalige App entwickeln, die mit Sicherheit nie aktualisiert wird, oder wenn Sie sicher sind, dass Sie neue API-Funktionen nicht unter bestimmten Bedingungen anbieten werden, verwenden Sie Option A. Sie werden nicht gestört mit veralteten Hinweisen, und Sie werden nie in der Lage sein, neuere API-Funktionen zu verwenden, selbst wenn Sie versucht sind, dies zu tun.

7
CGodo

Meine 2 Cent: Kompilieren Sie mit einer beliebigen Version des SDK, aber achten Sie darauf, dass Sie keine APIs aufrufen, die von Ihrer "SDK-Mindestversion" nicht unterstützt werden. Das bedeutet, dass Sie mit der neuesten Version des SDK "kompilieren" können.

Was die "Zielversion" betrifft, so bezieht sie sich einfach auf das, was Sie ursprünglich als Ziel geplant und möglicherweise getestet haben. Wenn Sie die Due Diligence nicht durchgeführt haben, können Sie Android auf diese Weise darüber informieren, dass einige zusätzliche Überprüfungen durchgeführt werden müssen, bevor die App "Lollipop" für "Oreo" bereitgestellt wird.

Die "Zielversion" ist also offensichtlich nicht niedriger als Ihre "minimale SDK-Version", aber sie kann nicht höher als Ihre "kompilierte Version" sein.

2
Prabhu M

Beantworten Sie Ihre direkten Fragen nicht, da es bereits viele detaillierte Antworten gibt, aber es ist erwähnenswert, dass im Gegensatz zur Android Dokumentation Android Studio vorgeschlagen wird, dasselbe zu verwenden Version für compileSDKVersion und targetSDKVersion.

enter image description here

1
sshturma

Die Anwendungseinstellungen der Eigenschaften eines Android -Projekts in Visual Studio 2017 (15.8.5) scheinen kombiniert zu sein, oder so etwas:

enter image description here

0
samis

compiledSdkVersion ==> welche SDK-Version soll Ihren Code zu Bytecode) kompilieren? (wird in der Entwicklungsumgebung verwendet) Punkt: Es ist besser, die letzte Version des SDK zu verwenden.

minSdkVersion ==> Dieses Element wird für die Installation von APK verwendet (wird in der Produktionsumgebung verwendet). Zum Beispiel:

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

Kurze Zusammenfassung:

Informationen zur minSDK-Version finden Sie im neuesten Eintrag im Twitter-Handle: https://Twitter.com/minSdkVersion

TargetSDKversion: Siehe neuesten Eintrag im Twitter-Handle: https://Twitter.com/targtSdkVersion oder verwenden Sie die neueste API-Version, wie unter devel https://developer.Android.com/guide angegeben /topics/manifest/uses-sdk-element.html

Kompilierte Version: Machen Sie es wie TargetSDKversion

maxSdkVersion: Der Rat von Android lautet, dies nicht festzulegen, da Sie Ihre App nicht auf zukünftige Android Versionen beschränken möchten

0
kush