Wie funktionieren die Android-Supportbibliotheken?

Lesezeit: 9 Minuten

Wie funktionieren die Android Supportbibliotheken
Hesam

Soweit ich weiß, wird die Supportbibliothek verwendet, da alte Geräte keine neuen APIs haben. Zum Beispiel wissen sie nicht, was Fragment ist und wie man es implementiert. Daher sind diese Verhaltensweisen in der Supportbibliothek definiert.

Meine Hauptfrage ist also, was ist / sind die Unterschiede zwischen der Bibliothek von Fragment in der Support-Bibliothek mit ihrem Zwilling, der in API 11 (Android v3.0, Honeycomb) eingeführt wird.

Meine zweite Frage lautet: Wenn es möglich ist, jede neue API in die Supportbibliothek aufzunehmen, warum haben wir dann zwei Arten von Bibliotheken? Ich meine, Android kann alle APIs direkt unter der Support-Bibliothek freigeben, anstatt die Support-Bibliothek und die Android-Version X.xx-Bibliothek zu unterstützen.

1641783673 995 Wie funktionieren die Android Supportbibliotheken
Umar Qureshi

Soweit ich verstanden habe, können Support-Bibliotheken als Alternative zu integrierten APIs funktionieren, sollten dies jedoch nicht sein, da sie sich direkt auf die Größe der Anwendung auswirken.

Zum Beispiel ist eine Support-Bibliothek 2 MB groß, und um ihre Funktionalität zu nutzen, benötigt sie alle Klassen, Ressourcen usw. (von 2 MB), also jetzt classes.dex (Dalvik ausführbare Datei aller Klassen, die in der Anwendung verwendet werden) meiner Anwendung enthalten auch, dass Bibliotheksklassen unterstützt werden, und dasselbe für Ressourcen. Wenn also meine App-Größe ohne Support-Bibliothek 1 MB betrug, beträgt die Größe jetzt mit Support-Bibliothek 2 MB zusätzlich, was insgesamt 3 MB bedeutet.

Angenommen, diese Supportbibliotheksfunktion ist so verbreitet, dass auf einem einzelnen Gerät, wenn ich 10 Apps habe, mindestens 9 dieselbe Supportbibliothek verwenden, also 9 * 2 = 18 MB auf meinem Gerät von derselben Supportbibliothek verwendet werden. was sich in jeder Anwendung wiederholt, was schlecht ist, denn im Moment sind 18 MB vielleicht nicht so viel, aber der benötigte Speicherplatz kann steigen, wenn Sie mehr Anwendungen haben, die diese Unterstützungsbibliothek verwenden.

Daher ist die beste Option, diese 2 MB Support-Bibliothek bereits in Ihrem Betriebssystem für eine beliebige Anzahl von Apps zu haben, anstatt sie für jede Anwendung zu haben. Supportbibliotheken sind also dafür gedacht, wenn Sie wirklich möchten, dass einige effiziente Funktionen in Ihrer App ältere Versionen unterstützen.

Hier stellt sich noch eine andere Frage:

Warum wird diese Support-Bibliothek nicht als eigenes Update zum Betriebssystem hinzugefügt, damit jede App ohne Größenprobleme auf diese Funktionalität zugreifen kann?

Die Antwort ist, dass es viele Fehler geben kann. Angenommen, ein Benutzer hat dieses Update (Supportbibliothek) nicht installiert…

Es besteht auch die Möglichkeit, dass es als Update nicht so effizient funktioniert wie erwartet oder Probleme bei der Integration mit dem Betriebssystem verursacht, da wir bereits gesehen haben, dass jedes Betriebssystem (Windows, Linux, Mac) mit neuen Versionen geliefert wird. anstatt nur lebenslange Updates für alle neuen Funktionen zu geben.

  • Wenn der Entwickler keine der Funktionen der Supportbibliothek benötigt, verwenden Sie sie auf keinen Fall. Im Großen und Ganzen sind 2 MB jedoch nicht so viel, und ich würde eine gut funktionierende und abwärtskompatible App einer auf das Wesentliche reduzierten App vorziehen, nur weil der Entwickler befürchtete, dass die APK war zu groß. Außerdem können Sie Proguard wahrscheinlich sowieso verwenden, um die APK-Dateigröße der Anwendung zu reduzieren / zu komprimieren.

    – Alex Lockwood

    31. März ’14 um 20:45 Uhr


  • Ich stimme Ihrer Antwort nicht zu, dass ein Benutzer, der nicht über die Supportbibliothek verfügt, viele Fehler verursachen kann. Mit der Manifestdatei können Sie Ihre App bereits darauf beschränken, auf einem Gerät mit einer bestimmten OpenGL-Version zu funktionieren. Sie hätten dasselbe für die Support-Bibliothek tun können, sie könnten sogar die Funktionalität erweitern, um eine dynamische Abhängigkeit von jeder Bibliothek zu ermöglichen. Auf den meisten Linux-basierten Betriebssystemen ist dies derzeit bereits so.

    – Jeroen

    4. Juli ’15 um 19:16

