Condividi tramite


Miglioramenti per i pacchetti NuGet Xamarin.Android.Support v4 / v13

Informazioni sulle librerie di supporto Android

Google ha creato librerie di supporto per rendere disponibili nuove funzionalità per le versioni precedenti di Android. In generale, alle librerie di supporto viene assegnato un numero di versione nel nome, che è il livello API Android più basso con cui sono compatibili (ad esempio: Support-v4 può essere usato solo nel livello API 4 e versioni successive. Altre informazioni in questa discussione di Stack Overflow.

Due delle librerie di supporto: Support-v4 e Support-v13 non possono essere usate insieme nella stessa app, ovvero si escludono a vicenda. Questo perché Support-v13 contiene effettivamente tutti i tipi e l'implementazione di Support-v4. Se si tenta di fare riferimento a entrambi nello stesso progetto, si verificano errori di tipo duplicati.

Problemi con il riferimento

Da quando Support-v4 è diventato così popolare, molte librerie di terze parti ora dipendono da esso. Potrebbero invece scegliere di dipendere da Support-v13, ma è più comune dipendere dalla versione 4 , perché offre alle app che usano queste librerie di terze parti l'opzione di supporto dei livelli API fino a 4.

Se una libreria di terze parti di Xamarin fa riferimento all'associazione Xamarin.Android.Support.v4.dll a Support-v4, qualsiasi app che usa questa libreria deve anche fare riferimento Xamarin.Android.Support.v4.dlla . Questo diventa un problema quando la stessa app vuole usare anche alcune delle funzionalità dall'associazione Xamarin.Android.Support.v13.dll a Support-v13. Se si fa riferimento a entrambe le associazioni, si verificano errori di tipo duplicato.

Assembly di associazione v4 inoltrato di tipo

Per risolvere questo problema, è stato creato un assembly speciale Xamarin.Android.Support.v4.dll senza implementazione, ma semplicemente [assembly: TypeForwardedTo (..)] attributi che inoltrano tutti i Support-v4 tipi all'implementazione all'interno dell'assembly Xamarin.Android.Support.v13.dll .

Ciò significa che uno sviluppatore può fare riferimento a questo assembly inoltrato di tipo nella propria app che soddisfa il riferimento a Xamarin.Android.Support.v4.dll da qualsiasi libreria di terze parti, consentendo comunque Xamarin.Android.Support.v13.dll di essere usato nell'app.

Assistenza NuGet

Sebbene uno sviluppatore possa aggiungere manualmente i riferimenti corretti necessari, è possibile usare NuGet per scegliere l'assembly corretto (il normale binding v4 o l'assembly v4 inoltrato dal tipo) quando viene installato il pacchetto NuGet.

Xamarin.Android.Support.v4 Il pacchetto NuGet contiene quindi la logica seguente:

Se l'app ha come destinazione il livello API 13 (Gingerbread 3.2) o versione successiva:

  • Xamarin.Android.Support.v13 NuGet verrà aggiunto automaticamente come dipendenza
  • Il tipo inoltrato Xamarin.Android.Support.v4.dll verrà fatto riferimento nel progetto

Se l'app ha come destinazione qualsiasi valore inferiore al livello API 13, si otterrà il normale Xamarin.Android.Support.v4.dll binding a cui si fa riferimento nel progetto.

È necessario usare Support-v13?

Se l'app ha come destinazione il livello API 13 o superiore e si sceglie di usare il Xamarin Android Support-v4 pacchetto NuGet, il Xamarin Android Support v13 pacchetto NuGet è una dipendenza obbligatoria.

Si ritiene che l'aumento molto minore delle dimensioni dell'app (i due file .jar differiscono per 17 kb) vale la pena la compatibilità e meno mal di testa si traduce in.

Se si vuole usare Support-v4 in un'app destinata al livello API 13 o superiore, è sempre possibile scaricare manualmente .nupkg, estrarlo e fare riferimento all'assembly.