#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. Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией для определения адекватного ответа.