Share via


繫結 .JAR

重要

我們目前正在調查 Xamarin 平臺上的自定義系結使用方式。 請接受 這項調查 ,以通知未來的開發工作。

本逐步解說提供從 Android 建立 Xamarin.Android Java 系結連結庫的逐步指示。JAR 檔案。

概觀

Android 社群提供許多您可能想要在應用程式中使用的 Java 連結庫。 這些 Java 連結庫通常會封裝在 中。JAR (Java 封存) 格式,但您可以封裝 。 JAVA 系結連結庫中 的 JAR,使其功能可供 Xamarin.Android 應用程式使用。 Java Bindings 連結庫的目的是在 中建立 API。透過自動產生的程式代碼包裝函式,C# 程式代碼可以使用 JAR 檔案。

Xamarin 工具可以從一或多個輸入產生系結連結庫。JAR 檔案。 系結庫 (.DLL元件) 包含下列專案:

  • 原始的內容。JAR 檔案(s)。

  • Managed 可呼叫包裝函式 (MCW),這是在 內包裝對應 Java 類型的 C# 類型。JAR 檔案(s)。

產生的 MCW 程式代碼會使用 JNI (Java Native Interface) 將 API 呼叫轉送至基礎 。JAR 檔案。 您可以為任何 建立系結連結庫。原本以 Android 搭配使用的 JAR 檔案(請注意,Xamarin 工具目前不支援非 Android Java 連結庫的系結)。 您也可以選擇建置系結連結庫,而不包含 的內容。JAR 檔案,讓 DLL 相依於 。運行時間的 JAR。

在本指南中,我們將逐步解說為單一 建立系結連結庫的基本概念。JAR 檔案。 我們將說明一切正常運作的範例,也就是不需要自定義或偵錯系結。 使用元數據 建立系結提供更進階案例的範例,其中系結程序並非完全自動,而且需要一些手動介入。 如需一般 Java 連結庫系結的概觀(含基本程式碼範例),請參閱 系結 Java 連結庫

逐步解說

在下列逐步解說中,我們將建立適用於 Picasso系結連結庫,這是熱門的 Android 。提供影像載入和快取功能的 JAR。 我們將使用下列步驟來系結 picasso-2.x.x.jar ,以建立可在 Xamarin.Android 專案中使用的新 .NET 元件:

  1. 建立新的 Java Bindings Library 專案。

  2. 新增 。專案的 JAR 檔案。

  3. 設定的適當建置動作。JAR 檔案。

  4. 選擇的目標架構。JAR 支援。

  5. 建置系結連結庫。

建立系結連結庫之後,我們將開發小型 Android 應用程式,以示範我們在系結連結庫中呼叫 API 的能力。 在此範例中,我們想要存取picasso-2.x.x.jar的方法

package com.squareup.picasso

public class Picasso
{
    ...
    public static Picasso with (Context context) { ... };
    ...
    public RequestCreator load (String path) { ... };
    ...
}

在產生picasso-2.x.x.jar結連結庫之後,我們可以從 C# 呼叫這些方法。 例如:

using Com.Squareup.Picasso;
...
Picasso.With (this)
    .Load ("https://mydomain.myimage.jpg")
    .Into (imageView);

建立系結連結庫

開始執行下列步驟之前,請先下載 picasso-2.x.x.jar

