2017-06-18 2 views
0

Ich versuche ein paar Gläser aus einem nativen Projekt in meine Xamarin Android App einzubetten, und ich habe zwei separate gefunden (aber ich vermute, verwandt) Probleme:Xamarin Android: Ich kann jna-4.2.0.jar nicht in ein Android Binding-Projekt einbetten

  1. Eine der Dateien im Paket ist jna-4.2.0.jar. Wenn ich versuche, die Bindung Projekt allein zu bauen, bekomme ich diesen Fehler:

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

Der generierte Code ist wie folgt:

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

ich auch die neueste Version herunterzuladen versucht haben, jna -4.4.0.jar, von https://github.com/java-native-access/jna, aber das erzeugt den gleichen Fehler.

  1. Die Bibliothek Ich verwende erzeugt diesen Fehler:

'Version' does not implement interface member 'IComparable.CompareTo(Object)'

habe ich versucht, dieses Problem zu lösen, in der Dokumentation Xamarin nachfolgen und mit den Kommentaren in die erzeugten cs Dateien, indem Sie diese Zeile in die metadata.xml Datei hinzufügen in meiner Bindung Projekt:

<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> 

aber dies scheint überhaupt keine Wirkung gehabt zu haben.

Antwort

0

Haben Sie versucht, den Klassennamen in diesem Fall zu ändern?

Versuchen Sie, die folgenden in der Metadata.xml Datei (ungetestet) hinzuzufügen:

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

Dies wird sich ändern den Namen der Klasse von Callback in Java zu ICallback in C#

Verwandte Themen