Xamarin.Formsでの AndroidX の移行

AndroidX は、Android サポート ライブラリに代わるものです。 この記事では、AndroidX が存在する理由、それが Xamarin.Forms に与える影響、AndroidX ライブラリを使用するようにアプリケーションを移行する方法について説明します。

重要

アプリを Xamarin.Forms 5.0 に移行する場合は、「アプリを Xamarin.Forms 5.0 に移行するには、どうすればよいですか。」を参照してください。

AndroidX の歴史

Android サポート ライブラリは、古いバージョンの Android で新しい機能を提供するために作成されました。 これは、開発者が Android オペレーティング システムのすべてのバージョンに存在しない可能性があり、以前のバージョンのグレースフル フォールバックがある機能を使用できるようにする互換性レイヤーです。 サポート ライブラリには、便利なヘルパー クラス、デバッグおよびユーティリティ ツール、他のサポート ライブラリ クラスに依存して機能する高度なクラスも含まれています。

サポート ライブラリはもともと単一のバイナリでしたが、最新のアプリ開発にほぼ不可欠な一連のライブラリに成長し、進化しました。 サポート ライブラリで一般的に使用される機能を次に示します。

  • Fragment サポート クラス。
  • RecyclerView、長いリストの管理に使用されます。
  • 65,536 以上のメソッドを使用するアプリの Multidex サポート。
  • ActivityCompat クラスです。

AndroidX は、保守が終了したサポート ライブラリに代わるものです。すべての新しいライブラリ開発は、AndroidX ライブラリで行われます。 AndroidX は、セマンティック バージョン管理、より明確なパッケージ名、および一般的なアプリケーション アーキテクチャ パターンのより適切なサポートを使用する再設計されたライブラリです。 AndroidX バージョン 1.0.0 は、サポート ライブラリ バージョン 28.0.0 と同等のバイナリです。 サポート ライブラリから AndroidX へのクラス マッピングの完全な一覧については、developer.android.com の「サポート ライブラリのクラス マッピング」を参照してください。

Google により、AndroidX で Jetifier と呼ばれる移行プロセスが作成されました。 Jetifier は、ビルド プロセス中に jar バイトコードを検査し、アプリ コードと依存関係の両方でサポート ライブラリ参照を AndroidX の同等のものに再マップします。

Xamarin.Forms アプリでは、Android Java アプリと同様に、jar の依存関係を AndroidX に移行する必要があります。 ただし、基になる正しい jar ファイルを指し示すために、Xamarin バインドも移行する必要があります。 Xamarin.Forms では、バージョン 4.5 で AndroidX の自動移行のサポートが追加されました。

AndroidX の詳細については、developer.android.com の「AndroidX の概要」を参照してください。

Xamarin.Forms での自動移行

AndroidX に自動的に移行するには、Xamarin.Forms Android プラットフォーム プロジェクトが次を満たしている必要があります。

  • ターゲット Android API バージョン 29 以上。
  • Xamarin.Forms バージョン 4.5 以降を使用。
  • Android サポート ライブラリに直接または推移的な依存関係がある。

プロジェクトでこれらの設定を確認したら、Visual Studio 2019 で Android アプリをビルドします。 ビルド プロセス中に、中間言語 (IL) が検査され、サポート ライブラリの依存関係とバインドが AndroidX 依存関係と入れ替えられます。 アプリケーションに、ビルドに必要なすべての AndroidX 依存関係がある場合、ビルド プロセスに違いは生じません。

重要

AndroidX に手動で移行すると、アプリのビルド プロセスが最速になります。これは AndroidX の移行に推奨される方法です。 これには、サポート ライブラリの依存関係を AndroidX 依存関係に置き換え、AndroidX 型を使用するようにコードを更新する必要があります。 詳細については、「AndroidX 型を使用する」を参照してください。

プロジェクトに含まれていない AndroidX 依存関係が検出された場合は、不足している AndroidX パッケージを示すビルド エラーが報告されます。 ビルド エラーの例を次に示します。

Could not find 37 AndroidX assemblies, make sure to install the following NuGet packages:
- Xamarin.AndroidX.Lifecycle.LiveData
- Xamarin.AndroidX.Browser
- Xamarin.Google.Android.Material
- Xamarin.AndroidX.Legacy.Supportv4
You can also copy and paste the following snippit into your .csproj file:
 <PackageReference Include="Xamarin.AndroidX.Lifecycle.LiveData" Version="2.1.0-rc1" />
 <PackageReference Include="Xamarin.AndroidX.Browser" Version="1.0.0-rc1" />
 <PackageReference Include="Xamarin.Google.Android.Material" Version="1.0.0-rc1" />
 <PackageReference Include="Xamarin.AndroidX.Legacy.Support.V4" Version="1.0.0-rc1" />

不足している NuGet パッケージは、Visual Studio の NuGet パッケージ マネージャーを使用してインストールするか、Android .csproj ファイルを編集してエラーに記載されている PackageReference XML 項目を含めるとインストールできます。

不足しているパッケージが解決されたら、プロジェクトを再構築すると、不足しているパッケージが読み込まれます。プロジェクトはサポート ライブラリの依存関係ではなく AndroidX 依存関係を使用してコンパイルされます。

Note

プロジェクトとプロジェクトの依存関係が Android サポート ライブラリを参照していない場合、移行プロセスでは何も行われず、実行されません。