Packages NuGet v4 / v13 de prise en charge Xamarin Android plus intelligents
À propos des bibliothèques de support Android
Google a créé des bibliothèques de support pour rendre les nouvelles fonctionnalités disponibles pour les versions antérieures d’Android. En général, les bibliothèques de support reçoivent un numéro de version dans leur nom, qui est le niveau d’API Android le plus bas avec lequel ils sont compatibles (par exemple, support-v4 ne peut être utilisé que sur le niveau d’API 4 et versions ultérieures. Plus d’informations dans cette discussion Stack Overflow).
Deux des bibliothèques de prise en charge : Support-v4
et Support-v13
ne peuvent pas être utilisées ensemble dans la même application, autrement dit, elles s’excluent mutuellement. Cela est dû au fait que Support-v13
contient tous les types et l’implémentation de Support-v4
. Si vous essayez et référencez les deux dans le même projet, vous rencontrerez des erreurs de type en double.
Problèmes de référencement
Depuis Support-v4
qu’elle est devenue si populaire, beaucoup de bibliothèques tierces dépendent maintenant de celui-ci. Ils peuvent avoir choisi de dépendre du support-v13 à la place, mais il est plus courant de dépendre de v4 , car cela donne à toutes les applications utilisant ces bibliothèques tierces la possibilité de prendre en charge les niveaux d’API jusqu’à 4.
Si une bibliothèque tierce Xamarin fait référence à Support-v4
la Xamarin.Android.Support.v4.dll
liaison, toute application qui utilise cette bibliothèque doit également faire référenceXamarin.Android.Support.v4.dll
. Cela devient un problème quand la même application souhaite également utiliser certaines des fonctionnalités de la Xamarin.Android.Support.v13.dll
liaison vers Support-v13
. Si vous référencez les deux liaisons, vous rencontrerez des erreurs de type en double.
Assembly de liaison v4 transféré de type
Pour contourner ce problème, nous avons créé un assembly spécial Xamarin.Android.Support.v4.dll
qui n’a pas d’implémentation, mais simplement [assembly: TypeForwardedTo (..)]
des attributs qui transfèrent tous les Support-v4
types à l’implémentation au sein de l’assembly Xamarin.Android.Support.v13.dll
.
Cela signifie qu’un développeur peut référencer cet assembly transféré de type dans son application qui répond à la référence à Xamarin.Android.Support.v4.dll
toutes les bibliothèques tierces, tout en autorisant Xamarin.Android.Support.v13.dll
l’utilisation dans l’application.
NuGet Assistance
Bien qu’un développeur puisse ajouter manuellement les références appropriées nécessaires, nous sommes en mesure d’utiliser NuGet pour choisir l’assembly approprié (la liaison v4 normale ou l’assembly v4 transféré de type) lorsque le package NuGet est installé.
Par conséquent, le Xamarin.Android.Support.v4
package NuGet contient désormais la logique suivante :
Si votre application cible le niveau d’API 13 (Gingerbread 3.2) ou une version ultérieure :
Xamarin.Android.Support.v13
NuGet est automatiquement ajouté en tant que dépendance- Le type transféré
Xamarin.Android.Support.v4.dll
sera référencé dans le projet
Si votre application cible quelque chose de inférieur au niveau de l’API 13, vous obtiendrez la liaison normale Xamarin.Android.Support.v4.dll
référencée dans votre projet.
Dois-je utiliser Support-v13 ?
Si votre application cible le niveau d’API 13 ou version ultérieure et que vous choisissez d’utiliser le Xamarin Android Support-v4
package NuGet, le Xamarin Android Support v13
package NuGet est une dépendance requise.
Nous pensons que l’augmentation très mineure de la taille de l’application (les deux fichiers .jar diffèrent de 17 Ko) vaut bien la compatibilité et moins de maux de tête qu’il entraîne.
Si vous êtes inflexible sur l’utilisation Support-v4
dans une application qui cible le niveau d’API 13 ou version ultérieure, vous pouvez toujours télécharger manuellement le .nupkg
, l’extraire et référencer l’assembly.