Freigeben über


NuGet-Pakete für eine intelligentere Xamarin Android-Unterstützung v4/v13

Informationen zu den Unterstützungsbibliotheken für Android

Google hat Unterstützungsbibliotheken erstellt, um neue Features für ältere Android-Versionen zur Verfügung zu stellen. Im Allgemeinen erhalten Supportbibliotheken eine Versionsnummer in ihrem Namen, die die niedrigste Android-API-Ebene ist, mit der sie kompatibel sind (z. B. Support-v4 kann nur auf API-Ebene 4 und höher verwendet werden. Weitere Informationen in dieser Diskussion zu Stack Overflow).

Zwei der Unterstützungsbibliotheken – Support-v4 und Support-v13 – können nicht in der gleichen App verwendet werden, sie schließen sich gegenseitig aus. Dies liegt daran, dass Support-v13 alle Typen und die Implementierung von Support-v4 enthält. Wenn Sie versuchen, in ein und demselben Projekt auf beide Bibliotheken zu verweisen, werden Fehler aufgrund doppelter Typen zurückgegeben.

Probleme beim Verweisen

Da Support-v4 so beliebt geworden ist, sind mittlerweile viele Bibliotheken von Drittanbietern davon abhängig. Entwickler könnten auch eine Abhängigkeit von „Support-v13“ auswählen, aber v4 ist gängiger, weil diese Version allen Apps, die Drittanbieterbibliotheken verwenden, die Möglichkeit bietet, API-Ebenen bis hinunter zu Ebene 4 zu unterstützen.

Wenn die Xamarin-Bibliothek eines Drittanbieters auf die Xamarin.Android.Support.v4.dll-Bindung an Support-v4 verweist, müssen alle Apps, die diese Bibliothek verwenden, ebenfalls auf Xamarin.Android.Support.v4.dll verweisen. Das wird dann zum Problem, wenn dieselbe App auch Funktionen der Xamarin.Android.Support.v13.dll-Bindung an Support-v13 nutzen soll. Wenn Sie auf beide Bindungen verweisen, treten Fehler aufgrund doppelter Typen auf.

v4-Bindungsassembly mit Typweiterleitung

Um dieses Problem zu umgehen, haben wir eine spezielle Xamarin.Android.Support.v4.dll-Assembly erstellt, die keine Implementierung besitzt, sondern einfach [assembly: TypeForwardedTo (..)]-Attribute enthält, die alle Support-v4-Typen an die Implementierung innerhalb der Xamarin.Android.Support.v13.dll-Assembly weiterleiten.

Das bedeutet, dass ein Entwickler in einer App auf diese Assembly mit Typweiterleitung verweisen kann. Damit wird der Verweis auf Xamarin.Android.Support.v4.dll von allen Drittanbieterbibliotheken erfüllt, und die Verwendung von Xamarin.Android.Support.v13.dll in der App ist weiterhin zulässig.

Unterstützung für NuGet

Entwickler könnten zwar die erforderlichen korrekten Verweise manuell hinzufügen, aber wir können auch NuGet verwenden, um die richtige Assembly auszuwählen (entweder die normale v4-Bindung oder die v4-Assembly mit Typweiterleitung), wenn das NuGet-Paket installiert ist.

Das NuGet-Paket Xamarin.Android.Support.v4 enthält jetzt also die folgende Logik:

Wenn Ihre App für die API-Ebene 13 (Gingerbread 3.2) oder höher konzipiert ist, gilt Folgendes:

  • Das NuGet-Paket Xamarin.Android.Support.v13 wird automatisch als Abhängigkeit hinzugefügt.
  • Im Projekt wird auf Xamarin.Android.Support.v4.dll mit Typweiterleitung verwiesen.

Wenn Ihre App für eine niedrigere Ebene als die API-Ebene 13 konzipiert ist, können Sie in Ihrem Projekt auf die normale Xamarin.Android.Support.v4.dll-Bindung verweisen.

Muss ich „Support-v13“ verwenden?

Wenn Ihre App für die API-Ebene 13 oder höher konzipiert ist und Sie das NuGet-Paket Xamarin Android Support-v4 verwenden möchten, ist das NuGet-Paket Xamarin Android Support v13 eine erforderliche Abhängigkeit.

Wir sind der Meinung, dass die unwesentliche Erhöhung der App-Größe (die beiden JAR-Dateien unterscheiden sich um 17 KB) die Kompatibilität und Vereinfachung wert ist.

Wenn Sie unbedingt Support-v4 in einer App verwenden müssen, die für die API-Ebene 13 oder höher konzipiert ist, können Sie jederzeit die .nupkg-Datei herunterladen, extrahieren und auf die Assembly verweisen.