2017-06-18 57 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