总览

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:

xamarin调用java库 xamarin jar_Xamarin

该模板包括一个Jars文件夹,您可以在其中将.JAR添加到Bindings Library项目中。右键单击Jars文件夹,然后选择添加>现有项目

xamarin调用java库 xamarin jar_C#_02

浏览至先前下载的picasso-2.xxjar文件,将其选中并单击Add:

xamarin调用java库 xamarin jar_Xamarin_03

验证是否已将picasso-2.xxjar文件成功添加到项目中:

xamarin调用java库 xamarin jar_xamarin调用java库_04

创建Java绑定库项目时,必须指定将.JAR嵌入到绑定库中还是单独打包。为此,请指定以下构建操作之一:

  • EmbeddedJar -.JAR将被嵌入到绑定库中。
  • InputJar – .JAR将与绑定库分开。

通常,您使用EmbeddedJar构建操作,以便将.JAR自动打包到绑定库中。这是最简单的选项-.JAR中的Java字节码将转换为Dex字节码,并(与Managed Callable Wrappers一起)嵌入到APK中。如果要将.JAR与绑定库分开,可以使用InputJar选项;但是,您必须确保.JAR文件在运行您的应用的设备上可用。

将构建动作设置为EmbeddedJar:

xamarin调用java库 xamarin jar_xamarin调用java库_05

接下来,打开项目Properties来配置Target Framework。如果.JAR使用任何Android API,请将目标框架设置为.JAR期望的API级别。通常,.JAR文件的开发人员将指示.JAR与哪个API级别兼容。(有关总体上有关Target Framework设置和Android API级别的更多信息,请参阅 了解Android API级别。)

为绑定库设置目标API级别(在本示例中,我们使用的是API级别19):

xamarin调用java库 xamarin jar_Java_06

最后,构建绑定库。尽管可能会显示一些警告消息,但“绑定库”项目应成功构建并在以下位置生成输出.DLL:JarBinding / bin / Debug / JarBinding.dll

使用绑定库

要在Xamarin.Android应用中使用此.DLL,请执行以下操作:

  1. 添加对绑定库的引用。
  2. 通过托管可调用包装程序向.JAR发出呼叫。

在以下步骤中,我们将创建一个最小的应用程序,该应用程序使用Bindings库下载并在其中显示图像ImageView。“繁重的工作”由.JAR文件中的代码完成。

首先,创建一个使用绑定库的新Xamarin.Android应用。右键单击解决方案,然后选择添加新项目;将新项目命名为BindingTest。我们将在与绑定库相同的解决方案中创建此应用,以简化此演练。但是,使用绑定库的应用程序可以驻留在其他解决方案中:

xamarin调用java库 xamarin jar_Android_07

右键单击BindingTest项目的References节点,然后选择Add Reference ...:

xamarin调用java库 xamarin jar_Xamarin_08

检查先前创建的JarBinding项目,然后单击OK:

xamarin调用java库 xamarin jar_xamarin调用java库_09

打开BindingTest项目的References节点,并验证存在JarBinding引用:

xamarin调用java库 xamarin jar_Java_10

将以下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代码。