繁体   English   中英

Xamarin Java绑定库编译器错误

[英]Xamarin java binding library compiler error

我有一个使用Android库的android应用程序(Java)。 一切正常,但是我需要将此应用程序包装到Xamarin应用程序中。 因此,我决定将该应用程序转换为第二个Android库。 我创建了Xamarin Android应用程序,以及一个Android Java绑定库项目,在其中将两个.aar文件添加到“ Jars”文件夹中。

当我尝试编译此绑定项目时,问题就来了。 我收到很多这样的错误:

/.../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”是重复的。

我也有与1st .aar(不是应用程序1)有关的警告:

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

好的,我通过将删除节点语句添加到Metadata.xml中解决了错误的第一部分。

对于第二部分,添加对Xamarin.Android.Support.v4的引用可以解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM