Was ist der Unterschied zwischen der minimalen SDK-Version / Ziel-SDK-Version und der kompilierten SDK-Version?

214

Was sind die Unterschiede zwischen "min sdk version / target sdk version" und "compile sdk version"? Ich weiß, was min und target sdk bedeuten, aber was bedeutet das Kompilieren der sdk-Version?

In Eclipse habe ich min / max und Ziel-SDK, aber in Android Studio gibt es diese drei Einstellungen.

Tobias
quelle
Ich arbeite derzeit an einer App, in der ich die Ziel-Version als 12 verwendet habe und alle meine Layouts sehr abnormal funktionieren. Dann ändere ich sie wieder auf 23 und sie funktioniert wie ein Zauber. Ich denke, die Ziel-Version muss immer mit der kompilierten Version identisch sein
Shahid Sarwar,

Antworten:

232

Die min sdk-Version ist die früheste Version des Android SDK, auf der Ihre Anwendung ausgeführt werden kann. Normalerweise liegt dies an einem Problem mit den früheren APIs, mangelnder Funktionalität oder einem anderen Verhaltensproblem.

Das Ziel sdk Version ist die Version Ihrer Anwendung wurde gezielt zu laufen. Im Idealfall liegt dies an optimalen Laufbedingungen. Wenn Sie "Ihre App für Version 19 erstellen" würden, würde dies hier angegeben. Es kann auf früheren oder späteren Versionen laufen, aber das ist, was Sie angestrebt haben. Dies dient hauptsächlich dazu anzuzeigen, wie aktuell Ihre Anwendung für die Verwendung auf dem Markt usw. ist.

Die Compile SDK-Version ist die Version von Android, mit der Ihre IDE (oder andere Kompilierungsmethoden, nehme ich an) Ihre App erstellt, wenn Sie eine .apkDatei veröffentlichen. Dies ist nützlich zum Testen Ihrer Anwendung, da es häufig erforderlich ist, Ihre App während der Entwicklung zu kompilieren. Da dies die Version ist, die zu einer APK kompiliert werden soll, ist dies natürlich die Version Ihrer Version. Ebenso ist es ratsam, dass dies mit Ihrer Ziel-SDK-Version übereinstimmt.

Matt
quelle
Meine Kompilierungs-SDK-Version und meine Ziel-SDK-Version sind identisch. Das ist 21. Meine App stürzt ab, wenn ich sie auf Geräten mit niedrigerer API-Ebene ausführe. Ich bin neu in Android. Wie soll ich jetzt vorgehen?
prgmrDev
2
@prgmrDev Wenn Ihre App bei Versionen unter 21 abstürzt, sollten Sie wahrscheinlich Ihre minimale SDK-Version auf 21 setzen. Dadurch wird Ihre Anwendung nicht auf Zielen unter 21 behoben. Es wird lediglich darauf hingewiesen, dass Ihre App bei niedrigeren Versionen nicht unterstützt wird. Sie haben auch die Möglichkeit zu bestimmen, was genau Ihre Anwendung beschädigt (was sich in Version 21 geändert hat) und Unterstützung hinzuzufügen, um diese Abhängigkeit zu beseitigen, aber ich vermute, dass dies eine Menge Arbeit sein wird und nicht im Rahmen eines Android-Anfängers liegt Projekt.
Matt
1
Was passiert, wenn ich meine minSdkVersion = 14 setze? targetSdkVersion = 23; und SDK auf 19 kompilieren?
Thadeuszlay
5
@thadeuszlay Ihre Frage ist irrelevant, weil Sie ein wenig darüber nachdenken sollten, wie es möglich ist, sie mit 19 zu kompilieren, wenn Sie auf Version 23 laufen möchten! Bitte folgen Sie der Formel minSdkVersion <= targetSdkVersion <= compileSdkVersion
Asad
@Matt kann es vorkommen, dass ich bei der Verwendung von compileVersion 26 beispielsweise versehentlich eine Funktion oder Java-API verwende, die in Version 21, min sdk, nicht unterstützt wird? Entschuldigung, ich
bekomme
83

Die Formel lautet

minSdkVersion <= targetSdkVersion <= compileSdkVersion

minSdkVersion - ist ein Marker, der eine Mindestversion für Android definiert, auf der die Anwendung installiert werden kann. Außerdem wird es von Lint verwendet, um das Aufrufen einer nicht vorhandenen API zu verhindern. Dies wirkt sich auch auf die Erstellungszeit aus. Sie können also Build-Varianten verwenden, um minSdkVersion während der Entwicklung maximal zu überschreiben. Es wird helfen, das Erstellen mit allen Verbesserungen, die das Android-Team für uns bereitstellt, schneller zu machen. Beispielsweise sind einige Funktionen von Java 8 nur in einer bestimmten Version von minSdkVersion verfügbar.

