
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.

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.

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 🙂
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).

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.

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.
.
2655400cookie-checkWie funktionieren die Android-Supportbibliotheken?yes