2016-07-08 8 views
1

私はJava SDKをXamarin.Androidに移植しています。Java SDKをXamarin.Androidに移植する、型に関するライブラリのエラー

数多くのエラーを解決した後、私はこの1つで立ち往生しています:

/Users/alejandro_l/Projects/KontaktBeaconSDK/KontaktBeaconSDK/obj/Debug/generated/src/Com.Kontakt.Sdk.Android.Ble .Configuration.Scan.EddystoneScanContext.cs(65,65):エラーCS1715:Com.Kontakt.Sdk.Android.Ble.Configuration.Scan.EddystoneScanContext.EventTypes': type must be System.Collections.Generic.ICollection 'オーバーライドされたメンバーに一致するように' Com.Kontakt.Sdk.Android.Ble.Configuration.Scan.AbstractProfileSpecificScanContext.EventTypes '( CS1715)(KontaktBeaconSDK)

エラーIを解決するには、foll

<attr path="/api/package[@name='com.kontakt.sdk.android.ble.configuration.scan']/class[@name='EddystoneScanContext']/method[@name='getEventTypes' and count(parameter)=0]" name="managedType">System.Collections.Generic.ICollection</attr> 

に基づいて:抽象クラスと一致するメソッドの種類を変更するために発電機に伝えるのmetadata.xmlにラインをためhttps://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/customizing-bindings/java-bindings-metadata/#managedType

生成される出力はまだ間違った形状をしている:

 static IntPtr id_getEventTypes; 
    public override unsafe global::System.Collections.ICollection EventTypes { 
     // Metadata.xml XPath method reference: path="/api/package[@name='com.kontakt.sdk.android.ble.configuration.scan']/class[@name='EddystoneScanContext']/method[@name='getEventTypes' and count(parameter)=0]" 
     [Register ("getEventTypes", "()Ljava/util/Collection;", "GetGetEventTypesHandler")] 
     get { 
      if (id_getEventTypes == IntPtr.Zero) 
       id_getEventTypes = JNIEnv.GetMethodID (class_ref, "getEventTypes", "()Ljava/util/Collection;"); 
      try { 
       return global::Android.Runtime.JavaCollection.FromJniHandle (JNIEnv.CallObjectMethod (Handle, id_getEventTypes), JniHandleOwnership.TransferLocalRef); 
      } finally { 
      } 
     } 
    } 

ご覧のとおり、System.Collections.ICollectionが生成され、System.Collectionsは生成されません。 一般 .ICollection。 注:ジェネリック型の設定方法もまだ分かりませんが、それが次のステップです。

私はバインディングの初心者ですが、わかりません。誰かが私が間違っていることを教えてもらえますか?私はここで不可能にしようとしていますか? SDKのソースコードを変更する必要はありますか? (私が "ビルド"を使用して手動で出力を変更すると、将来私はdllを得るかもしれないことに注意してください(まだ49のエラーが残っていますが)。

私が使用した別の有用なリンク:https://gist.github.com/brendanzagaeski/9607158

答えて

0

はそれを見つけた:

<attr path="/api/package[@name='com.kontakt.sdk.android.ble.configuration.scan']/class[@name='EddystoneScanContext']/method[@name='getEventTypes' and count(parameter)=0]" name="return">System.Collections.Generic.ICollection&lt;Com.Kontakt.Sdk.Android.Ble.Discovery.EventType&gt;</attr>

をエラーが原因name="return"に消えてしまったようです。私は文書に返信が表示されないのはなぜか分かりませんが、api.xmlには表示されるのでOKです。

+0

警告: "managedReturn" = "メソッドの戻り値の型を変更します。戻り値の属性は変更されないため、JNI署名に互換性のない変更が発生する可能性があります。それが避けられる理由です。私はさらにエラーが出るかどうかチェックします。 – Alejandro

関連する問題