targetSdkVersion - sagt, dass das Android-System bestimmte Verhaltensänderungen aktiviert .

Beispielsweise:

  • Ab Android 6.0 (API Level 23) Runtime Permissionswurden eingeführt. Wenn Sie targetSdkVersion22 oder weniger festlegen , fragt Ihre Anwendung einen Benutzer zur Laufzeit nicht nach einer Berechtigung.

  • Ab Android 8.0 (API-Level 26) müssen alle notificationseinem Kanal zugewiesen sein, sonst wird er nicht angezeigt. Auf Geräten mit Android 7.1 (API-Stufe 25) und niedriger können Benutzer Benachrichtigungen nur pro App verwalten (effektiv hat jede App nur einen Kanal unter Android 7.1 und niedriger).

  • Ab Android 9 (API-Level 28) , Web-based data directories separated by process. Wenn targetSdkVersion28+ ist und Sie mehrere WebViewin verschiedenen Prozessen erstellen , erhalten Siejava.lang.RuntimeException

compileSdkVersion - eigentlich handelt es sich um eine SDK-Plattformversion, die Gradle mitteilt, mit welchem ​​Android SDK kompiliert wird. Wenn Sie neue Funktionen verwenden oder .javaDateien aus dem Android SDK debuggen möchten, sollten Sie sich um compileSdkVersion kümmern. Ein weiteres Beispiel ist die Verwendung von AndroidX , das die Verwendung erzwingt compileSdkVersion- Stufe 28. compileSdkVersion ist in Ihrer APK nicht enthalten : Es wird ausschließlich bei verwendet compile time. Durch Ändern Ihrer compileSdkVersion wird das Laufzeitverhalten nicht geändert. Es kann zum Beispiel neue Compiler-Warnungen / Fehler erzeugen. Daher wird dringend empfohlen, immer mit dem neuesten SDK zu kompilieren. Sie erhalten alle Vorteile neuer Kompilierungsprüfungen für vorhandenen Code, vermeiden neu veraltete APIs und können neue APIs verwenden. Eine weitere Tatsache istcompileSdkVersion >= Support Library version

Sie können mehr darüber lesen Sie hier . Außerdem würde ich Ihnen empfehlen, sich das Beispiel der Migration auf Android 8.0 anzusehen .

yoAlex5
quelle
9
Beste Antwort hier, weil es tatsächlich den praktischen Unterschied zwischen targetSdkVersion und compileSdkVersion erklärt
Dean Wild
@ yoAlex5 Danke für deine Antwort. Ich sehe viele Fälle, in denen targetSdkVersion und compileSdkVersion gleich sind. Warum Android zwei als getrennt gemacht hat, kann nicht einer ausreichen, um damit umzugehen, oder gibt es einen bestimmten Grund, zwei getrennte Felder zu erstellen?
Manju
@ Manju finden Sie mehr in SO Thread stackoverflow.com/questions/26694108/…
yoAlex5
@ yoAlex5 Was meinst du mit "Android-System zum Aktivieren bestimmter Verhaltensänderungen"? Kannst du das bitte erklären?
k_kumar
@atishr 'spezifische Verhaltensänderungen' sind im Block 'Zum Beispiel' aufgeführt
yoAlex5
74

Die min sdk-Version ist die Mindestversion des Android-Betriebssystems, die zum Ausführen Ihrer Anwendung erforderlich ist.

Die Ziel-SDK-Version ist die Version von Android, für die Ihre App erstellt wurde.

Die Compile-SDK-Version ist die Version von Android, mit der die Build-Tools die Anwendung kompilieren und erstellen, um sie freizugeben, auszuführen oder zu debuggen.

Normalerweise sind die SDK-Version zum Kompilieren und die SDK-Zielversion identisch.

Anuraagie
quelle
23
Und wenn sie nicht die gleichen Vor- und Nachteile haben?
Pulver366
4

compileSdkVersion : Die 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, 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.

minSdkVersion : Die min sdk-Version ist die Mindestversion des Android-Betriebssystems, die zum Ausführen Ihrer Anwendung erforderlich ist.

targetSdkVersion : Die Ziel-SDK-Version ist die Version, auf der Ihre App ausgeführt werden soll.

Vinay John
quelle