Wie funktionieren die Android Supportbibliotheken
CompEng88

Android 4.0.x (ICS) hat im Vergleich zu Android 2.3.x (Gingerbread) viele zusätzliche Funktionen. Die Kompatibilitätsbibliotheken sind dazu da, einige der Änderungen zu überbrücken, die an ICS hinzugefügt wurden und die von Gingerbread unterstützt werden könnten. “könnte sein” ist hier der Schlüsselbegriff, weil es eine Menge Änderungen an ICS gibt, die nie mit Gingerbread funktionieren würden und die natürlich keine Kompatibilitätsbibliothek erhalten.

Fragmente, die Sie beispielsweise angesprochen haben, werden in ICS tatsächlich etwas anders verarbeitet als in der Kompatibilitätsbibliothek, da ICS mehr Funktionen bietet, die es verwenden kann. Wenn Sie sich den Code für ICS für die Fragments-Klasse ansehen, sind diese nicht mit denen in der Kompatibilitätsbibliothek identisch. Es ist ein ganzer zweiter Codesatz, um etwas “wie” die Fragmente in ICS in einer älteren Version wie Gingerbread zu verwenden, ohne dass der Programmierer einen großen Unterschied bemerkt.

Das ist der Punkt der Kompatibilitätsbibliotheken und der Grund, warum sie nicht verwendet werden, um Gingerbread umfassend zu patchen, um alle Funktionen in ICS zu nutzen (sie können es einfach nicht). Der Sinn der Kompatibilitätsbibliotheken besteht darin, Dinge zu verbinden, die in neueren Versionen von Android wie ICS verfügbar sind, auf dem ICS-Weg in ältere Versionen wie GB, auf dem GB-Weg.

Warum sie nicht nur die Supportbibliothek wachsen lassen und das gleiche Basisbetriebssystem belassen – die Antwort darauf sind Kompatibilitätsprobleme. Was passiert, wenn ein Benutzer nur v4 hat und v12 draußen ist? Android verwendet derzeit die Android-API-Version des Betriebssystems als Grundlage für die Anwendungskompatibilität und Entwickler haben eine Möglichkeit zu enthalten Bibliotheken unterstützen (die Dateigröße ihrer App erhöhen, ihnen aber neuere Funktionen geben). Jede Anwendung, die Unterstützungsbibliotheken verwendet, enthält diese unabhängig (d. h. 4 Apps = 4x enthalten).

Die Idee ist, dass Sie nur Apps herunterladen dürfen, die von der aktuellen API-Version Ihres Betriebssystems unterstützt werden (soweit es Google Play betrifft) und Sie können sich dafür entscheiden, Support-Bibliotheken einzubinden, um das Erscheinungsbild Ihrer App für ältere APIs zu unterstützen haben noch keine Funktionen, die Sie diesen Benutzern auf neueren APIs zur Verfügung stellen möchten. Es ist wirklich mehr als alles andere eine Überlegung hinsichtlich des Aussehens und des Gefühls.

Hoffe das klärt die Sache 🙂

  • Die Support-Bibliotheken sind also im Betriebssystem enthalten, richtig?

    – Clocker

    11. Mai ’15 um 18:17

  • Nicht genau. Neuere Versionen des Betriebssystems verfügen über Funktionen, die Sie ohne die Unterstützungsbibliotheken implementieren können, aber wenn Sie möchten, dass ältere Telefone funktionieren, müssen Sie die Unterstützungsbibliotheken manuell hinzufügen und die Klassen in diesen verwenden (es sind einfach.jar-Dateien, die Sie zu Ihrem hinzufügen). Pfad erstellen). ADT fügt Ihrem Projekt jetzt automatisch Support-Bibliotheken hinzu, wenn Sie eine niedrigere Mindest-API anstreben, damit Sie diese erweiterten Funktionen trotzdem erhalten, aber Ihr Projekt nimmt dadurch mehr Platz ein. Manchmal ist es einfach besser, eine höhere API zu verwenden, damit Sie stattdessen nativen Code verwenden, aber das liegt an Ihnen und auf welche Kompatibilität Sie verzichten können.

    – CompEng88

    13. Mai ’15 um 1:54


