Привязка Java: тип `...'не существует в пространстве имен`...'. Вы пропустили сборку?
Я пытаюсь создать Java-привязку Xamarin к Spotify Android SDK. SDK теперь разделен на две части, одну для аутентификации и одну для плеера. Прежнее java-связывание работает, однако секунды дают мне ошибку.
Оригинальный вопрос был задан на форумах Xamarin.
Привет,
Я пытаюсь создать обязательный проект для Spotify Android SDK.
SDK разделен на два файла.aar. Один для аутентификации и один для воспроизведения мультимедиа (проигрыватель). Сначала я попытался использовать оба файла.aar в одном проекте Binding, но Player.aar был проигнорирован. Тем не менее, перемещение его на свой собственный, кажется, работает.
Теперь моя проблема связана с интерфейсом Java NativePlayerNotificationCallback
который генерируется для IPlayerNotificationCallback
(отсюда и отсутствие Nog Notification), но в классе Player он пытался реализовать: global::Com.Spotify.Android.Player.INativePlayerNotificationCallback
,
Я не могу найти никакого другого упоминания о INativePlayerNotificationCallback
в декомпилированных файлах. Только IPlayerNotificationCallback
,
Я понимаю, что это немного сложно представить. Вот файлы классов Java, которые можно увидеть в JD-GUI:
Сгенерированные файлы перечислены здесь:
Внутри файла Com.Spotify.Sdk.Android.Player.IPlayerNotificationCallback.cs:
И само сообщение об ошибке
Ошибка CS0234: имя типа или пространства имен INativePlayerNotificationCallback'не существует в namespaceCom.Spotify.Sdk.Android.Player'. Вам не хватает ссылки на сборку?
Я был бы очень признателен за понимание того, как я могу заставить это работать. Мне кажется, что в именовании интерфейса есть некоторые несоответствия, но я не уверен.
Спасибо за помощь, Фредрик
1 ответ
Необходимо исправить, добавив метаданные в проект привязки Player:
<metadata>
<attr path="/api/package[@name='com.spotify.sdk.android.player']/interface[@name='NativePlayerNotificationCallback']" name="visibility">public</attr>
</metadata>
и расширение класса Player (в каталог дополнений):
using System.Collections;
using Java.Lang;
using Java.Util.Concurrent;
namespace Com.Spotify.Sdk.Android.Player
{
public partial class Player
{
public IList InvokeAll(ICollection tasks)
{
return null;
}
public IList InvokeAll(ICollection tasks, long timeout, TimeUnit unit)
{
return null;
}
public Object InvokeAny(ICollection tasks)
{
return null;
}
public Object InvokeAny(ICollection tasks, long timeout, TimeUnit unit)
{
return null;
}
}
}
Вероятно, вам нужно будет правильно реализовать эти методы, вызывая универсальные методы. Также мне пришлось добавить метаданные в проект привязки библиотеки Auth (я нашел это в ваших старых темах) и сослаться на проект Auth из проекта Player, так как он использует некоторые классы (возможно, в этом нет необходимости).