4

Spotify Android SDK への Xamarin Java Binding を作成しようとしています。SDK は現在、認証用とプレーヤー用の 2 つの部分に分かれています。以前の Java バインディングは機能しますが、秒単位でエラーが発生します。

元の質問はXamarin Forumsで行われました。


やあ、

Spotify Android SDKのバインド プロジェクトを作成しようとしています。

SDK は 2 つの .aar ファイルに分かれています。1 つは認証用、もう 1 つはメディア再生 (プレーヤー) 用です。まず、1 つのバインディング プロジェクトに両方の .aar ファイルを含めようとしましたが、Player.aar は無視されました。ただし、それを独自に移動するとうまくいくようです。

NativePlayerNotificationCallbackさて、私の問題は生成されるJavaインターフェイスに関連していますIPlayerNotificationCallback(したがって、通知がありません)が、Playerクラスで実装しようとしました:global::Com.Spotify.Android.Player.INativePlayerNotificationCallback.

INativePlayerNotificationCallback逆コンパイルされたファイルには、他に言及されているものはありません。のみIPlayerNotificationCallback

これはちょっと想像しにくいと思います。JD-GUI に表示される Java クラス ファイルは次のとおりです。

JD-GUI

生成されたファイルは次のとおりです。 ここに画像の説明を入力

ファイルCom.Spotify.Sdk.Android.Player.IPlayerNotificationCallback.cs内:

ここに画像の説明を入力

そして、エラーメッセージ自体

エラー CS0234: タイプまたは名前空間の名前 INativePlayerNotificationCallback' が namespaceCom.Spotify.Sdk.Android.Player' に存在しません。アセンブリ参照がありませんか?

ここに画像の説明を入力

どうすればこれを機能させることができるかについての洞察をいただければ幸いです。インターフェイスの命名にいくつかの矛盾があるように見えますが、よくわかりません。

手伝ってくれてありがとう、フレドリック

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 に答える