748 Stimmen

Was ist der Unterschied zwischen compileSdkVersion und targetSdkVersion?

Ich habe mir die Dokumentation zum Erstellen mit Gradle angesehen, aber ich bin immer noch nicht sicher, was der Unterschied zwischen compileSdkVersion und targetSdkVersion ist.

Alles, was es sagt, ist:

Die `compileSdkVersion`-Eigenschaft gibt das Kompilierungsziel an.

Nun, was ist das "Kompilierungsziel"?

Ich sehe zwei mögliche Interpretationen:

  1. compileSdkVersion ist die Version des Compilers, der zum 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 davon ausgehen, dass compileSdkVersion größer als oder gleich targetSdkVersion sein müsste?
  2. Sie bedeuten dasselbe. "Kompilierungsziel" == "die API-Ebene, auf die die Anwendung abzielt"
  3. Etwas anderes?

Ich sehe, dass diese Frage bereits gestellt wurde, aber die eine Antwort zitiert einfach die Dokumentation, die für mich unklar ist.

740voto

Jeffrey Mixon Punkte 12966

Kompilierungs-SDK-Version

Die compileSdkVersion ist die Version der API, gegen die die App kompiliert wird. Das bedeutet, dass Sie Android-API-Funktionen verwenden können, die in dieser API-Version enthalten sind (sowie in allen vorherigen Versionen, offensichtlich). Wenn Sie versuchen Funktionen der API 16 zu verwenden, aber compileSdkVersion auf 15 setzen, erhalten Sie einen Kompilierungsfehler. Wenn Sie compileSdkVersion auf 16 setzen, können Sie die App immer noch auf einem Gerät mit API 15 ausführen, solange die Ausführungspfade Ihrer App keine APIs spezifisch für API 16 aufrufen.

Ziel-SDK-Version

Die targetSdkVersion hat nichts damit zu tun, wie Ihre App kompiliert wird oder welche APIs Sie nutzen können. Die targetSdkVersion soll anzeigen, dass Sie Ihre App auf (vermutlich bis einschließlich) der von Ihnen angegebenen Version getestet haben. Dies ist eher wie eine Zertifizierung oder Bestätigung, die Sie dem Android-Betriebssystem als Hinweis darauf geben, wie es mit Ihrer App in Bezug auf OS-Funktionen umgehen soll.

Zum Beispiel, wie die Dokumentation besagt:

Zum Beispiel ermöglicht das Festlegen dieses Werts auf "11" oder höher dem System, Ihrem App eine neue Standard-Themen (Holo) zuzuweisen, wenn es auf Android 3.0 oder höher läuft...

Das Android-Betriebssystem kann zur Laufzeit ändern, wie Ihre App gestaltet ist oder anderweitig in Bezug auf das Betriebssystem ausgeführt wird, basierend auf diesem Wert. Es gibt einige weitere bekannte Beispiele, die von diesem Wert beeinflusst werden, und diese Liste wird wahrscheinlich im Laufe der Zeit nur zunehmen.

Zu praktischen Zwecken werden die meisten Apps die targetSdkVersion auf die neueste veröffentlichte Version der API setzen wollen. Dies stellt sicher, dass Ihre App auf den aktuellsten Android-Geräten so gut wie möglich aussieht. Wenn Sie die targetSdkVersion nicht angeben, wird sie auf die minSdkVersion standardmäßig gesetzt.

242voto

Jimmy Kane Punkte 15004

Als Leitfaden in einer Zeile:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

Am besten:

minSdkVersion (möglichst niedrig) <= targetSdkVersion == compileSdkVersion (neueste SDK-Version)

Mehr dazu in diesem großartigen Beitrag von Ian Lake

P.S. Und wie von @sshturma in der Antwort unten abgekürzt:

63voto

Austin Punkte 7379

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

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

  1. Dass targetSdkVersion beeinflusst die Art und Weise, wie Berechtigungen angefordert werden:
  • Wenn das Gerät Android 6.0 (API-Level 23) oder höher ausführt und die targetSdkVersion der App 23 oder höher ist, fordert die App Berechtigungen vom Benutzer zur Laufzeit an.
  • Wenn das Gerät Android 5.1 (API-Level 22) ausführt oder niedriger ist oder die targetSdkVersion der App 22 oder niedriger ist, fragt das System den Benutzer, ob er die Berechtigungen bei der Installation der App gewähren möchte.
  1. Wenn die compileSdkVersion höher ist als die von Ihrer App deklarierte Version von targetSdkVersion, kann das System Kompatibilitätsverhalten aktivieren, um sicherzustellen, dass Ihre App weiterhin wie erwartet funktioniert. (ref)

  2. Mit jedem neuen Android-Release...

  • targetSdkVersion sollte erhöht werden, um mit dem neuesten API-Level übereinzustimmen, und dann Ihre Anwendung auf der entsprechenden Plattformversion eingehend testen
  • compileSdkVersion hingegen muss nicht geändert werden, es sei denn, Sie fügen Funktionen hinzu, die exklusiv für die neue Plattformversion sind
  • Als Ergebnis, während targetSdkVersion oft (anfangs) weniger als die compileSdkVersion ist, ist es nicht ungewöhnlich, eine gut gepflegte/etablierte App mit targetSdkVersion > compileSdkVersion zu sehen

39voto

androidwifi Punkte 939

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

24voto

Die CompileSdkVersion ist die Version der SDK-Plattform, mit der Ihre App während des Entwicklungsprozesses kompiliert wird, usw. (Sie sollten immer die neueste Version verwenden). Dies wird mit der von Ihnen verwendeten API-Version geliefert.

Geben Sie hier eine Bildbeschreibung ein

Sie finden dies in Ihrer build.gradle Datei:

Geben Sie hier eine Bildbeschreibung ein

targetSdkVersion: enthält die Informationen, mit denen Ihre App NACH dem Entwicklungsprozess in den App Store geliefert wird, sodass sie die SPEZIFIZIERTE Version der Android-Plattform ANZIELEN kann. Abhängig von der Funktionalität Ihrer App kann diese API-Versionen anzielen, die niedriger sind als die aktuelle Version. So können Sie beispielsweise API 18 anzielen, auch wenn die aktuelle Version 23 ist.

Sehen Sie sich diese offizielle Google Seite an.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X