Android 社群提供許多您可能想要在應用程式中使用的 Java 連結庫。 這些 Java 程式庫通常會封裝在 .JAR(Java 封存)或 .AAR(Android 封存)格式中,但您可以將 .JAR/.AAR 封裝在 Java 系結程式庫 中,使其功能可供 .NET 適用於 Android 的應用程式使用。 Java Bindings 函式庫的目的是透過自動產生的程式碼包裝器,使 .JAR/.AAR 檔案中的 API 可供 C# 程式碼使用。
提示
.NET 9 引進了從 Maven 存放庫自動下載和系結 Java 連結庫的支援。 請參閱「從 Maven 綁定 Java 函式庫」文件以簡化此案例。
逐步解說
在本逐步解說中,我們將綁定 CircleImageView 的版本 3.1.0,該函式庫會在圓形畫布中顯示影像。
從 Maven 儲存庫下載 circleimageview-3.1.0.aar 到本地以進行綁定。
建立綁定庫
首先,建立新的 Bindings Library 專案。 這可以使用 Visual Studio 中提供的「Android Java 系結連結庫」專案範本或透過 dotnet 命令行來完成:
dotnet new android-bindinglib
將 circleimageview-3.1.0.aar 檔案複製到項目目錄。
如同 .NET SDK 樣式專案,.NET 的 Android 繫結專案會自動包含專案目錄中的任何 JAR/AAR 檔案做為 AndroidLibrary 類型檔案,因此不需要額外的設定。
現在,使用 Visual Studio 的 Build 命令,或從命令行建置專案:
dotnet build
此 Java 連結庫現已系結,且已準備好由適用於 Android 的 .NET 應用程式項目參考,或發佈至 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 相依性驗證以及如何滿足相依性的其他資訊,請參閱 檔。
下一步
自定義系結與元數據 - 在逐步演示中,所系結的 Java 庫非常簡單,且系結工具能夠完全自動將其轉換成 C# API。 不幸的是,這通常不是這種情況,而且通常會發生編譯錯誤。 您必須使用「元數據」來修正這些錯誤,以手動指示系結工具如何解決 Java 和 C# 語言之間的差異。
變更命名空間 - 逐步解說中的類型最終會位於 .NET 命名空間
DE.Hdodenhof.Circleimageview中。 Java 套件名稱通常比 .NET 命名空間更冗長,可能更適合變更,例如將其更改為CircleImageViewLibrary使用AndroidNamespaceReplacement:
<ItemGroup>
<AndroidNamespaceReplacement Include='DE.Hdodenhof.Circleimageview' Replacement='CircleImageViewLibrary' />
</ItemGroup>