1

I have a android application (Java) that uses an Android Library. Everything works fine, but I need to wrap this application into a Xamarin application. So I decided to transform this application into a 2nd Android Library. I created my Xamarin Android application, and an Android Java Bindings Library project in which I added the two .aar files to the "Jars" folder.

The problems come when I try to compile this binding project. I get a lot of errors like this one :

/.../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)

When I open the generated ForwardingListenableFuture.cs file there's this code :

[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);
        }

    }

Indeed, the "id_delegate" is duplicated..

I also have warnings like this related to the 1st .aar (not the application one) :

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

1 Answer 1

1

OK I solved the first part of the errors by adding remove-node statements to the Metadata.xml.

For the 2nd part, adding a reference to Xamarin.Android.Support.v4 solved the problem.

1
  • @Rati_Ge As it seems here, the op managed to remove duplicates by creating individual binding projects. One for each aar.
    – isaias-b
    Commented Aug 5, 2015 at 12:57

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.