compileSdkVersion : compileSdkVersion definiert, welche Android SDK-Version von Gradle verwendet wird, um Ihre App zu kompilieren.
Zum Beispiel: In Android 12, also in SDK-Version 31, wurde eine neue Splash-Screen-API eingeführt, die es uns ermöglicht, eine Splash-Screen einfach zu implementieren. Wenn Sie diese API in Ihrer App verwenden möchten, müssen Sie die compileSdkVersion in Ihrer App auf 31 aktualisieren. Nur dann können Sie diese neue Splash-Screen-API in Ihrem Code verwenden, ansonsten erhalten Sie einen Kompilierungsfehler.
Dies bedeutet natürlich nicht, dass Sie nur diese neue API verwenden können und die Benutzer vergessen können, die ältere Android-Versionen haben, in denen diese API nicht verfügbar ist. Sie müssen auch eine alternative Möglichkeit bereitstellen, einen Splash-Screen für ältere Geräte anzuzeigen, indem Sie eine Versionsüberprüfungsbedingung verwenden.
*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
// Neue Splash-Screen-API
} else {
// Alter Splash-Screen-Ansatz
}*
Ebenso können in dieser Android SDK-Version einige Methoden oder Eigenschaften veraltet sein, und einige davon sogar entfernt werden. Deshalb werden Sie häufig beim Kompilieren nach dem Aktualisieren der compileSdkVersion in Ihrer App Warnungen und Fehler sehen.
Aber das Ändern der compileSdkVersion allein ändert tatsächlich nicht das Verhalten der App beim Ausführen auf einem Android-Gerät. Wie weiß also das Android-System, ob es mit Ihrer App neue Funktionalitäten verwenden kann oder nicht? Genau hier kommt targetSdkVersion ins Spiel.
targetSdkVersion : targetSdkVersion teilt dem System mit, für welche Android-Version die App entworfen und getestet wurde.
Zum Beispiel: In Android 12 wurde das Erscheinungsbild von benutzerdefinierten Benachrichtigungen geändert. Wenn Ihr targetSdkVersion unter 31 liegt, geht das System davon aus, dass Sie diese Funktion nicht getestet haben und zeigt Benachrichtigungen auf die alte Weise an, um das Risiko zu minimieren, dass Benachrichtigungen nicht richtig angezeigt werden. Erst nachdem Sie die target SDK-Version auf 31 aktualisiert haben, wird das neue Benachrichtigungsdesign verwendet.
Nicht alle Änderungen, die in neuen Android-Versionen eingeführt wurden, zielen auf diese abwärtskompatiblen Mechanismen ab. Für jede Veröffentlichung einer Android-Version werden Änderungen in der Dokumentation in zwei Gruppen unterteilt:
-> Verhaltensänderungen für Apps, die auf bestimmte Android-Versionen abzielen
-> und Änderungen für alle Apps, unabhängig davon, welche targetSdkVersion sie definieren.
Ein Beispiel für letzteres könnte die Einführung von einmaligen Berechtigungen in Android 11 sein. Wenn das Gerät Android-Version 11 oder höher verwendet und die App um Standortberechtigung bittet, kann der Benutzer vorübergehenden Zugriff auf diese Daten gewähren und die App muss diesen Fall ordnungsgemäß behandeln, unabhängig davon, ob sie SDK-Version 30 anzielt oder nicht.
Beziehung zwischen compile und target SDK-Versionen:
-> targetSdkVersion kann nicht höher sein als die compileSdkVersion, einfach weil wir während des Kompilierens nichts anzielen können, von dem wir nichts wissen.
-> Idealerweise sollten compileSdkVersion und targetSdkVersion gleich sein und beide auf das neueste SDK zeigen.