Ich habe mir die Dokumentation zum Erstellen mit Gradle angesehen, bin mir aber immer noch nicht sicher, was der Unterschied zwischen compileSdkVersion
und targetSdkVersion
ist.
Alles was es sagt ist:
Die
compileSdkVersion
Eigenschaft gibt das Kompilierungsziel an.
Was ist das "Kompilierungsziel"?
Ich sehe zwei Möglichkeiten, dies zu interpretieren:
compileSdkVersion
ist die Version des Compilers, der beim Erstellen der App verwendet wird, währendtargetSdkVersion
es sich um die "API-Ebene handelt, auf die die Anwendung abzielt" . (Wenn dies der Fall wäre, würde ich annehmen,compileSdkVersion
dass größer oder gleich dem sein musstargetSdkVersion
?- Sie bedeuten dasselbe. "Kompilierungsziel" == "Die API-Ebene, auf die die Anwendung abzielt"
- Etwas anderes?
Ich sehe, dass diese Frage schon einmal gestellt wurde, aber die eine Antwort zitiert nur das Dokument, was mir unklar ist.
android
sdk
android-gradle-plugin
android-build
coder123
quelle
quelle
Antworten:
compileSdkVersion
Dies
compileSdkVersion
ist die Version der API, für die die App kompiliert wird. Dies bedeutet, dass Sie die in dieser API-Version enthaltenen Android-API-Funktionen (sowie natürlich alle früheren Versionen) verwenden können. Wenn Sie versuchen, API 16-Funktionen zu verwenden, diese jedochcompileSdkVersion
auf 15 eingestellt sind, wird ein Kompilierungsfehler angezeigt. Wenn SiecompileSdkVersion
16 festlegen , 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. DastargetSdkVersion
soll anzeigen, dass Sie Ihre App auf (vermutlich bis einschließlich) der von Ihnen angegebenen Version getestet haben. Dies ist eher eine Zertifizierung oder Abmeldung, die Sie dem Android-Betriebssystem als Hinweis darauf geben, wie es mit Ihrer App in Bezug auf die Betriebssystemfunktionen umgehen soll.Zum Beispiel, wie in der Dokumentation angegeben :
Das Android-Betriebssystem kann zur Laufzeit ändern, wie Ihre App im Kontext des Betriebssystems basierend auf diesem Wert stilisiert oder anderweitig ausgeführt wird. Es gibt einige andere bekannte Beispiele, die von diesem Wert beeinflusst werden, und diese Liste wird wahrscheinlich nur mit der Zeit zunehmen.
Für alle praktischen Zwecke möchten die meisten Apps
targetSdkVersion
die neueste veröffentlichte Version der API verwenden. Dadurch wird sichergestellt, dass Ihre App auf den neuesten Android-Geräten so gut wie möglich aussieht. Wenn Sie das nicht angebentargetSdkVersion
, wird standardmäßig das verwendetminSdkVersion
.quelle
targetSdkVersion
sehr wahrscheinlich höher alscompileSdkVersion
und zu Recht. Dies bedeutet, dass Sie zwar eine App für die API 16 entwickelt haben, diese jedoch unter API 21 (Lollipop) weiterhin einwandfrei funktioniert. Sie sollten die App auf 21 erhöhentargetSdkVersion
, um anzuzeigen, dass das Android-Betriebssystem alle möglichen Lollipop-Stile anwenden kann existieren zu Ihrer App.compileSdkVersion
zu einer höheren Version wechseln , möchten Sie einige neue APIs verwenden, die nur in dieser bestimmten Version enthalten sind. Wenn Sie nicht vorhaben, Lollipop-spezifische Funktionen in Ihrer App zu verwenden, gibt es (normalerweise) keinen Grund, jemalscompileSdkVersion
auf 21 zu setzen . Ihre App wird jedoch wahrscheinlich so wie sie ist auf API 21 einwandfrei ausgeführt, sodass Sie Änderungen vornehmentargetSdkVersion
zu zeigen , um Ihre Anwendung läuft , wie Sie (Ziel) erwarten auf API 21, aber Sie sind keine spezifische APIs 21 (Kompilierung) verwenden und somit IhrecompileSdkVersion
Dose Aufenthalt bei 15 in diesem Beispiel.Als Oneliner-Leitfaden:
Im Idealfall:
Lesen Sie mehr aus diesem großartigen Beitrag von Ian Lake
quelle
minSdkVersion
dass die App mit der niedrigsten Geräte-API-Ebenecan
ausgeführt wird? Vermutlich, weil bestimmte APIs verwendet werden, die ab sofortminSdkVersion
verfügbar sind?minSdkVersion
15 (ICS 4.0.3) ist, sollten Geräte mit API 14 (ICS 4.0) die App nicht installieren können. Und zumindest für den Moment läuft die App auf 15, 16, 17, 18, 19 (20, aber das ist für das alte Wear OS), 21, 22, 23, 24, 25, 26, 27, 28 und so weiter in der Zukunft (wahrscheinlich)Das
compileSdkVersion
sollte die neueste stabile Version sein. DietargetSdkVersion
sollten vollständig getestet werden und kleiner oder gleich seincompileSdkVersion
.quelle
targetSdkVersion
auf eine niedrigere setzen. DastargetSdkVersion
sollte also das sein, das Sie getestet haben und das genaue Verhalten kennen, und kann <= der neueste Stall sein.compileSdkVersion
sollte die neueste stabile Version sein" mit dem Zusatz "von dem Sie API-Funktionen verwenden" versehen werden sollte. Es ist nicht sinnvoll, mit API 27 (der neuesten stabilen API von heute) zu kompilieren, wenn Sie nur Funktionen mit niedrigeren API-Versionen verwenden. Die neueste stabile Version kann jedoch einige Funktionen enthalten, die automatisch verbessert werden, z. B. verbesserte Sicherheit oder effiziente Kompilierung mit Abwärtskompatibilität. Daher ist es ratsam, die neueste oder zumindest eine aktuelle stabile Version zu verwenden, aber es sollte [nicht] die neueste Version an sich sein .Spät zum Spiel ... und es gibt oben einige großartige Antworten - im Wesentlichen, dass dies die
compileSdkVersion
Version der API ist, gegen die die App kompiliert wurde, während dietargetSdkVersion
die Version angibt, gegen die die App getestet wurde.Ich möchte diese Antworten mit folgenden Anmerkungen ergänzen:
Das
targetSdkVersion
wirkt sich auf die Art und Weise aus, in der Berechtigungen angefordert werden :targetSdkVersion
23 oder höher ist, fordert die App zur Laufzeit vom Benutzer Berechtigungen an.targetSdkVersion
22 oder niedriger ist, fordert das System den Benutzer auf, die Berechtigungen zu erteilen, wenn der Benutzer die App installiert.Wenn das
compileSdkVersion
höher ist als die von Ihrer App deklarierte VersiontargetSdkVersion
, kann das System Kompatibilitätsverhalten aktivieren, um sicherzustellen, dass Ihre App weiterhin wie erwartet funktioniert. ( ref )Mit jeder neuen Android-Version ...
targetSdkVersion
sollte inkrementiert werden, um der neuesten API-Ebene zu entsprechen, und testen Sie Ihre Anwendung anschließend gründlich auf der entsprechenden PlattformversioncompileSdkVersion
Andererseits muss es nicht geändert werden, es sei denn, Sie fügen Funktionen hinzu, die exklusiv für die neue Plattformversion geltentargetSdkVersion
istcompileSdkVersion
es nicht ungewöhnlich, eine gut gewartete / etablierte App mit zu sehen , obwohl sie oft (anfangs) kleiner als die isttargetSdkVersion > compileSdkVersion
quelle
targetSdkVersion
Sie möglicherweise Kompatibilitätsverhalten feststellen , wenn die API-Ebene des Geräts, auf dem Sie ausgeführt werden, neuer ist als Ihre . Ich glaube nicht, dass es etwas mit dem zu tun hatcompileSdkVersion
.The CompileSdkVersion
ist die Version der SDK-Plattform, mit der Ihre App für die Kompilierung usw. arbeitet. WÄHREND des Entwicklungsprozesses (Sie sollten immer die neueste verwenden). Diese Version wird mit der von Ihnen verwendeten API-Version geliefertSie sehen dies in Ihrer
build.gradle
Datei:targetSdkVersion:
enthält die Informationen, mit denen Ihre App NACH dem Entwicklungsprozess an den App Store geliefert wird, der dies ermöglichtTARGET the SPECIFIED version of the Android platform
. 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, selbst wenn die aktuelle Version 23 ist.Schauen Sie sich diese offizielle Google- Seite genau an .
quelle
Ich sehe viele Unterschiede
compiledSdkVersion
in früheren Antworten, daher werde ich versuchen, hier ein wenig zu klären, indem ich der Webseite von Android folge.A - Was Android sagt
Laut https://developer.android.com/guide/topics/manifest/uses-sdk-element.html :
Das wäre also die richtige Reihenfolge laut 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. Daher wird entweder der Code so geändert, dass sie nicht verwendet werden, oder die Benutzer-API-Version wird zur Laufzeit überprüft, um sie bedingt mit Fallbacks für ältere API-Versionen 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.
Dies 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 vorhaben, zur Laufzeit je nach API-Ebene des Benutzers unterschiedliche API-Funktionen anzubieten, verwenden Sie Option B. Sie erhalten Hinweise zu den Funktionen, die Sie beim Codieren verwenden. Stellen Sie nur sicher, dass Sie niemals neuere API-Funktionen als minSdkVersion verwenden, ohne die Benutzer-API-Ebene zur Laufzeit zu überprüfen. Andernfalls stürzt Ihre App ab. Dieser Ansatz hat auch den Vorteil, dass beim Codieren gelernt wird, was neu und was alt ist.
Wenn Sie bereits wissen, was neu oder alt ist, und eine einmalige App entwickeln, die mit Sicherheit nie aktualisiert wird, oder wenn Sie sicher sind, dass Sie neue API-Funktionen nicht bedingt anbieten, verwenden Sie Option A. Sie werden nicht gestört mit veralteten Hinweisen und Sie werden niemals in der Lage sein, neuere API-Funktionen zu verwenden, selbst wenn Sie versucht sind, dies zu tun.
quelle
<uses-sdk>
Dokumentation ist äußerst vage und mehrdeutig.Meine 2 Cent: Kompilieren Sie mit einer beliebigen Version des SDK, aber achten Sie darauf, keine APIs aufzurufen, die Ihre "minimale SDK-Version" nicht unterstützt. Das bedeutet, dass Sie mit der neuesten Version des SDK "kompilieren" können.
Die "Zielversion" bezieht 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 Ihre auf "Oollo" ausgerichtete App "Lollipop" bereitgestellt wird.
Die "Zielversion" ist also offensichtlich nicht niedriger als Ihre "minimale SDK-Version", kann aber nicht höher als Ihre "kompilierte Version" sein.
quelle
Sie beantworten Ihre direkten Fragen nicht, da es bereits viele detaillierte Antworten gibt. Erwähnenswert ist jedoch, dass Android Studio entgegen der Android-Dokumentation die Verwendung derselben Version für
compileSDKVersion
und vorschlägttargetSDKVersion
.quelle
compiledSdkVersion ==> Welche Version des SDK 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 (es wird in der Produktionsumgebung verwendet). Zum Beispiel:
quelle
Kurze Zusammenfassung:
Informationen zu minSDKversion 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-Ebene, wie unter devel https://developer.android.com/guide/topics/manifest/uses-sdk-element angegeben. html
Kompilierte Version: Entspricht TargetSDKversion
maxSdkVersion: Der Rat von Android lautet, dies nicht festzulegen, da Sie Ihre App nicht darauf beschränken möchten, bei zukünftigen Android-Versionen keine Leistung zu erbringen
quelle
In den Anwendungseinstellungen der Eigenschaften eines Android-Projekts in Visual Studio 2017 (15.8.5) wurden diese kombiniert:
quelle