Java 與 Xamarin.Android 整合

Java 生態系統包含各種且龐大的元件集合。 其中許多元件可用來縮短開發 Android 應用程式所需的時間。 本檔將介紹並提供開發人員使用這些現有 Java 元件來改善其 Xamarin.Android 應用程式開發體驗的一些高階概觀。

概觀

鑒於 Java 生態系統的範圍,Xamarin.Android 應用程式所需的任何指定功能很可能已在 Java 中編碼。 因此,在建立 Xamarin.Android 應用程式時,嘗試並重複使用這些現有的連結庫很吸引人。

在 Xamarin.Android 應用程式中,有三種可能的方式可以重複使用 Java 連結庫:

  • 建立 Java 系結連結庫 – 使用這項技術,Xamarin.Android 專案會用來建立 Java 類型的 C# 包裝函式。 Xamarin.Android 應用程式接著可以參考此專案所建立的 C# 包裝函式,然後使用 .jar 檔案。

  • Java 原生介面 – Java 原生介面 (JNI) 是一種架構,可讓在 JVM 內執行的 Java 程式代碼呼叫或呼叫非 Java 程式代碼(例如 C++ 或 C#)。

  • 移植程序代碼 – 此方法牽涉到取得 Java 原始程式碼,然後將它轉換成 C#。 這可以手動完成,或使用 Sharpen 之類的自動化工具。

前兩種技術的核心是 Java原生介面 (JNI)。 JNI 是一種架構,可讓未以 Java 撰寫的應用程式與在 Java 虛擬機中執行的 Java 程式代碼互動。 Xamarin.Android 使用 JNI 來建立 C# 程式代碼的系 結。

第一種技術是系結Java連結庫的自動化宣告式方法。 它牽涉到使用 Visual Studio for Mac 或 Xamarin.Android 提供的 Visual Studio 專案類型 – Java 系結連結庫。 若要成功建立這些系結,Java 系結連結庫可能仍然需要一些手動修改,但不像純 JNI 方法一樣多。 如需 Java 系結連結庫的詳細資訊,請參閱 系結 Java 連結庫

第二種使用 JNI 的技術在較低層級運作,但可以提供更精細的控制和 Java 方法存取,而通常無法透過 Java 系結鏈接庫存取。

第三種技術與前兩項完全不同:將程式代碼從Java移植到C#。 將程式代碼從一種語言移植到另一種語言可能是一個非常費力的程式,但可以使用稱為 Sharpen 的工具來減少該工作。 Sharpen 是 java 對 C# 轉換器 開放原始碼 工具。

摘要

本檔提供一些不同方式的概觀,說明可從 Xamarin.Android 應用程式中重複使用 Java 連結庫的一些不同方式。 它介紹了系結和Managed可呼叫包裝函式的概念,並討論了將Java程式代碼移植到 C# 的選項。