2015-02-03 3 views
0

У меня есть приложение для Android (Java), которое использует библиотеку Android. Все работает отлично, но мне нужно обернуть это приложение в приложение Xamarin. Поэтому я решил преобразовать это приложение во вторую библиотеку Android. Я создал приложение Xamarin для Android и проект библиотеки Java Java Bindings, в котором я добавил два файла .aar в папку «Jars».Xamarin java binding library compiler error

Проблемы возникают, когда я пытаюсь скомпилировать этот связующий проект. Я получаю много ошибок, как этот:

/.../obj/Release/generated/src/Com.Google.Common.Util.Concurrent.ForwardingListenableFuture.cs(17,17): Error CS0102: The type `Com.Google.Common.Util.Concurrent.ForwardingListenableFutureInvoker' already contains a definition for `id_delegate' (CS0102) 

Когда я открываю сгенерированный ForwardingListenableFuture.cs файла есть этот код:

[global::Android.Runtime.Register ("com/google/common/util/concurrent/ForwardingListenableFuture", DoNotGenerateAcw=true)] 
internal partial class ForwardingListenableFutureInvoker : ForwardingListenableFuture, global::Com.Google.Common.Util.Concurrent.IListenableFuture { 

     public ForwardingListenableFutureInvoker (IntPtr handle, JniHandleOwnership transfer) : base (handle, transfer) {} 

     protected override global::System.Type ThresholdType { 
      get { return typeof (ForwardingListenableFutureInvoker); } 
     } 

     static IntPtr id_delegate; 
     // Metadata.xml XPath method reference: path="/api/package[@name='com.google.common.util.concurrent']/class[@name='ForwardingListenableFuture']/method[@name='delegate' and count(parameter)=0]" 
     [Register ("delegate", "()Lcom/google/common/util/concurrent/ListenableFuture;", "GetDelegateHandler")] 
     protected override global::Com.Google.Common.Util.Concurrent.IListenableFuture Delegate() 
     { 
      if (id_delegate == IntPtr.Zero) 
       id_delegate = JNIEnv.GetMethodID (class_ref, "delegate", "()Lcom/google/common/util/concurrent/ListenableFuture;"); 
      return global::Java.Lang.Object.GetObject<global::Com.Google.Common.Util.Concurrent.IListenableFuture> (JNIEnv.CallObjectMethod (Handle, id_delegate), JniHandleOwnership.TransferLocalRef); 
     } 

     static IntPtr id_delegate; 
     // Metadata.xml XPath method reference: path="/api/package[@name='com.google.common.util.concurrent']/class[@name='ForwardingFuture']/method[@name='delegate' and count(parameter)=0]" 
     [Register ("delegate", "()Ljava/util/concurrent/Future;", "GetDelegateHandler")] 
     protected override global::Java.Util.Concurrent.IFuture Delegate() 
     { 
      if (id_delegate == IntPtr.Zero) 
       id_delegate = JNIEnv.GetMethodID (class_ref, "delegate", "()Ljava/util/concurrent/Future;"); 
      return global::Java.Lang.Object.GetObject<global::Java.Util.Concurrent.IFuture> (JNIEnv.CallObjectMethod (Handle, id_delegate), JniHandleOwnership.TransferLocalRef); 
     } 

     static IntPtr id_delegate; 
     // Metadata.xml XPath method reference: path="/api/package[@name='com.google.common.collect']/class[@name='ForwardingObject']/method[@name='delegate' and count(parameter)=0]" 
     [Register ("delegate", "()Ljava/lang/Object;", "GetDelegateHandler")] 
     protected override global::Java.Lang.Object Delegate() 
     { 
      if (id_delegate == IntPtr.Zero) 
       id_delegate = JNIEnv.GetMethodID (class_ref, "delegate", "()Ljava/lang/Object;"); 
      return global::Java.Lang.Object.GetObject<global::Java.Lang.Object> (JNIEnv.CallObjectMethod (Handle, id_delegate), JniHandleOwnership.TransferLocalRef); 
     } 

    } 

Действительно, «id_delegate» дублируется ..

у меня также есть предупреждения, как это связано с 1 .aar (не одного приложения):

/../JARTOXML: Warning J2X9001: Couldn't load class com/company/project/controllers/activities/MenuActivity : java.lang.NoClassDefFoundError: android/support/v4/app/FragmentActivity (J2X9001) 

ответ

0

OK Я решил первую часть ошибок, добавив инструкции remove-node в Metadata.xml.

Для второй части добавление ссылки на Xamarin.Android.Support.v4 решило проблему.

+0

как вам удалось удалить дубликаты? –

+0

@Rati_Ge Как кажется [здесь] (https://forums.xamarin.com/discussion/32324/aar-binding-type-or-namespace-could-not-be-found), оператору удалось удалить дубликаты создание индивидуальных проектов привязки. Один для каждого аара. –