首先,建立新的 Bindings Library 專案。 在 Visual Studio for Mac 或 Visual Studio 中,建立新的方案,然後選取 Android 系結連結庫 範本。 (本逐步解說中的螢幕快照使用Visual Studio,但Visual Studio for Mac 非常類似。將方案 命名為 JarBinding

Create JarBinding library project

範本包含 您新增的 Jars 資料夾。JAR(s) 至系結連結庫專案。 以 滑鼠右鍵按下 Jars 資料夾,然後選取 [ 新增 > 現有專案]:

Add existing item

流覽至 稍早下載的 picasso-2.x.x.jar檔案,選取它,然後按兩下 [ 新增]:

Select jar file and click Add

確認 已成功將picasso-2.x.x.jar 檔案新增至專案:

Jar added to project

當您建立 Java Bindings 連結庫專案時,必須指定 是否為 。JAR 會內嵌在系結連結庫或個別封裝中。 若要這樣做,您可以指定下列 其中一個建置動作

  • EmbeddedJar – 。JAR 將會內嵌在系結連結庫中。

  • InputJar – 。JAR 將會與系結連結庫分開。

一般而言,您會使用 EmbeddedJar 建置動作,讓 。JAR 會自動封裝到系結連結庫。 這是 最簡單的選項 – 中的 Java 位元組程式代碼。JAR 會轉換成 Dex 位元組程式代碼,並內嵌在 APK 中(以及 Managed 可呼叫包裝函式)。 如果您要保留 。JAR 與系結連結庫不同,您可以使用 InputJar 選項;不過,您必須確定 。執行應用程式的裝置上可以使用 JAR 檔案。

將建置動作設定為 EmbeddedJar

Select EmbeddedJar build action

接下來,開啟專案 [屬性] 以設定 目標 Framework。 如果 為 。JAR 會使用任何 Android API,將 Target Framework 設定為 的 API 層級。JAR 預期。 一般而言,的開發人員。JAR 檔案會指出的 API 層級(或層級)。JAR 與 相容。 (如需一般目標 Framework 設定和 Android API 層級的詳細資訊,請參閱 瞭解 Android API 層級。)

設定系結連結庫的目標 API 層級(在此範例中,我們使用 API 層級 19):

Target API level set to API 19

最後,建置系結連結庫。 雖然可能會顯示某些警告訊息,但 Bindings Library 項目應該會順利建置,並在下列位置產生輸出.DLL: JarBinding/bin/Debug/JarBinding.dll

使用系結連結庫

若要在 Xamarin.Android 應用程式中使用此.DLL,請執行下列動作:

  1. 新增系結連結庫的參考。

  2. 對進行呼叫。透過受控可呼叫包裝函式的 JAR。

在下列步驟中,我們將建立使用系結連結庫來下載和顯示影像的 ImageView最小應用程式;「繁重的工作」是由 位於 中的程式碼所完成。JAR 檔案。

首先,建立取用系結連結庫的新 Xamarin.Android 應用程式。 以滑鼠右鍵按兩下 [方案],然後選取 [新增專案];將新專案 命名為 BindingTest。 我們會在與系結連結庫相同的解決方案中建立此應用程式,以簡化本逐步解說;不過,取用系結連結庫的應用程式可以改為位於不同的解決方案中:

Add new BindingTest project

滑鼠右鍵按兩下 BindingTest 專案的 [參考] 節點,然後選取 [新增參考...]:

Right Add Reference

檢查稍早建立的 JarBinding 專案,然後按兩下 [ 確定]:

Select JarBinding project

開啟 BindingTest 專案的 [參考] 節點,並確認 JarBinding 參考存在:

JarBinding appears under References

修改 BindingTest 配置 Main.axml),使其具有單ImageView一 :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minWidth="25px"
    android:minHeight="25px">
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/imageView" />
</LinearLayout>

將下列 using 語句新增至 MainActivity.cs – 這可讓您輕鬆地存取位於 Bindings Library 中之 Java 型 Picasso 類別的方法:

using Com.Squareup.Picasso;

OnCreate修改 方法,使其使用 Picasso 類別從 URL 載入影像,並將其顯示在 中ImageView

public class MainActivity : Activity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.Main);
        ImageView imageView = FindViewById<ImageView>(Resource.Id.imageView);

        // Use the Picasso jar library to load and display this image:
        Picasso.With (this)
            .Load ("https://i.imgur.com/DvpvklR.jpg")
            .Into (imageView);
    }
}

編譯並執行 BindingTest 專案。 應用程式將會啟動,並在短暫延遲之後(視網路狀況而定),它應該下載並顯示類似下列螢幕快照的影像:

Screenshot of BindingTest running

恭喜! 您已成功繫結 Java 連結函式庫 。JAR 並在您的 Xamarin.Android 應用程式中使用它。

摘要

在本逐步解說中,我們建立了第三方 的系結連結庫。JAR 檔案,將系結連結庫新增至最低測試應用程式,然後執行應用程式以確認 C# 程式代碼可以呼叫 位於 中的 Java 程式代碼。JAR 檔案。