gpt4 book ai didi

android - .jar android 库导入 Xamarin 项目

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:45:45 25 4
gpt4 key购买 nike

有几种方法可以将 Andorid aka-native 代码(Java 代码)集成到 Xamarin 项目中。官方途径列于this article .

我们正在尝试使用文章中描述的 Java 库绑定(bind)方法。 Our test andoid library is published on Github专门针对这个问题。

我们在 Android 开发者工具中创建了它,并将其设置为 Java Android 库。它在 Eclipse 中构建为 .jar 格式,Xamarin 网站上的教程假定该格式就足够了。

如果我们尝试将 .jar 绑定(bind)到 Visual Studio 中的项目中,对象资源管理器将向我们显示绑定(bind)组件的命名空间,但在代码中,即使引用了程序集,我们也无法访问其中的方法和类命名空间,在我们的测试 java android lib 中声明。

另一方面,当我们获取几乎任何 .jar,它是互联网上的 android 库(例如 this one )时,我们可以毫无问题地绑定(bind)它并访问它的方法。

请比较两个 .jar,如果可能,让我知道我们在 github 上的测试 android 库有什么问题,导致我们的 namespace 无法从代码中获得。

最佳答案

我读的一样Binding a Java Library您所做的文章,按照说明进行操作,并且没有构建错误。当我尝试使用我的 jar 文件中的类时,智能感知没有识别出任何东西。然后我阅读了关于 API Metadata Reference 的后续文章.这让我想到也许我应该尝试编辑 Transforms/Metadata.xml 文件。在对其进行简要编辑以包含包的重命名之后,Visual Studio 允许(在编译之后)从 jar 文件中引用一个类。然后我试图从类中调用一个方法,再次出现另一个编译器错误。因此,我返回到 Metadata.xml 文件并添加了一个条目来重命名有问题的方法。我编辑了我的代码以调用重命名的方法,并且 Visual Studio 编译正常。我将这个调用集成到一个单元测试用例中,它通过了!

根据我的阅读,似乎没有必要编辑 Metadata.xml 文件,但至少根据我的经验,这似乎是必要的。它在 obj/Release/api.xml 文件上使用 XPATH(如 API Metadata Reference 中所述)。在那篇文章中有重命名包和方法名称的示例,因此插入到我的 Metadata.xml 文件中对我来说并没有太多工作。此外,我从 Binding a Java Library 下载了 OsmBindingDroidExample。文章并检查了他们的 Metadata.xml 文件。

这也是我的 XML 供引用:

<metadata>
<attr path="/api/package[@name='com.abc.def']" name="managedName">MyRenamedPackage</attr>
<attr path="/api/package[@name='com.abc.def']/class[@name='MyClass']/method[@name='originalJavaMethod']" name="managedName">RenamedDotNetMethod</attr>
</metadata>

所以,现在在我的 .NET 代码中,我可以写:

MyRenamedPackage.MyClass.RenamedDotNetMethod(...);

希望这对您有所帮助!

编辑:

我对 Xamarin 工具包有了更多的了解,并进行了更新以使其更容易使用。

为了限制需要与 jar 方法交互的代码的参与,Xamarin 允许您在 Additions 文件夹中创建 C# 类。因此,我创建了一个包装类,它公开了其他项目可以访问的托管 C# 类中的方法。由于它是 C#,因此没有来自 Visual Studio 的投诉。

这是我之前示例中的包装器类的样子(显然您会选择一个对手头任务更有意义的名称):

public class InovcationWrapper
{
public static void InvokeMethod(...)
{
MyRenamedPackage.MyClass.RenamedDotNetMethod(...);
}
}

然后在您的项目代码中,如果您只调用包装类,您将拥有完整的智能感知:

InvocationWrapper.InvokeMethod(...);

这使得使用起来更加容易,并限制了代码中要忽略的红色波浪线的数量。希望这对您有所帮助!

关于android - .jar android 库导入 Xamarin 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22943866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com