Guten Abend Freunde. Wir haben eine nützliche Übersetzung für zukünftige Studenten des Android-Entwicklers vorbereitet . Fortgeschrittenenkurs . “ Wir freuen uns, dieses Material mit Ihnen zu teilen.
Wenn Sie diesen Artikel lesen, bedeutet dies, dass Sie möglicherweise an folgenden Dingen interessiert sind:
- Was bedeutet die API-Ebene?
- Wie verwende
compileSdkVersion
, minSdkVersion
oder targetSdkVersion
? - Wie kann ich garantieren, dass die Anwendung auf Geräten mit verschiedenen Versionen des Betriebssystems ordnungsgemäß funktioniert?

Alle diese Konzepte sind miteinander verbunden, und ich werde versuchen, sie Ihnen in diesem Artikel auf einfache, aber effektive Weise zu erklären.
Dazu müssen Sie den Unterschied zwischen dem
SDK und der
API verstehen und
die API-Ebene im Android-Ökosystem kennen.
In Android besteht zwar eine 1: 1-Beziehung zwischen dem SDK und der API, und diese beiden Begriffe werden häufig synonym verwendet. Es ist jedoch wichtig zu verstehen, dass dies nicht dasselbe ist.
Es ist richtiger zu sagen, dass es für jede Android-Version ein SDK und eine entsprechende API sowie die Ebene dieser API gibt.
SDK
Es steht für
Software Development Kit . Achten Sie auf das Wort "Kit" (Kit) ... es besteht nur aus einer Reihe verschiedener Tools, Bibliotheken, Dokumentationen und Beispielen, mit denen Entwickler Android-Anwendungen erstellen, debuggen und ausführen können. Mit dem SDK wird eine API bereitgestellt.
Wenn Sie den
SDK-Manager in Android Studio öffnen, können Sie klarer sehen, woraus das Android SDK besteht.
Auf der ersten Registerkarte des
Platform SDK werden die SDKs jeder Android-Version aufgelistet.
Wie in der Abbildung unten gezeigt, enthält das Android 9.0 SDK (auch als Pie bekannt):
- Android SDK Platform 28 (dies ist die Framework- API ).
- Der Quellcode für Android 28 (dies ist eine Implementierung der API, wie Sie sehen können, sie ist optional ... denken Sie daran).
- und eine Reihe anderer Dinge ... zum Beispiel verschiedene System-Images für den Android-Emulator.
Übersicht über das SDK im Android Studio SDK Manager.Auf der zweiten Registerkarte der
SDK-Tools werden andere Tools angezeigt, die ebenfalls Teil des SDK sind, jedoch von der Plattformversion unabhängig sind. Dies bedeutet, dass sie separat freigegeben oder aktualisiert werden können.
API
Es steht für
Application Programming Interface . Es ist nur eine Schnittstelle, eine Abstraktionsschicht, die eine Verbindung zwischen zwei verschiedenen „Teilen“ von Software herstellt. Es funktioniert wie ein Vertrag zwischen einem Anbieter (z. B. einer Bibliothek) und einem Verbraucher (z. B. einer Anwendung).
Dies ist eine Reihe formaler Definitionen wie Klassen, Methoden, Funktionen, Module und Konstanten, die von anderen Entwicklern zum Schreiben ihres Codes verwendet werden können. Die API enthält jedoch keine Implementierung.
API-Ebene
Die API-Ebene ist ein ganzzahliger Wert, der die Version der von der Android-Plattform angebotenen Framework-API eindeutig identifiziert.
In der Regel werden Plattform-Framework-API-Updates so konzipiert, dass die neue Version der API mit früheren Versionen kompatibel bleibt. Daher sind die meisten Änderungen an der neuen API additiv und die alten Teile der API sind veraltet, werden jedoch nicht gelöscht.
Und jetzt mag sich jemand fragen ...
Wenn die Android-API keine Implementierung bereitstellt und der
SDK-Manager einen optionalen herunterladbaren API-Quellcode als Teil des SDK bereitstellt, wo befindet sich dann die entsprechende Implementierung?
Die Antwort ist einfach.
Auf dem Gerät.Lass es uns herausfinden ...
Vom Quellcode zur APK-Datei
In der Regel besteht ein Android-Projekt aus Code, der von Entwicklern mithilfe der Android-API (Anwendungsmodul) geschrieben wurde, sowie aus einigen anderen Bibliotheken / Abhängigkeiten (JAR-Dateien, AAR, Modulen usw.) und Ressourcen.
Der Kompilierungsprozess konvertiert in Java oder Kotlin geschriebenen Code, einschließlich Abhängigkeiten (einer der Gründe, Ihren Code zu reduzieren!), In DEX-Bytecode und komprimiert dann alles zusammen mit Ressourcen in eine APK-Datei. Zu diesem Zeitpunkt ist die Implementierung der API nicht in der endgültigen APK enthalten!
Build-Prozess - Android-EntwicklerDEX-Dateien und Android Runtime
Android-Architektur - Android-EntwicklerAndroid Runtime ist der Ort, an dem die ganze Drecksarbeit erledigt und die DEX-Dateien ausgeführt werden. Es besteht aus zwei Hauptkomponenten:
- Eine virtuelle Maschine , die die Portabilität des Codes und die Plattformunabhängigkeit nutzt. Ab Android 5.0 (Lollipop) wurde die alte Laufzeit Dalvik Virtual Machine vollständig durch die neue Android RunTime (ART) ersetzt. Dalvik verwendete den JIT-Compiler, während ART die AOT-Kompilierung (Ahead of Time) plus JIT verwendet, um den Code zur Laufzeit zu profilieren.
- Basisbibliotheken sind Standardbibliotheken für Java und Android. Einfach ausgedrückt befindet sich hier die API-Implementierung.
Die auf dieser Ebene verfügbare Version der API entspricht der Version der Android-Plattform, auf der die Anwendung ausgeführt wird.
Wenn beispielsweise Android 9 (Pie) auf dem tatsächlichen Gerät installiert ist, sind alle APIs bis Stufe 28 verfügbar.
Wenn Sie die wichtigsten Punkte von Android Runtime und die Rolle der API verstehen, sollte die
minSdkVersion
und
Vorwärtskompatibilität sowie die Verwendung von
compileSdkVersion
,
minSdkVersion
und
targetSdkVersion
leicht zu verstehen
targetSdkVersion
.
compileSdkVersion
Dieser Wert wird nur verwendet,
um Gradle mitzuteilen, mit welcher Version des SDK Ihre Anwendung kompiliert werden soll. Auf diese Weise können Entwickler auf alle verfügbaren APIs zugreifen, bis die für
compileSdkVersion
festgelegte API-Ebene
compileSdkVersion
.
Das Kompilieren mit dem neuesten SDK wird dringend empfohlen:- Dank eines hohen API-Niveaus können Entwickler die neueste API und die Möglichkeiten neuer Plattformen nutzen.
- Um die neueste Version von
SupportLibrary
, muss compileSdkVersion
mit der Version von SupportLibrary
.
Um beispielsweise
SupportLibrary-28.xx
, muss
compileSdkVersion
ebenfalls 28 sein.
- Um zu AndroidX zu wechseln oder es zu verwenden, muss compileSdkVersion auf mindestens 28 eingestellt sein.
- bereit sein, die Anforderungen der Ziel-API-Ebene von Google Play zu erfüllen. Google hat angekündigt, jedes Jahr eine Mindest-API-Zielstufe für neue Anwendungen und Updates festzulegen, um die neuen Android-Versionen schneller auf dem Google-Markt zu verbreiten. Weitere Informationen finden Sie hier und hier .
Android-Anwendungen sind mit neuen Versionen der Android-Plattform kompatibel, da Änderungen an der API normalerweise additiv sind und die alte API möglicherweise veraltet ist, aber nicht entfernt wird.
Dies bedeutet, dass die
direkte Kompatibilität hauptsächlich von der Plattform garantiert wird. Wenn Sie die Anwendung auf einem Gerät mit einer höheren API-Ebene als der in
compileSdkVersion
angegebenen
compileSdkVersion
, treten zur Laufzeit keine Probleme auf. Die Anwendung funktioniert wie erwartet neuere Versionen der Plattform.
Zum Beispiel:
Die Anwendung +
compileSdkVersion =
26 und die in
API-Ebene 26 eingeführte API
xyz()
-Methode können auf einem Gerät mit Android 8 Oreo (API-Ebene 26) verwendet werden.
Dieselbe Anwendung kann auf einem Gerät mit Android 9 Pie (API-Ebene 28) ausgeführt werden, da die API-Methode
xyz()
auf API-Ebene 28 weiterhin verfügbar ist.
minSdkVersion
Dieser Wert gibt die minimale API-Ebene an, auf der die Anwendung ausgeführt werden kann.
Dies ist eine Mindestanforderung. Wenn nicht angegeben, ist der Standardwert 1 .
Entwickler müssen den richtigen Wert festlegen und den korrekten Betrieb der Anwendung bis zu dieser API-Ebene sicherstellen. Dies wird als
Abwärtskompatibilität bezeichnet .
Während der Entwicklung warnt
Lint
Entwickler auch, wenn sie versuchen, eine API zu verwenden, die unter der in
minSdkVersion
angegebenen API
minSdkVersion
.
Es ist sehr wichtig, die Warnungen nicht zu ignorieren und zu korrigieren!Um die
Abwärtskompatibilität sicherzustellen, können Entwickler die Version der Plattform zur Laufzeit überprüfen und die neue API in neueren Versionen der Plattform und die alte API in älteren Versionen verwenden oder je nach Fall einige statische Bibliotheken verwenden, die Abwärtskompatibilität bieten.
Es ist auch wichtig zu erwähnen, dass der Google Play Store diesen Wert verwendet, um zu bestimmen, ob die Anwendung auf einem bestimmten Gerät installiert werden kann, indem die Version der Geräteplattform mit der
minSdkVersion
Anwendung
minSdkVersion
wird.
Entwickler sollten bei der Auswahl dieses Werts sehr vorsichtig sein, da die Abwärtskompatibilität von der Plattform nicht garantiert wird.
Die Auswahl des „richtigen“ Werts für ein Projekt ist auch eine Geschäftsentscheidung, da sich dies darauf auswirkt, wie groß das Publikum der Anwendung sein wird. Schauen Sie sich die
Verteilung der Plattformen an .
Zum Beispiel:
Die Anwendung +
compileSdkVersion =
26 +
minSdkVersion
=
22 und die in API Level 26 eingeführte API
xyz()
-Methode können auf einem Gerät mit Android 8 Oreo (API Level 26) verwendet werden.
Dieselbe Anwendung kann auf einem älteren Gerät mit Android 5.1 Lollipop (API-Level 22) installiert und ausgeführt werden, auf dem die API-Methode
xyz()
nicht vorhanden ist. Wenn die Entwickler weder durch Laufzeitprüfungen noch durch Bibliotheken Abwärtskompatibilität bereitgestellt haben, stürzt die Anwendung ab, sobald sie versucht, auf die
xyz()
API-Methode zuzugreifen.
targetSdkVersion
Dieser Wert gibt die API-Ebene an, auf der die Anwendung entwickelt wurde.
Verwechseln Sie es nicht mit
compileSdkVersion
. Letzteres wird nur zur Kompilierungszeit verwendet und stellt Entwicklern neue APIs zur Verfügung. Die erste ist dagegen Teil der APK (sowie der
minSdkVersion
) und ändert das Verhalten der Laufzeit. Auf diese Weise können Entwickler die
direkte Kompatibilität steuern.
Manchmal kann es zu API-Änderungen im Basissystem kommen, die sich auf das Verhalten der Anwendung auswirken können, wenn Sie in einer neuen Laufzeitumgebung arbeiten.
Die Zielanwendungsebene enthält ein Laufzeitverhalten, das für die Plattformversion spezifisch ist. Wenn die Anwendung nicht bereit ist, diese Änderungen am Laufzeitverhalten zu unterstützen, schlägt sie wahrscheinlich fehl.
Ein einfaches Beispiel ist die
Runtime Permission , die in Android 6 Marshmallow (API Level 23) eingeführt wurde.
Eine Anwendung kann mithilfe einer API der Ebene 23 kompiliert werden, verfügt jedoch über eine API der Zielebene 22, wenn sie noch nicht bereit ist, das neue Laufzeitberechtigungsmodell zu unterstützen.
Somit kann eine Anwendung weiterhin kompatibel sein, ohne ein neues Laufzeitverhalten einzubeziehen.
Wie bereits erwähnt, benötigt Google in jedem Fall Anwendungen, um die neuen Anforderungen der Ziel-API-Ebene zu erfüllen. Daher sollte die Aktualisierung dieses Werts immer eine hohe Priorität haben.
Wenn wir nun alles zusammenfügen, sehen wir eine klare Beziehung
minSdkVersion ≤ targetSdkVersion ≤ compileSdkVersion
Beachten Sie, dass dringend empfohlen wird, mit der neuesten API-
Version zu kompilieren und zu versuchen,
targetSdkVersion ==
compileSdkVersion zu verwenden .
Quellen