4

我正在尝试为 Spotify Android SDK 创建一个 Xamarin Java 绑定。SDK 现在分为两部分,一是身份验证,一是播放器。以前的 java 绑定有效,但是,秒给了我一个错误。

最初的问题是在Xamarin 论坛上提出的。


你好,

我正在尝试为Spotify Android SDK创建一个绑定项目。

SDK 分为两个 .aar 文件。一种用于身份验证,一种用于媒体播放(播放器)。首先,我尝试将两个 .aar 文件都放在一个 Binding Project 中,但 Player.aar 被忽略了。但是,将其移至自己的位置似乎可行。

现在,我的问题与生成的 Java 接口有关NativePlayerNotificationCallbackIPlayerNotificationCallback因此缺少 og 通知),但在 Player 类中它试图实现:global::Com.Spotify.Android.Player.INativePlayerNotificationCallback.

INativePlayerNotificationCallback我在反编译的文件中找不到其他提及。只有IPlayerNotificationCallback.

我知道这有点难以想象。以下是在 JD-GUI 中看到的 java 类文件:

京东图形界面

生成的文件在此处列出: 在此处输入图像描述

在Com.Spotify.Sdk.Android.Player.IPlayerNotificationCallback.cs文件中:

在此处输入图像描述

以及错误信息本身

错误 CS0234:namespaceCom.Spotify.Sdk.Android.Player' 中不存在类型或命名空间名称 INativePlayerNotificationCallback'。您是否缺少程序集参考?

在此处输入图像描述

我真的很感激任何关于如何让它发挥作用的见解。在我看来,接口的命名有些不一致,但我不确定。

谢谢你的帮助,弗雷德里克

4

1 回答 1

9

应该通过将元数据添加到 Player 绑定项目来修复:

<metadata>
  <attr path="/api/package[@name='com.spotify.sdk.android.player']/interface[@name='NativePlayerNotificationCallback']" name="visibility">public</attr>
</metadata>

和 Player 类扩展(进入 Additions 目录):

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 库绑定项目(我在您的旧主题中找到它)并从 Player 项目中引用 Auth 项目,因为它使用了一些类(也许这没有必要)。

于 2015-04-10T01:02:07.050 回答