Измените имя повторяющихся событий в #регионе «Реализация событий для » для библиотеки привязки Xamarin Android

#java #android #xamarin #xamarin.android

Вопрос:

Я пытаюсь создать библиотеку привязки Xamarin для библиотеки Android UseButton. Я создал свой проект привязки, включил файл .aar и установил действие сборки = LibraryProjectZip. Как и ожидалось, появилась куча ошибок, и мне удалось избавиться от большинства из них с помощью Metadata.xml файл, за исключением группы, которые следуют одному и тому же шаблону:

Ошибка CS0102 Тип «CrossBridgeCommunicator» уже содержит определение для «WebViewDismiss»

Я проверил класс CrossBridgeCommunicator и обнаружил, что в нем есть 2 копии примерно 12 событий. Вот фрагмент одного из этих дубликатов

 #region "Event implementation for Com.Usebutton.Sdk.Internal.Bridge.BridgeMessageParser.IListener"
...
public event EventHandler WebViewDismiss {
    add {
        global::Java.Interop.EventHelper.AddEventHandler<global::Com.Usebutton.Sdk.Internal.Bridge.BridgeMessageParser.IListener, global::Com.Usebutton.Sdk.Internal.Bridge.BridgeMessageParser.IListenerImplementor>(
        ref weak_implementor___SetMainBridge,
        __CreateIListenerImplementor,
        __v => MainBridge = __v,
        __h => __h.OnWebViewDismissHandler  = value);
    }
...
}
...
public event EventHandler WebViewDismiss {
    add {
        global::Java.Interop.EventHelper.AddEventHandler<global::Com.Usebutton.Sdk.Internal.Bridge.BridgeMessageParser.IListener, global::Com.Usebutton.Sdk.Internal.Bridge.BridgeMessageParser.IListenerImplementor>(
        ref weak_implementor___SetWidgetBridge,
        __CreateIListenerImplementor,
        __v => WidgetBridge = __v,
        __h => __h.OnWebViewDismissHandler  = value);
    }
...
}
 

Единственное различие между ними заключается в том, что они получают доступ к различным атрибутам в своих телах («слабый_исполнитель__»). Я проверил исходный класс в декомпиляторе Java, и он не реализует ни одно из этих событий; на самом деле, он даже не реализует интерфейс. Что у него есть, так это 2 поля этого типа интерфейса. Я предполагаю, что Xamarin создает эти методы по какой-то причине, но я не знаю, почему и как. Они даже не появляются на api.xml (как и поля).

Я попытался изменить название событий, используя Metadata.xml файл, но, поскольку эти события даже не существуют в классе Java, я не знаю, как их найти. Я даже попытался удалить поля с помощью «удалить узел», но получаю предупреждение, что узлы не совпадают. Кто-нибудь знает, как я могу изменить названия этих событий? Опять же, они исходят из одного и того же интерфейса, но создаются непосредственно в классе, который имеет 2 поля типа интерфейса.

Заранее спасибо.

Комментарии:

1. Это связано с тем, что существует некоторый конфликт между типами событий, исходящими из нескольких типов интерфейса, которые совместно используют методы с одинаковыми именами. Чтобы избежать этого, вы можете попробовать использовать некоторое преобразование метаданных. Для получения дополнительной информации проверьте: docs.microsoft.com/en-us/xamarin/android/platform/… .

2. Спасибо за указатель, но, как я уже сказал в своем вопросе, если я использую Metadata.xml В конечном итоге я влияю на оба дубликата, так как их подписи абсолютно одинаковы. Пример, который вы связали, здесь неприменим, потому что повторяющиеся свойства имеют другую подпись (например, разные имена классов); в моем случае повторяющиеся события происходят из одного и того же интерфейса и появляются из ниоткуда.

3. Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией для определения адекватного ответа.