より高度な Xamarin Android サポート v4/v13 NuGet パッケージ
Android サポート ライブラリについて
Google は、古いバージョンの Android でも新しい機能を使用できるようにするためのサポート ライブラリを作成しています。 一般に、サポート ライブラリにはその名前にバージョン番号が付けられます。この番号は、ライブラリが互換性を持つ最も低い Android API レベルです (例: Support-v4 は API レベル 4 以上でのみ使用できます)。詳細については、こちらの Stack Overflow のディスカッションを参照してください)。
2 つのサポートライブラリ (Support-v4
と Support-v13
) を同じアプリで同時に使用することはできません。つまり、それらは相互に排他的です。 これは、Support-v13
には実際には Support-v4
のすべての型と実装が含まれているためです。 同じプロジェクト内で両方を参照しようとすると、型の重複エラーが発生します。
参照に関する問題
Support-v4
は非常に普及しているため、多数のサード パーティ製のライブラリがそれに依存しています。 Support-v13 への依存が選択されている可能性もありますが、サード パーティ製のライブラリを使用しているアプリに 4 に至るまでの API レベルをサポートするオプションが与えられるため、v4 に依存するほうが一般的です。
Xamarin のサード パーティ製のライブラリで Support-v4
にバインドされている Xamarin.Android.Support.v4.dll
が参照される場合、このライブラリを使用するアプリも、Xamarin.Android.Support.v4.dll
を参照する必要があります。 これは、同じアプリで、Support-v13
にバインドされている Xamarin.Android.Support.v13.dll
の機能の一部も使用したい場合に問題になります。 両方のバインドを参照すると、型重複エラーが発生します。
型転送される v4 バインド アセンブリ
この問題を避けるために、特別な Xamarin.Android.Support.v4.dll
アセンブリが作成されています。これには実装はありませんが、すべての Support-v4
型を Xamarin.Android.Support.v13.dll
アセンブリ内の実装に転送する [assembly: TypeForwardedTo (..)]
属性があります。
これは、開発者がアプリ内でこの "型転送" アセンブリを参照すると、サード パーティ製のライブラリによる Xamarin.Android.Support.v4.dll
への参照に対応できることに加え、アプリ内で Xamarin.Android.Support.v13.dll
も使用できることを意味します。
NuGet のサポート
開発者は、必要な適切な参照を手動で追加できますが、NuGet パッケージのインストール時に、NuGet を使用して、適切なアセンブリ (通常の v4 のバインドまたは型転送 v4 アセンブリ) を選択できます。
このため、Xamarin.Android.Support.v4
NuGet パッケージには、次のロジックが含まれるようになりました。
アプリのターゲットが API レベル 13 (Gingerbread 3.2) 以降の場合:
- 依存関係として
Xamarin.Android.Support.v13
NuGet が自動的に追加されます - プロジェクトで "型転送"
Xamarin.Android.Support.v4.dll
が参照されます
アプリのターゲットが API レベル 13 よりも低い場合は、プロジェクトで通常の Xamarin.Android.Support.v4.dll
のバインドが参照されます。
Support-v13 を使用する必要があるか
アプリのターゲットが API レベル 13 以降であるときに、Xamarin Android Support-v4
NuGet パッケージを使用することを選択した場合、Xamarin Android Support v13
NuGet パッケージは必須の依存関係になります。
アプリのサイズの非常にわずかな増加 (2 つの .jar ファイルの違いは 17 KB) は互換性にとって十分価値のあるものであり、それによって発生する問題はほとんどありません。
ターゲットが API レベル 13 以降のアプリで Support-v4
をどうしても使用したければ、いつでも .nupkg
を手動でダウンロードして展開し、そのアセンブリを参照できます。