我正在尝试为Spotify Android SDK创建Xamarin Java绑定。 SDK现在分为两部分,一部分用于身份验证,另一部分用于播放器。以前的java绑定工作,然而,秒给我一个错误。
Xamarin Forums上提出了原始问题。
您好,
我正在尝试为Spotify Android SDK创建一个绑定项目。
SDK分为两个.aar文件。一个用于身份验证,一个用于媒体播放(播放器)。 首先,我尝试在一个绑定项目中同时使用.aar文件,但是忽略了Player.aar。但是,将它移到自己的位置似乎有效。
现在,我的问题与生成NativePlayerNotificationCallback
的Java接口IPlayerNotificationCallback
有关(因此缺少og Notification),但在它试图实现的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'。你错过了装配参考吗?
我真的很感激有关如何让它发挥作用的任何见解。在我看来,界面的命名有一些不一致,但我不确定。
感谢您的帮助, 弗雷德里克
答案 0 :(得分: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项目,因为它使用了一些类(可能没有必要)。