Xamarin Android:无法将jna-4.2.0.jar嵌入Android Binding项目

时间:2017-06-18 15:15:03

标签: android xamarin xamarin.android xamarin-binding

我正在尝试将一些原生项目的罐子嵌入到我的Xamarin Android应用程序中,我遇到了两个独立的(但我怀疑相关)问题:

  1. 包中的一个文件是jna-4.2.0.jar。当我尝试自己构建绑定项目时,我收到此错误:
  2.   

    名称空间'Com.Sun.Jna'中不存在类型或命名空间名称'ICallback'(您是否缺少程序集引用?)

    生成的代码如下:

        [Register ("getCallback", "(Ljava/lang/Class;Lcom/sun/jna/Pointer;)Lcom/sun/jna/Callback;", "")]
        public static unsafe global::Com.Sun.Jna.ICallback GetCallback (global::Java.Lang.Class type, global::Com.Sun.Jna.Pointer p)
        {
            if (id_getCallback_Ljava_lang_Class_Lcom_sun_jna_Pointer_ == IntPtr.Zero)
                id_getCallback_Ljava_lang_Class_Lcom_sun_jna_Pointer_ = JNIEnv.GetStaticMethodID (class_ref, "getCallback", "(Ljava/lang/Class;Lcom/sun/jna/Pointer;)Lcom/sun/jna/Callback;");
            try {
                JValue* __args = stackalloc JValue [2];
                __args [0] = new JValue (type);
                __args [1] = new JValue (p);
                global::Com.Sun.Jna.ICallback __ret = global::Java.Lang.Object.GetObject<global::Com.Sun.Jna.ICallback> (JNIEnv.CallStaticObjectMethod  (class_ref, id_getCallback_Ljava_lang_Class_Lcom_sun_jna_Pointer_, __args), JniHandleOwnership.TransferLocalRef);
                return __ret;
            } finally {
            }
        }
    

    我也尝试从https://github.com/java-native-access/jna下载最新版本jna-4.4.0.jar,但这会产生相同的错误。

    1. 我正在使用的库会生成此错误:
    2.   

      'Version'不实现接口成员   'IComparable.CompareTo(对象)'

      我尝试按照Xamarin文档解决此问题,并使用生成的cs文件中的注释,将此行添加到我的绑定项目中的metadata.xml文件中:

      <attr path="/api/package[@name='com.innovatrics.iface']/class[@name='Version']/method[@name='compareTo' 
          and count(parameter)=1 
          and parameter[1][@type='com.innovatrics.iface.Version']]" 
          name="managedType">Java.Lang.Object</attr>
      

      但这似乎根本没有效果。

2 个答案:

答案 0 :(得分:1)

在这种情况下,您是否尝试更改类名?

尝试在Metadata.xml文件中添加以下内容(未经测试):

<attr path="/api/package[@name='com.sun.jna']/interface[@name='Callback']" name="name">ICallback</attr>

这会将接口名称从Java中的Callback更改为C#中的ICallback

答案 1 :(得分:0)

使用上面的重命名方法,我能够克服这个问题,但是在尝试绑定JNA Jar文件时发现了更多错误。

我想知道,您还获得了多少,如果可能的话,可以共享允许您完成此绑定的Metadata.xml文件吗?