2017-06-18 31 views
0

我想从本地项目中嵌入一些JAR到我的Xamarin Android应用程序,我已经打了两个单独的(但我怀疑有关)问题:Xamarin Android:不能嵌入Jna-4.2.0.jar到Android绑定项目

  1. 包中的一个文件是jna-4.2.0.jar。当我尝试建立自身的绑定项目,我得到这个错误:

The type or namespace name 'ICallback' does not exist in the namespace 'Com.Sun.Jna' (are you missing an assembly reference?)

生成的代码如下:

[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 { 
     } 
    } 

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

  • 我使用的库生成此错误:
  • 'Version' does not implement interface member 'IComparable.CompareTo(Object)'

    我试图解决这个问题,以下的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> 
    

    但是这似乎已经没有任何影响。

    回答

    0

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

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

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

    这将类名从Callback在Java中的C#改为ICallback