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 程序集:
新建 Java 绑定库项目。
向项目添加 .JAR 文件。
为 .JAR 文件设置适当的生成操作。
选择 .JAR 支持的目标框架。
生成绑定库。
创建绑定库后,我们将开发一个小型 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,请执行以下操作:
添加对绑定库的引用。
通过托管的可调用包装器对 .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 代码。