Android コミュニティでは、アプリで使用できる多くの Java ライブラリが提供されています。 これらの Java ライブラリは、多くの場合、.JAR (Java アーカイブ) または .AAR (Android アーカイブ) 形式でパッケージ化されていますが、Java バインディング ライブラリ に .JAR/.AAR をパッケージ化することで、その機能を .NET for Android アプリケーションで使用できるようにします。 Java バインディング ライブラリの目的は、自動生成されたコードラッパーを介して、.JAR/.AAR ファイル内の API を C# コードで使用できるようにすることです。
ヒント
.NET 9 では、Maven リポジトリから Java ライブラリを自動的にダウンロードしてバインドするためのサポートが導入されています。 このシナリオを簡略化するには、「 Maven からの Java ライブラリのバインド ドキュメントを参照してください。
ウォークスルー
このチュートリアルでは、円形キャンバスにイメージを表示するライブラリである CircleImageView のバージョン 3.1.0 をバインドします。
Maven リポジトリから、circleimageview-3.1.0.aarをローカルにバインドするためにダウンロードします。
バインド ライブラリの作成
最初に、新しいバインド ライブラリ プロジェクトを作成します。 これは、Visual Studio で使用できる "Android Java バインド ライブラリ" プロジェクト テンプレートを使用するか、 dotnet コマンド ラインを使用して実行できます。
dotnet new android-bindinglib
circleimageview-3.1.0.aar ファイルをプロジェクト ディレクトリにコピーします。
.NET SDK スタイルのプロジェクトと同様に、.NET for Android バインディング プロジェクトには、自動的に任意の .JAR/.AAR ファイルがプロジェクト ディレクトリに含まれAndroidLibraryタイプのファイルとして扱われるため、追加の設定は不要です。
次に、Visual Studio の Build コマンドを使用するか、コマンド ラインからプロジェクトをビルドします。
dotnet build
この Java ライブラリはバインドされ、.NET for Android アプリケーション プロジェクトによって参照されるか、パブリックに使用するために NuGet に発行される準備が整いました。
追加のオプション
マネージド バインドをスキップする
既定では、プロジェクトに配置された任意の .JAR/.AAR に対して C# バインディングが作成されます。 ただし、C# のバインドは作成が難しい場合があり、C# から Java API を呼び出す予定がない場合は必要ありません。
これは特に、Java ライブラリが単に別の Java ライブラリの依存関係であり、C# から直接呼び出す必要がない場合です。 この場合、 Bind="false" 属性を使用して Java 依存関係のみを含めることができますが、バインドすることはできません。
<ItemGroup>
<AndroidLibrary Update="circleimageview-3.1.0.aar" Bind="false" />
</ItemGroup>
自動インポートを使用する場合は、Updateでコピーを追加するのではなく、Includeを使用して自動的にインポートされたファイルを変更する必要があります。
Java の依存関係
Java ライブラリは、アプリケーションを動作させるためにアプリケーションと共にパッケージ化する必要がある他の Java ライブラリに依存する場合があります。 この情報は、従来は .POM ファイルで提供されています。また、必要な依存関係が適切に参照されていることを確認するのはユーザーの責任です。通常は、NuGet パッケージを使用するか、またはプロジェクト内に必要な .JAR/.AAR ファイルをバンドルします。
.NET 9 では、Java 依存関係検証機能が追加されました。 POM ファイルを提供することで、バインディングツールは必要なすべての Java 依存関係を満たしていることを確認するのに役立ちます。
チュートリアルで Java 依存関係検証を有効にするには、.NET 9 以降を使用していて、プロジェクトターゲットが net9.0-android 以上であることを確認します。
Maven リポジトリからcircleimageview-3.1.0.pomローカルにダウンロードし、プロジェクト フォルダーに配置します。 注意してください、.POMファイルは正しい.JAR/.AARに関連付ける必要があるため、自動的には検出されません。
自動インポートされた AndroidLibrary を更新し、Manifest 属性で POM ファイルの場所を指定します。 さらに、Java ライブラリの JavaArtifact と JavaVersion を指定します。
<!-- JavaArtifact format is {GroupId}:{ArtifactId} -->
<ItemGroup>
<AndroidLibrary
Update="circleimageview-3.1.0.aar"
Manifest="circleimageview-3.1.0.pom"
JavaArtifact="de.hdodenhof:circleimageview"
JavaVersion="3.1.0" />
</ItemGroup>
このライブラリは単純であり、Java の依存関係はありませんが、存在し、それらが満たされていない場合は、次のようなエラーが生成されます。
error XA4241: Java dependency 'androidx.collection:collection:1.0.0' is not satisfied.
error XA4242: Java dependency 'org.jetbrains.kotlin:kotlin-stdlib:1.9.0' is not satisfied. Microsoft maintains the NuGet package 'Xamarin.Kotlin.StdLib' that could fulfill this dependency.
Java 依存関係検証の構成と依存関係を満たす方法の詳細については、 documentationを参照してください。
次のステップ
メタデータを使用したバインドのカスタマイズ - チュートリアルでバインドされた Java ライブラリは簡単であり、バインディング ツールは、それを C# API に完全に自動的に変換できました。 残念ながら、多くの場合、それは当てはまらず、コンパイルエラーが発生します。 Java 言語と C# 言語の違いを解決する方法をバインド ツールに手動で指示するには、これらのエラーを "メタデータ" で修正する必要があります。
名前空間の変更 - ウォークスルーの型は最終的に .NET 名前空間
DE.Hdodenhof.Circleimageviewに入ります。 Java パッケージ名は.NET 名前空間よりも詳細になる傾向があり、たとえば、CircleImageViewLibraryを使用してAndroidNamespaceReplacementする場合など、変更する方が望ましい場合があります。
<ItemGroup>
<AndroidNamespaceReplacement Include='DE.Hdodenhof.Circleimageview' Replacement='CircleImageViewLibrary' />
</ItemGroup>