我正在尝试为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 ()
任何想法都将不胜感激!
谢谢。
答案 0 :(得分:1)
您将需要将GetPropertyAction.Run()
的managedReturn类型更改为Object
,但不确定是System.Object
还是Java.Lang.Object
。我的猜测是Java.Lang.Object
。
managedReturn 更改方法的返回类型。这不会更改return属性(因为更改return属性会导致对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>
类似的事情应该起作用。