Partilhar via


Pacotes NuGet para suporte mais inteligente do Xamarin Android v4/v13

Sobre as bibliotecas de suporte do Android

O Google criou bibliotecas de suporte para disponibilizar novos recursos para versões mais antigas do Android. Em geral, as Bibliotecas de Suporte recebem um número de versão em seu nome, que é o nível de API Android mais baixo com o qual são compatíveis (por exemplo: Support-v4 só pode ser usado na API de nível 4 e superior. Mais informações nesta discussão do Stack Overflow).

Duas das bibliotecas de suporte: Support-v4 e Support-v13 não podem ser usadas juntas no mesmo aplicativo, ou seja, são mutuamente exclusivas. Isso ocorre porque Support-v13 , na verdade, contém todos os tipos e implementação do Support-v4. Se você tentar fazer referência a ambos no mesmo projeto, encontrará erros de tipo duplicados.

Problemas com referência

Desde que Support-v4 se tornou tão popular, muitas bibliotecas de terceiros agora dependem disso. Eles poderiam ter optado por depender do Support-v13, mas é mais comum depender da v4 , pois isso dá a todos os aplicativos que usam essas bibliotecas de terceiros a opção de oferecer suporte a níveis de API até 4.

Se uma biblioteca de terceiros do Xamarin fizer referência à Xamarin.Android.Support.v4.dll associação a Support-v4, qualquer aplicativo que use essa biblioteca também deverá fazer referência Xamarin.Android.Support.v4.dlla . Isso se torna um problema quando o mesmo aplicativo também deseja usar algumas das funcionalidades da Xamarin.Android.Support.v13.dll associação para Support-v13. Se você fizer referência a ambas as associações, encontrará erros de tipo duplicados.

Conjunto de associação v4 com encaminhamento de tipo

Para contornar esse problema, criamos um assembly especial Xamarin.Android.Support.v4.dll que não tem implementação, mas simplesmente [assembly: TypeForwardedTo (..)] atributos que encaminham todos os Support-v4 tipos para a implementação dentro do Xamarin.Android.Support.v13.dll assembly.

Isso significa que um desenvolvedor pode fazer referência a esse assembly encaminhado por tipo em seu aplicativo, o que atenderá à referência de Xamarin.Android.Support.v4.dll qualquer biblioteca de terceiros, enquanto ainda permite Xamarin.Android.Support.v13.dll ser usado no aplicativo.

Assistência do NuGet

Embora um desenvolvedor possa adicionar manualmente as referências corretas necessárias, podemos usar o NuGet para ajudar a escolher o assembly correto (a associação v4 normal ou o assembly v4 com encaminhamento de tipo) quando o pacote NuGet é instalado.

Portanto, o Xamarin.Android.Support.v4 pacote NuGet agora contém a seguinte lógica:

Se o app segmentar a API de nível 13 (Gingerbread 3.2) ou versões mais recentes:

  • Xamarin.Android.Support.v13 O NuGet será adicionado automaticamente como uma dependência
  • O tipo encaminhado será referenciado Xamarin.Android.Support.v4.dll no projeto

Se o app estiver segmentando algo inferior ao nível 13 da API, você receberá a vinculação normal Xamarin.Android.Support.v4.dll referenciada no projeto.

Preciso usar o Support-v13?

Se o aplicativo estiver direcionando a API de nível 13 ou superior e você optar por usar o Xamarin Android Support-v4 pacote NuGet, o Xamarin Android Support v13 pacote NuGet será uma dependência necessária.

Achamos que o pequeno aumento no tamanho do aplicativo (os dois arquivos .jar diferem em 17 kb) vale a compatibilidade e menos dores de cabeça que resulta.

Se você for inflexível sobre o uso Support-v4 em um aplicativo direcionado à API de nível 13 ou superior, sempre poderá baixar manualmente o .nupkg, extraí-lo e fazer referência ao assembly.