MAUI绑定 .JAR

[删除(380066935@qq.com或微信通知)]

更好的阅读体验请查看原文:https://learn.microsoft.com/zh-cn/xamarin/android/platform/binding-java-library/binding-a-jar

本演练将提供从 Android .JAR 文件创建 Xamarin.Android Java 绑定库的分步说明。

概述

Android 社区提供很多你可能需要在应用中使用的 Java 库。 这些 Java 库通常以 .JAR(Java 存档)格式打包,但你可以将 .JAR 打包到 Java 绑定库,使 Xamarin.Android 应用可以使用其功能。 Java 绑定库用于通过自动生成的代码包装器为 C# 代码提供 .JAR 文件中的 API。

Xamarin 工具可以从一个或多个输入 .JAR 文件生成绑定库。 绑定库(.DLL 程序集)包含以下内容:

  • 初始 .JAR 文件的内容。

  • 托管可调用包装器 (MCW) ,它们是包装相应 Java 类型的 C# 类型。JAR 文件 () 。

生成的 MCW 代码使用 JNI(Java 本机接口)将 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 绑定库项目。

  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

首先,新建绑定库项目。 在 Visual Studio for Mac 或 Visual Studio 中,新建解决方案并选择 Android 绑定库模板。 (本演练中的屏幕截图使用的是 Visual Studio,但 Visual Studio for Mac 非常类似。)将该解决方案命名为 JarBinding:

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

导航到之前下载的 picasso-2.x.x.jar 文件,选中它,然后单击“添加” :

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

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

  • EmbeddedJar –JAR 将嵌入到绑定库中。

  • InputJar –JAR 将与绑定库分开。

通常使用的是 EmbeddedJar 生成操作,使 .JAR 自动打包到绑定库。 这是最简单的选项 – Java 字节码。JAR 转换为 Dex 字节码,并嵌入 (以及托管可调用包装器) 到 APK 中。 如果要将 .JAR 与绑定库分离,可以使用 InputJar 选项;但必须确保 .JAR 文件在运行应用的设备上可用。

将生成操作设置为 EmbeddedJar:

接下来,打开项目属性,配置“目标框架”。 如果 .JAR 使用任何 Android API,请将目标框架设置为 .JAR 预计的 API 级别。 通常,.JAR 文件的开发人员将指示 .JAR 所兼容的 API 级别。 (有关目标框架设置和 Android API 级别的更多概要信息,请参阅了解 Android API 级别。)

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

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

使用绑定库

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

  1. 添加对绑定库的引用。

  2. 通过托管的可调用包装器对 .JAR 进行调用。

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

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

右键单击 BindingTest 项目的“引用”节点并选择“添加引用...” :

勾选之前创建的 JarBinding 项目,然后单击“确定” :

打开 BindingTest 项目的“引用”节点,验证是否存在 JarBinding 引用 :

修改 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 - 这使得可以轻松访问驻留在绑定库中的基于 Picasso Java 的类的方法:

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 项目。 应用将启动,并在短暂延迟后(取决于网络条件),应下载并显示与以下屏幕截图类似的图像:

祝贺你! 你成功绑定了 Java 库 .JAR 并在 Xamarin Android 应用中使用了它。

总结

在本演练中,我们为第三方 .JAR 文件创建了一个绑定库,将绑定库添加到最小的测试应用中,然后运行该应用以验证我们的 C# 代码是否可以调用驻留在 .JAR 文件中的 Java 代码。