Java と Xamarin.Android の統合

"Java エコシステムには、膨大な数の多様なコンポーネントが含まれています。 これらのコンポーネントの多くを使用して、Android アプリケーションの開発にかかる時間を短縮できます。 このドキュメントでは、開発者がこれらの既存の Java コンポーネントを使用して Xamarin.Android アプリケーションの開発エクスペリエンスを向上させる方法の概要について説明します。"

概要

Java エコシステムの広がりを考えると、Xamarin.Android アプリケーションに必要な特定の機能は、Java で既にコーディングされている可能性が非常に高くなります。 このため、Xamarin.Android アプリケーションを作成するときは、これらの既存のライブラリを試して再利用することが推奨されます。

Xamarin.Android アプリケーションで Java ライブラリを再利用するには、次の 3 つの方法があります。

  • Java バインディング ライブラリを作成する – この手法では、java 型の周りに C# ラッパーを作成するために、Xamarin.Android プロジェクトが使用されます。 その後、このプロジェクトによって作成された C# ラッパーを Xamarin.Android アプリケーションで参照し、.jar ファイルを使用できます。

  • Java Native Interface – Java Native Interface (JNI) は、JVM 内で実行中の Java コードを Java 以外のコード (C++ や C# など) で呼び出したり、その Java コードで Java 以外のコードを呼び出したりできるようにするフレームワークです。

  • コードを移植する – この手法では、Java ソース コードを用意した後、それを C# に変換します。 これは、手動で行うことも、Sharpen などの自動ツールを使用して行うこともできます。

最初の 2 つの手法の中心にあるのは、Java Native Interface (JNI) です。 JNI は、Java で記述されていないアプリケーションによって、Java 仮想マシンで実行されている Java コードを対話処理できるようにするフレームワークです。 Xamarin.Android では、JNI を使用して C# コードの "バインド" が作成されます。

最初の手法は、Java ライブラリをバインドするためのより自動化された叙述手法です。 この変換には、Visual Studio for Mac、または Xamarin.Android によって提供される Visual Studio プロジェクト タイプ (Java バインディング ライブラリ) のいずれかが使用されます。 これらのバインドを正常に作成するには、Java バインド ライブラリの手動による変更が必要になることがありますが、JNI を使用する方法ほど作業量は多くありません。 Java バインド ライブラリの詳細については、「Java ライブラリ のバインド」を参照してください。

JNI を使用する 2 番目の手法は、はるかに低いレベルで機能しますが、より細かな調整と Java バインド ライブラリの使用では通常はアクセスできない Java メソッドへのアクセスを行うことができます。

3 番目の手法は、前の 2 つの手法とは大きく異なり、Java から C# にコードを移植します。 ある言語から別の言語へのコードの移植は非常に手間のかかる処理になる可能性がありますが、Sharpen いう名前のツールを使用することで、労力を減らすことができます。 Sharpen は、Java から C# へのコンバーターであるオープン ソース ツールです。

まとめ

このドキュメントでは、Xamarin.Android アプリケーションで Java のライブラリを再利用できるさまざまな方法について、その概要を説明しました。 バインドと呼び出し可能なマネージド ラッパーの概念を紹介し、Java コードを C# に移植するためのオプションについて説明しました。