Xamarin.Forms Android 绑定库错误

Posted

技术标签:

【中文标题】Xamarin.Forms Android 绑定库错误【英文标题】:Xamarin.Forms Android Binding library error 【发布时间】:2017-12-09 01:17:50 【问题描述】:

我目前面临一个关于 Xamarin Forms android 绑定库的问题。 我在绑定项目中放置了一个 .jar 库,但我意识到该库没有完全加载。

当我构建我的绑定项目时,它可以正确编译,但我的输出中仍然有一些警告。

1>BINDINGSGENERATOR:警告 BG8102:Java.Util.LinkedHashMap 类具有未知的基本类型 Java.Util.HashMap。

1>BINDINGSGENERATOR:警告 BG8103:Com.MyParams 类具有无效的基类型 java.util.LinkedHashMap。

1>BINDINGSGENERATOR:警告 BG8701:托管类型 Com.TagOp 中方法 GetParams 中的返回类型无效 com.MyParams。

1>BINDINGSGENERATOR:警告 BG8801:托管类型 Com.TagOp 中的方法 TagOps 中的参数类型 com.MyParams 无效。

1>BINDINGSGENERATOR:警告 BG8801:托管类型 Com.TagOp 中的方法 TagOps 中的参数类型 com.MyParams 无效。

1>BINDINGSGENERATOR:警告 BG8801:托管类型 Com.Tag 中的方法 TagPage 中的参数类型 com.MyParams 无效。

在我的 Android 代码中,我无法使用 Com.MyParams 类,因为它没有加载。

自 Xamarin for Visual Studio 2017 更新后出现此问题。

你有解决这个问题的方法吗?提前致谢。

【问题讨论】:

你检查了你的Android项目源代码,那个项目依赖其他库吗?如果是这样,您需要将其他库导入到您的绑定项目中。 我的 Android 项目引用了 Xamarin 库和我的 Binding 项目。当我看到绑定项目的obj/ 文件夹时,我的com.MyParams 没有生成。所以我的猜测是绑定项目不会生成这个类,因为我在主帖上发布了警告。 “这个问题是在Xamarin for Visual Studio 2017更新后出现的。”,你的意思是不更新Xamarin就好了吗?什么版本? 我已经在 5 月更新了 Xamarin,它在 VS2017 上将不再工作。我正在使用 Xamarin 4.5.0.486 我有一个通用指南供您参考:gist.github.com/JonDouglas/dda6d8ace7d071b0e8cb 正如许多人之前指出的,您很可能缺少生成这些类型的依赖库。 【参考方案1】:

HashMap & LinkedHashMap 是未知的......因此基于它们的任何东西都不能被实例化。

当数据绑定不知道一个类,那么它要么缺少注释,它可能没有扩展类BaseObservable 和/或有错误的get / set 方法名称(需要匹配名称领域的);需要满足很多条件,具体取决于需要单向数据绑定还是双向数据绑定。查看生成的代码通常会提供一个线索,即需要更改哪些内容。

但是,直接对 JAR 类进行数据绑定似乎是不可能的,除非将所需的注释添加到它们中,然后构建 JAR,以使它们可绑定。 Android Data Binding Library 和 Xamarin Java Bindings Metadata 的文档对此进行了解释(从头开始复制所需的 Java 类,完全可绑定,如果不是唯一的方法,可能是最快的方法)。

只能通过替换要绑定到 GUI 的类来解决这个问题 - 这可以通过相当简单的类或使用 Java decompiler(以便知道要使用的字段)来实现。

【讨论】:

所以我需要告诉绑定生成器用 HashMap 扩展 LinkedHashMap 类?我试过<attr path="/api/package[@name='java.util']/class[@name='LinkedHashMap']" name="extends">java.util.HashMap</attr>,但得到了错误:1>BINDINGSGENERATOR : warning BG8A04: <attr path="/api/package[@name='java.util']/class[@name='LinkedHashMap']"/> matched no nodes. 不;您需要 JAR 中类的源代码或重新创建类似的东西......不能只获取任何类并绑定它,因为数据绑定需要特定的方法名称和注释;例如。 @Bindable 用于吸气剂......没有这些,方法将不会暴露。虽然我实际上维护了一个包含许多绑定 UI 元素、第三方库等的代码库......并尝试了你已经尝试做的事情,尽管在 Java 中 - 虽然没有办法 - 一个人只能努力在它后面重新创建必需的类,但可以绑定....或创建类,几乎不用于绑定它们+ JAR ... 仍然觉得奇怪,连这些常见的类都没有找到;你确定安装并引用了JDK吗? 我从 2016 年 9 月开始使用 JDK,刚刚更新到最新版本,问题仍然存在。我没有该库的源代码,它曾经在以前版本的 Xamarin 上工作。由于可能的更新(我认为它可能会更新)出现了警告,现在我无法编译我的 Android 版本,因为缺少这种类型。 @Eastrall 在 Xamarin bugzilla 上有一个开放的错误:bugzilla.xamarin.com/show_bug.cgi?id=58187 ...虽然它链接到这个问题。尝试全新的最小安装至少可以解决损坏的 IDE(更新程序可能会修补文件,而不是总是安装它们)。

以上是关于Xamarin.Forms Android 绑定库错误的主要内容,如果未能解决你的问题,请参考以下文章

有人可以通过Xamarin.Forms和UI数据绑定提供有关Realm数据存储库的示例吗?

Xamarin.Forms + 本机库 OpenCV

Xamarin Forms Android - 使用 MSAL 库部署时身份验证失败

Xamarin.Forms Android 底部导航栏

Xamarin.Forms 3.1.0+版本 Android 原生支持底部导航栏

Xamarin.Forms 3.1.0+版本 Android 原生支持底部导航栏啦