在Xamarin中绑定Jar库时遇到麻烦

5
在绑定我的jar文件时,我在多个类中都遇到了以下错误:
Error CS0534: 'path’ does not implement inherited abstract memberAndroid.OS.AsyncTask.DoInBackground(params 
Java.Lang.Object[])' (CS0534)

除了其他一些错误之外,还有:

package’.Get(int)' hides inherited abstract member `Java.Util.AbstractList.Get(int)' (CS0533)

`package’: member names cannot be the same as their enclosing type (CS0542)

这可能与JAR包或原生Android的命名空间有关,是否有办法解决这些错误?提前感谢您的帮助!
1个回答

4
我有一个通用指南,可能在某些领域有所帮助:

https://gist.github.com/JonDouglas/dda6d8ace7d071b0e8cb

我认为您目前的情况可以通过以下方式解决:

理想情况下,您需要将managedType更改为Java.Lang.Object

<!-- There are also some methods that need to have their generic _parameter_ types simplified to `java.lang.Object`.
         Possible error message: Error CS0115: `SomeMethod(..., T, ...)' is marked as an override but no suitable method found to override (CS0115)
         Possible error message: Error CS0535: `SomeClass' does not implement interface member `SomeMethod(..., Java.Lang.Object,...)' (CS0535)
         Possible error message: Error CS0534: `SomeClass' does not implement inherited abstract member `SomeMethod(..., Java.Lang.Object,...)' (CS0534) -->
    <attr path="/api/package[@name='com.socialize.api']/class[@name='SocializeApi.AsyncAuthenicator']/method[@name='doInBackground' and count(parameter)=1 and parameter[1][@type='com.socialize.api.SocializeRequest']]/parameter[1]" name="managedType">Java.Lang.Object</attr>
    <attr path="/api/package[@name='com.socialize.api']/class[@name='SocializeApi.AsyncGetter']/method[@name='doInBackground' and count(parameter)=1 and parameter[1][@type='com.socialize.api.SocializeRequest']]/parameter[1]" name="managedType">Java.Lang.Object</attr>
    <attr path="/api/package[@name='com.socialize.api']/class[@name='SocializeApi.AsyncPutter']/method[@name='doInBackground' and count(parameter)=1 and parameter[1][@type='com.socialize.api.SocializeRequest']]/parameter[1]" name="managedType">Java.Lang.Object</attr>

来源:https://gist.github.com/brendanzagaeski/9607158#file-metadata-xml-L74-L76

对于您的另一个问题,您可以通过<remove-node>删除节点。

您可以执行以下操作:

<!-- The bindings generator does not currently handle cases where a subclass provides an abstract override for an
     abstract method. From what I've seen, there is no need to keep abstract overrides of abstract methods in the
     binding, so we can remove them.
     Error message: Error CS0533: `SomeMethodName' hides inherited abstract member `SomeMethodName' (CS0533) -->
<remove-node path="/api/package[@name='com.socialize.entity']/class[@name='SocializeActionFactory']/method[@name='postFromJSON' and count(parameter)=2 and parameter[1][@type='org.json.JSONObject'] and parameter[2][@type='T']]" />
<remove-node path="/api/package[@name='com.socialize.entity']/class[@name='SocializeActionFactory']/method[@name='postToJSON' and count(parameter)=2 and parameter[1][@type='T'] and parameter[2][@type='org.json.JSONObject']]" />

来源: https://gist.github.com/brendanzagaeski/9607158#file-metadata-xml-L63-L68

请注意,您需要根据自己的包名和类名调整这些示例。


谢谢您的反馈!我已将这些内容应用到我的项目元数据中,并且编译时没有出现任何错误。现在,当我在我的 Droid 项目中添加库的引用并尝试构建应用程序时,我遇到了一个新错误:mandroiderror XA0000:无效的 create-package 命令:-v --nosign --sdk-dir您对这个错误有什么想法吗?谢谢! - Kenny Gunderman
谢谢你的指南!Xamarin绑定很令人沮丧,但这份文档非常好! - The Fluffy Robot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接