【问题标题】:Xamarin Android Binding ProjectXamarin Android 绑定项目
【发布时间】:2019-09-03 13:26:58
【问题描述】:

我正在尝试为 ACR1225U 蓝牙读卡器构建一个与 Android SDK 的 Xamarin 绑定项目。

添加 AAR 文件后,我很难通过第一次构建。生成的文件之一正在实现一个与在其实现的接口上定义的方法不匹配的方法。我收到以下异常。

'GetPropertyAction' does not implement interface member 'IPrivilegedAction.Run()'. 'GetPropertyAction.Run()' cannot implement 'IPrivilegedAction.Run()' because it does not have the matching return type of 'Object'.

自动生成的代码是:

[Register ("run", "()Ljava/lang/String;", "GetRunHandler")]
public virtual unsafe string Run ()

任何想法将不胜感激!

谢谢。

【问题讨论】:

    标签: android xamarin binding


    【解决方案1】:

    您需要将 GetPropertyAction.Run() 的 managedReturn 类型更改为 Object,但不确定是 System.Object 还是 Java.Lang.Object。我的猜测是Java.Lang.Object

    有关如何更改返回类型的文档: https://docs.microsoft.com/en-us/xamarin/android/platform/binding-java-library/customizing-bindings/java-bindings-metadata#managedreturn

    托管返回 更改方法的返回类型。这不会更改返回属性(因为更改返回属性可能会导致对 JNI 签名的不兼容更改)。在下面的示例中,append 方法的返回类型从 SpannableStringBuilder 更改为 IAppendable(请记住,C# 不支持协变返回类型):

    <attr path="/api/package[@name='<replace.with.the.actual.name.of.the.package.in.java>']/
          class[@name='GetPropertyAction']/
          method[@name='Run']" 
          name="managedReturn">Java.Lang.Object</attr>
    

    类似的东西应该可以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 2013-07-09
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 1970-01-01
      相关资源
      最近更新 更多