Compartir vía


Paquetes NuGet más inteligentes de Xamarin Android Support v4/v13

Acerca de las bibliotecas de compatibilidad de Android

Google ha creado bibliotecas de compatibilidad para que las nuevas características estén disponibles para las versiones anteriores de Android. En general, las bibliotecas de compatibilidad contienen un número de versión en el nombre, que es el nivel de API de Android más bajo con las que son compatibles (por ejemplo, Support-v4 solo se puede usar en API de nivel 4 y superior. Más información en esta explicación de Stack Overflow).

Dos de las bibliotecas de compatibilidad: Support-v4 y Support-v13 no se pueden usar juntas en la misma aplicación, es decir, se excluyen mutuamente. Esto se debe a que, en realidad, Support-v13 contiene todos los tipos e implementaciones de Support-v4. Si se prueban y se hace referencia a ambas en el mismo proyecto, se producirán errores de tipo duplicado.

Problemas con la referencia

Dado que Support-v4 se ha vuelto tan popular, muchas bibliotecas de terceros dependen de ella. Podrían haber elegido depender de Support-v13 en su lugar, pero es más común depender de v4 ya que proporciona a las aplicaciones que usan estas bibliotecas de terceros la opción de compatibilidad hasta el nivel de API 4.

Si una biblioteca de terceros de Xamarin hace referencia al enlace Xamarin.Android.Support.v4.dll a Support-v4, cualquier aplicación que use esta biblioteca también debe hacer referencia a Xamarin.Android.Support.v4.dll. Esto se convierte en un problema cuando la misma aplicación también quiere usar parte de la funcionalidad del enlace de Xamarin.Android.Support.v13.dll a Support-v13. Si hace referencia a ambos enlaces, se producirán errores de tipo duplicado.

Ensamblado de enlace v4 con reenvío de tipos

Para obtener una alternativa para solucionar este problema, se ha creado un ensamblado Xamarin.Android.Support.v4.dll especial que no tiene ninguna implementación, sino simplemente los atributos [assembly: TypeForwardedTo (..)] que reenvían todos los tipos de Support-v4 a la implementación dentro del ensamblado Xamarin.Android.Support.v13.dll.

Esto significa que un desarrollador puede hacer referencia a este ensamblado con reenvío de tipos en su aplicación, lo que satisfará la referencia a Xamarin.Android.Support.v4.dll de cualquier biblioteca de terceros, a la vez que sigue permitiendo que se use Xamarin.Android.Support.v13.dll en la aplicación.

Asistencia para NuGet

Aunque un desarrollador puede agregar manualmente las referencias correctas necesarias, podemos usar NuGet para ayudar a elegir el ensamblado correcto (el enlace normal v4 o el ensamblado v4 con reenvío de tipos) al instalar el paquete NuGet.

Por lo tanto, el paquete NuGet Xamarin.Android.Support.v4 contiene ahora la siguiente lógica:

Si su aplicación tiene como destino el nivel de API 13 (Gingerbread 3.2) o superior:

  • Xamarin.Android.Support.v13 de NuGet se agregará automáticamente como una dependencia.
  • Se hará referencia a Xamarin.Android.Support.v4.dll con reenvío de tipos en el proyecto.

Si su aplicación tiene como destino un nivel más bajo que el nivel de API 13, obtendrá el enlace Xamarin.Android.Support.v4.dll normal al que se hace referencia en el proyecto.

¿Tengo que usar Support-v13?

Si su aplicación tiene como destino el nivel de API 13 o superior y decide usar el paquete NuGet Xamarin Android Support-v4, el paquete NuGet de Xamarin Android Support v13 es una dependencia necesaria.

Creemos que para la compatibilidad merece la pena un aumento tan pequeño del tamaño de la aplicación (los dos archivos .jar difieren en 17 Kb) y se producen menos quebraderos de cabeza.

Si es inflexible sobre el uso de Support-v4 en una aplicación que tiene como destino el nivel de API 13 o superior, siempre puede descargar .nupkg manualmente, extraerlo y hacer referencia al ensamblado.