Was schon gesagt wurde, ist wahr. Obwohl einige Details fehlen. Tatsächlich hatte ich die Gelegenheit, an einer Sitzung im letzten Google IO teilzunehmen, in der speziell darüber gesprochen wurde. Es war für mich überraschend zu erfahren, dass die Support-Bibliothek nicht den Code für alle möglichen API-Versionen hostet, sondern eine Anpassung der neuen Funktionen ist, die ihrer Meinung nach relevant genug sind, um sie für ältere Plattformen verfügbar zu machen. So funktioniert es im Allgemeinen wie folgt:

  • Nehmen wir an, wir müssen den brandneuen (ab API 16 verfügbaren) ConnectivityManager verwenden, um Netzwerkänderungen zu verfolgen
  • Wir binden Support-Bibliotheken v4 ein und verwenden die Klasse
  • Danach überprüft das System unsere API-Version und führt integrierten nativen Code aus, falls wir uns in API 16 befinden, oder führt in anderen Fällen den Code der Support-Bibliothek aus.

Es verhält sich also wie eine Art Route-Gateway. Der Grund dafür ist, dass es im Allgemeinen effizienter (und leistungsfähiger) ist, den letzten für das letzte Betriebssystem optimierten Code und die letzten Systemverbesserungen (zB: Hardwarebeschleunigung) zu verwenden.

Nichtsdestotrotz gibt es einige Elemente, die nicht in die Compat-Bibliothek übersetzt wurden, wie sie im nativen integrierten Code enthalten sind. Fragmente sollten beispielsweise nicht neu geschrieben werden, da sie von API13 stammen, da sie eine riesige Komponente sind, die in einer Vielzahl verschiedener Szenarien innerhalb von Systemen und Geräten mit weniger Fähigkeiten ausgeführt werden muss.

Letztendlich und aus diesem Grund wird empfohlen, Compats-Bibliotheken zu verwenden, was als bewährte Methode bekannt ist, insbesondere wenn Sie beabsichtigen, Ihre Apps / Ihren Code für ältere Versionen bereitzustellen (was der ideale Weg sein sollte).

  • Bitte geben Sie weitere Informationen zu dieser Sitzung an. Gibt es ein Video oder Skript online?

    – Eine Welt

    16. Januar ’14 um 13:09

  • Ich kann mich leider nicht an die spezifische Sitzung erinnern, aber hier sind alle Videos von IO ’12. developer.google.com/events/io/2012 Ich hoffe es hilft.

    – Jose L Ugia

    17. Januar ’14 um 15:13

1641783673 470 Wie funktionieren die Android Supportbibliotheken
Kaedil

Die Supportbibliothek enthält tatsächlich nicht alles, was in den neueren APIs enthalten ist. Es unterstützt Teile der Fragment-API, unterstützt jedoch noch nicht ActionBar. Dafür benötigen Sie eine andere Bibliothek wie ActionBar Sherlock.

Warum gibt es zwei Bibliotheken?

Da ein Teil des Problems darin bestand, dass Google nur einige der Dinge zurückportierte, aber ich verstehe, dass einige der neuen Funktionen aufgrund von Einschränkungen des Betriebssystem-Frameworks und fehlenden APIs tief im Kern von Android nicht zurückportiert werden können UI-Framework.

Android hat in den letzten Versionen coole Funktionen für Fragmente und Aktionsleisten entwickelt.

Wenn wir nun diese Funktionen nutzen und auch ältere Android-Versionen unterstützen möchten, müssen wir einen sehr unordentlichen versionabhängigen Code schreiben, was nicht gut ist.

Um uns vor all diesem Chaos zu bewahren, hat Android eine Support-Bibliothek entwickelt, die neue Funktionen nicht vollständig unterstützt, aber gut genug ist, um Entwicklern das Schreiben von ordentlichem Code zu ermöglichen, der auf allen Geräten unterstützt wird.

Die Antwort auf Ihre zweite Frage ist sehr einfach, Fragmente sind in v3.0 integriert und wenn Sie möchten, dass Ihre Anwendung nur auf v3.0+ läuft, müssen Sie wirklich keine externe Bibliothek einbinden.

1641783673 982 Wie funktionieren die Android Supportbibliotheken
JaLoveAst1k

Fragmente aus der Support-Bibliothek, die Fragmenten von Honeycomb+ entsprechen.

Zur zweiten Quest, aus der Dokumentation:

v13 ist eine Obermenge von v4 und enthält zusätzliche Supportklassen um mit v13 APIs zu arbeiten

dh die gleiche Funktion, nur angepasst an v13 API.

Ich verwende eine modifizierte v4-Unterstützungsbibliothek – mit Karten.

.

265540cookie-checkWie funktionieren die Android-Supportbibliotheken?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy