将JavaSDK移植到Xamarin.Android,绑定库时出现类型错误

将JavaSDK移植到Xamarin.Android,绑定库时出现类型错误,android,generics,binding,xamarin.android,Android,Generics,Binding,Xamarin.android,我正在将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):错误CS1715:Com.Kontakt.Sdk.Android.Ble

我正在将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):错误CS1715:
Com.Kontakt.Sdk.Android.Ble.Configuration.Scan.EddystoneScanContext.EventTypes”:类型必须为
System.Collections.Generic.ICollection',以匹配被覆盖的成员'Com.Kontakt.Sdk.Android.Ble.Configuration.Scan.AbstractProfileSpecificScanContext.EventTypes'(CS1715)(KontaktBeaconSDK)

为了解决此错误,我认为可以在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>
如您所见,生成的是System.Collections.ICollection,而不是System.Collections。泛型.ICollection。 注意:我甚至还没有弄清楚如何设置泛型类型,但这是下一步

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

我使用的另一个有用的链接:

找到了它:

System.Collections.Generic.ICollectionCom.Kontakt.Sdk.Android.Ble.Discovery.EventType


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

警告:文档中的“managedReturn”=“更改方法的返回类型。这不会更改返回属性(因为对返回属性的更改可能会导致对JNI签名的不兼容更改)”。这就是为什么它被避免的原因。我会检查是否还有错误。你是我的英雄。经过5小时的搜索,这是唯一的答案,它给出了很好的方向,几乎回答了我的问题。我需要替代的通用IList属性IList。我的解决方案System.Collections.IListOrg.Webrtc.AudioTrack
        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 {
            }
        }
    }