總覽
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程式集:
- 建立一個新的Java綁定庫項目。
- 将.JAR檔案添加到項目中。
- 為.JAR檔案設定适當的生成操作。
- 選擇.JAR支援的目标架構。
- 建構綁定庫。
建立綁定庫後,我們将開發一個小型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:
該模闆包括一個Jars檔案夾,您可以在其中将.JAR添加到Bindings Library項目中。右鍵單擊Jars檔案夾,然後選擇添加>現有項目
浏覽至先前下載下傳的picasso-2.xxjar檔案,将其選中并單擊Add:
驗證是否已将picasso-2.xxjar檔案成功添加到項目中:
建立Java綁定庫項目時,必須指定将.JAR嵌入到綁定庫中還是單獨打包。為此,請指定以下建構操作之一:
- EmbeddedJar -.JAR将被嵌入到綁定庫中。
- InputJar – .JAR将與綁定庫分開。
通常,您使用EmbeddedJar建構操作,以便将.JAR自動打包到綁定庫中。這是最簡單的選項-.JAR中的Java位元組碼将轉換為Dex位元組碼,并(與Managed Callable Wrappers一起)嵌入到APK中。如果要将.JAR與綁定庫分開,可以使用InputJar選項;但是,您必須確定.JAR檔案在運作您的應用的裝置上可用。
将建構動作設定為EmbeddedJar:
接下來,打開項目Properties來配置Target Framework。如果.JAR使用任何Android API,請将目标架構設定為.JAR期望的API級别。通常,.JAR檔案的開發人員将訓示.JAR與哪個API級别相容。(有關總體上有關Target Framework設定和Android API級别的更多資訊,請參閱 了解Android API級别。)
為綁定庫設定目标API級别(在本示例中,我們使用的是API級别19):
最後,建構綁定庫。盡管可能會顯示一些警告消息,但“綁定庫”項目應成功建構并在以下位置生成輸出.DLL:JarBinding / bin / Debug / JarBinding.dll
使用綁定庫
要在Xamarin.Android應用中使用此.DLL,請執行以下操作:
- 添加對綁定庫的引用。
- 通過托管可調用包裝程式向.JAR發出呼叫。
在以下步驟中,我們将建立一個最小的應用程式,該應用程式使用Bindings庫下載下傳并在其中顯示圖像
ImageView
。“繁重的工作”由.JAR檔案中的代碼完成。
首先,建立一個使用綁定庫的新Xamarin.Android應用。右鍵單擊解決方案,然後選擇添加新項目;将新項目命名為BindingTest。我們将在與綁定庫相同的解決方案中建立此應用,以簡化此演練。但是,使用綁定庫的應用程式可以駐留在其他解決方案中:
右鍵單擊BindingTest項目的References節點,然後選擇Add Reference ...:
檢查先前建立的JarBinding項目,然後單擊OK:
打開BindingTest項目的References節點,并驗證存在JarBinding引用:
将以下
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代碼。