当前位置: 首页 > 知识库问答 >
问题:

将Java SDK移植到Xamarin.Android,与类型有关的绑定库错误

薛弘壮
2023-03-14

我正在将Java SDK移植到Xamarin.Android。

在解决了无数个错误后,我陷入了这一个:

/users/alejandro_l/projects/KontaktBeaconSDK/KontaktBeaconSDK/obj/debug/generated/src/com.kontakt.sdk.android.ble.configuration.scan.eddystonescancontext.cs(65,65):错误KTBeaconSDK)

为了解决这个错误,我认为可以使用metadata.xml中的以下行,告诉生成器更改方法的类型以与抽象类匹配:

<attr path="/api/package[@name='com.kontakt.sdk.android.ble.configuration.scan']/class[@name='EddystoneScanContext']/method[@name='getEventTypes' and count(parameter)=0]" name="managedType">System.Collections.Generic.ICollection</attr>

基于:https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/customizing-bindings/java-bindings-metadata/#managedtype

生成的输出仍然具有错误的形状:

        static IntPtr id_getEventTypes;
    public override unsafe global::System.Collections.ICollection EventTypes {
        // Metadata.xml XPath method reference: path="/api/package[@name='com.kontakt.sdk.android.ble.configuration.scan']/class[@name='EddystoneScanContext']/method[@name='getEventTypes' and count(parameter)=0]"
        [Register ("getEventTypes", "()Ljava/util/Collection;", "GetGetEventTypesHandler")]
        get {
            if (id_getEventTypes == IntPtr.Zero)
                id_getEventTypes = JNIEnv.GetMethodID (class_ref, "getEventTypes", "()Ljava/util/Collection;");
            try {
                return global::Android.Runtime.JavaCollection.FromJniHandle (JNIEnv.CallObjectMethod  (Handle, id_getEventTypes), JniHandleOwnership.TransferLocalRef);
            } finally {
            }
        }
    }

如您所见,生成的是System.Collections.ICollection,而不是System.Collections.Generic.ICollection。注意:我甚至还不知道如何设置泛型类型,但这是下一步。

我是一个新手在装订,我不能弄明白。有人能告诉我我做错了什么吗?我在尝试不可能的事情吗?我需要更改SDK的源代码吗?(请注意,如果我使用“build”并手动更改输出,我可能会在将来得到dll(尽管仍然剩下49个错误),但我想知道我是否能以适当的方式解决)。

我使用的另一个有用的链接:https://gist.github.com/brendanzagaeski/9607158

共有1个答案

范翰飞
2023-03-14

找到了它:

system.collections.generic.icollection<;com.kontakt.sdk.android.ble.discovery.eventtype>;

由于name=“return”,错误似乎已经消失。我不知道为什么return没有出现在文档中,但它出现在api.xml中,所以应该可以。

 类似资料:
  • 我尝试使用Java绑定库来使用MultiImageChooser(https://github.com/derosa/MultiImageChooser)。 以下是我采取的步骤: attr path=“/api/package[@name='com.luminous.pick']/class[@name='galleryadapter']/method[@name='get item']”name

  • “2”->com.android.support:support-v4:25.1.1 “3”->com.google.android.gms:play-services-位置:10.2.0 “4”->com.google.android.gms:play-services-gcm:10.2.0 在这个场景中,如果我需要创建绑定dll来包装依赖于其他3个AAR的父AAR: 我是否应该(A)创建4个绑

  • 主要内容:什么是PCL在本章中,我们将讨论什么是PCL(可移植类库),以及为什么我们需要PCL。 为了理解这个概念,让我们打开在前面章创建的类库项目文件夹。 在这个文件夹中,除了和CS文件之外,还可以看到文件,这是因为Visual Studio安装.NET Core项目类型为而不是。 正如微软所提到的,将会消失,但它仍然在预览工具中。UWP应用程序使用。 现在把引用和实际上是不可行的,而且这个功能不会被执行,因为将会移

  • 问题内容: 我已经尝试将invRegex.py移植到node.js实现了一段时间,但是我仍然在努力。多亏了ret.js标记生成器,我已经有了正则表达式分析树,并且运行良好,但是以内存高效的方式实际生成和连接所有不同元素对我来说是非常具有挑战性的。为简单起见,可以说我有以下正则表达式: 喂养到产生下列输出( tabbified 取更小的空间): 考虑到我能够获取每个单独的令牌并产生所有有效的单独输出

  • 怎么啦? 谢谢

  • 我开始转换所有64位,并注意Mac汇编语法。 我有东西要组装,但我立即遇到了一个奇怪的分段错误: QUIT通过宏defword定义如下: null 附注:是的,我可以让琼斯在Docker图像中完美地工作,但这是重点之外的。我真的希望它在卡特琳娜64位工作,开箱即用。