天天看點

C# Xamarin 綁定.JAR

總覽

Android社群提供了許多Java庫,您可能希望在應用程式中使用它們。這些Java庫通常以.JAR(Java存檔)格式打包,但您可以将.JAR打包在Java綁定庫中,以便Xamarin.Android應用程式可以使用其功能。Java Bindings庫的目的是使.JAR檔案中的API通過自動生成的代碼包裝器可用于C#代碼。

Xamarin工具可以從一個或多個輸入.JAR檔案生成綁定庫。綁定庫(.DLL程式集)包含以下内容:

  • 原始.JAR檔案的内容。
  • 托管可調用包裝程式(MCW),它們是C#類型,用于将相應的Java類型包裝在.JAR檔案中。

生成的MCW代碼使用JNI(Java本機接口)将您的API調用轉發到基礎.JAR檔案。您可以為最初用于Android的任何.JAR檔案建立綁定庫(請注意,Xamarin工具目前不支援非Android Java庫的綁定)。您還可以選擇在不包含.JAR檔案内容的情況下建構綁定庫,以便DLL在運作時依賴于.JAR。

在本指南中,我們将逐漸介紹為單個.JAR檔案建立綁定庫的基礎知識。我們将通過一個示例說明一切正常,也就是說,不需要自定義或調試綁定。 使用中繼資料建立綁定 提供了一個更進階方案的示例,在該方案中,綁定過程不是完全自動的,需要一定數量的手動幹預。有關一般的Java庫綁定概述(帶有基本代碼示例),請參見 綁定Java庫。

演練

在以下演練中,我們将為Picasso建立一個綁定庫, Picasso是一種流行的Android .JAR,它提供圖像加載和緩存功能。我們将使用以下步驟來綁定picasso-2.xxjar以建立可在Xamarin.Android項目中使用的新.NET程式集:

  1. 建立一個新的Java綁定庫項目。
  2. 将.JAR檔案添加到項目中。
  3. 為.JAR檔案設定适當的生成操作。
  4. 選擇.JAR支援的目标架構。
  5. 建構綁定庫。

建立綁定庫後,我們将開發一個小型Android應用程式,該應用程式将展示我們在綁定庫中調用API的能力。在此示例中,我們要通路picasso-2.xxjar的方法:

package com.squareup.picasso

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

在為picasso-2.xxjar生成綁定庫之後,可以從C#調用這些方法。例如:

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

建立綁定庫

在開始以下步驟之前,請下載下傳 picasso-2.xxjar。

首先,建立一個新的綁定庫項目。在Mac或Visual Studio的Visual Studio中,建立一個新的解決方案,然後選擇“ Android綁定庫”模闆。(本演練中的螢幕截圖使用Visual Studio,但Visual Studio for Mac非常相似。)将解決方案命名為JarBinding:

C# Xamarin 綁定.JAR

該模闆包括一個Jars檔案夾,您可以在其中将.JAR添加到Bindings Library項目中。右鍵單擊Jars檔案夾,然後選擇添加>現有項目

C# Xamarin 綁定.JAR

浏覽至先前下載下傳的picasso-2.xxjar檔案,将其選中并單擊Add:

C# Xamarin 綁定.JAR

驗證是否已将picasso-2.xxjar檔案成功添加到項目中:

C# Xamarin 綁定.JAR

建立Java綁定庫項目時,必須指定将.JAR嵌入到綁定庫中還是單獨打包。為此,請指定以下建構操作之一:

  • EmbeddedJar -.JAR将被嵌入到綁定庫中。
  • InputJar – .JAR将與綁定庫分開。

通常,您使用EmbeddedJar建構操作,以便将.JAR自動打包到綁定庫中。這是最簡單的選項-.JAR中的Java位元組碼将轉換為Dex位元組碼,并(與Managed Callable Wrappers一起)嵌入到APK中。如果要将.JAR與綁定庫分開,可以使用InputJar選項;但是,您必須確定.JAR檔案在運作您的應用的裝置上可用。

将建構動作設定為EmbeddedJar:

C# Xamarin 綁定.JAR

接下來,打開項目Properties來配置Target Framework。如果.JAR使用任何Android API,請将目标架構設定為.JAR期望的API級别。通常,.JAR檔案的開發人員将訓示.JAR與哪個API級别相容。(有關總體上有關Target Framework設定和Android API級别的更多資訊,請參閱 了解Android API級别。)

為綁定庫設定目标API級别(在本示例中,我們使用的是API級别19):

C# Xamarin 綁定.JAR

最後,建構綁定庫。盡管可能會顯示一些警告消息,但“綁定庫”項目應成功建構并在以下位置生成輸出.DLL:JarBinding / bin / Debug / JarBinding.dll

使用綁定庫

要在Xamarin.Android應用中使用此.DLL,請執行以下操作:

  1. 添加對綁定庫的引用。
  2. 通過托管可調用包裝程式向.JAR發出呼叫。

在以下步驟中,我們将建立一個最小的應用程式,該應用程式使用Bindings庫下載下傳并在其中顯示圖像

ImageView

。“繁重的工作”由.JAR檔案中的代碼完成。

首先,建立一個使用綁定庫的新Xamarin.Android應用。右鍵單擊解決方案,然後選擇添加新項目;将新項目命名為BindingTest。我們将在與綁定庫相同的解決方案中建立此應用,以簡化此演練。但是,使用綁定庫的應用程式可以駐留在其他解決方案中:

C# Xamarin 綁定.JAR

右鍵單擊BindingTest項目的References節點,然後選擇Add Reference ...:

C# Xamarin 綁定.JAR

檢查先前建立的JarBinding項目,然後單擊OK:

C# Xamarin 綁定.JAR

打開BindingTest項目的References節點,并驗證存在JarBinding引用:

C# Xamarin 綁定.JAR

将以下

using

語句添加到MainActivity.cs –這使得可以輕松通路

Picasso

駐留在綁定庫中的基于Java的類的方法:

using Com.Squareup.Picasso;
           
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 ("http://i.imgur.com/DvpvklR.jpg")
            .Into (imageView);
    }
}
           

恭喜你!您已經成功綁定了Java庫.JAR,并已在Xamarin.Android應用中使用它。

摘要

在本演練中,我們為第三方.JAR檔案建立了一個綁定庫,将綁定庫添加到最小的測試應用程式中,然後運作該應用程式以驗證我們的C#代碼可以調用駐留在.JAR檔案中的Java代碼。