Привязка 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:

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, так как он использует некоторые классы (возможно, в этом нет необходимости).

Другие вопросы по тегам