如何在 2021 年使用 Spotify 的媒体播放构建一个 Android 应用程序,而无需应用程序远程?
How to build an Android App with Media Playback from Spotify in 2021, without app remote?
我为 Android 制作了一个音乐播放器 (Blade-Player),可以播放本地图书馆、Spotify 和 Deezer 中的音乐;在 2018 年。我使用旧的 Android Spotify 的播放 SDK 来实现媒体播放。
随着代码变老,并且 Android/Spotify/... 进化,我无法按照我想要的方式维护它,现在它到处都是黑客和肮脏东西的集合。
我正在尝试使用新的 androidX compat 库、RecyclerViews、Retrofit 和 GSon,用更干净的库重写整个东西,当时我什至不知道它们的存在。到目前为止,我获得了更好的性能索引用户库和更好的 UI,所以这很棒。
问题是现在没有 Android 来自 Spotify 的播放 SDK,因为它已被弃用并且不再可用。
它在 Blade-Player 的旧版本中仍然有效,所以我仍然可以使用它,但我相信它是多次播放崩溃和错误的根源,因为它是很久以前写的(也许是线程问题, 之类的,但是 Android 认为当 SpotifyPlayer 从网络接收数据时 Blade 崩溃,播放器在长时间使用时不工作,...)
我尝试使用新的 App Remote SDK,但很明显,它不适用于音乐播放器:它所做的只是在 Spotify 应用程序上开始播放,这不是我想要的。如果我没有其他解决方案,我可能会满足于此,但是为多个来源提供统一音乐播放器的意义就消失了...
我在 Spotify 开发网站上发现了 Web Playback SDK,但它似乎不适用于 Android,而且我不相信我可以破解它以获得一个可从我的应用程序播放。
我试图对旧的 SDK 进行“逆向工程”,但所有 Java 代码所做的只是通过 JNI、libspotify_sdk.so
和其他共享库中的函数调用本机函数。即使我重写了 Java 部分,我仍然必须依赖它,这显然似乎是当前错误的来源。我可以尝试对已编译的“.so”共享库进行逆向工程,但我不确定会得到任何结果。
(编辑:我试着用 Ghidra 来研究它,但我不明白发生了什么...... playUri 函数似乎只在某些播放器全局变量中执行检查和设置 uri,但后来我不知道不明白哪个函数真正播放,从 uri 获取音频流...)
我不知道现在该做什么。由于存在旧的 SDK,我确信有一种方法可以从 Spotify 曲目中获取加密流或其他内容,但我不知道如何...
如果你在你的应用程序中使用 Spotify,你是怎么做的?您找到旧 SDK 的解决方法了吗,它工作正常吗?也许只是在不同的线程或其他东西中调用所有旧的 sdk 函数?
如果您知道我如何在 2021 年在我的应用程序中包含来自 Spotify 的多媒体播放,而无需应用程序远程,请告诉我。
郑重声明,我使用 librespot-java
解决了这个问题
我为 Android 制作了一个音乐播放器 (Blade-Player),可以播放本地图书馆、Spotify 和 Deezer 中的音乐;在 2018 年。我使用旧的 Android Spotify 的播放 SDK 来实现媒体播放。
随着代码变老,并且 Android/Spotify/... 进化,我无法按照我想要的方式维护它,现在它到处都是黑客和肮脏东西的集合。
我正在尝试使用新的 androidX compat 库、RecyclerViews、Retrofit 和 GSon,用更干净的库重写整个东西,当时我什至不知道它们的存在。到目前为止,我获得了更好的性能索引用户库和更好的 UI,所以这很棒。
问题是现在没有 Android 来自 Spotify 的播放 SDK,因为它已被弃用并且不再可用。 它在 Blade-Player 的旧版本中仍然有效,所以我仍然可以使用它,但我相信它是多次播放崩溃和错误的根源,因为它是很久以前写的(也许是线程问题, 之类的,但是 Android 认为当 SpotifyPlayer 从网络接收数据时 Blade 崩溃,播放器在长时间使用时不工作,...)
我尝试使用新的 App Remote SDK,但很明显,它不适用于音乐播放器:它所做的只是在 Spotify 应用程序上开始播放,这不是我想要的。如果我没有其他解决方案,我可能会满足于此,但是为多个来源提供统一音乐播放器的意义就消失了...
我在 Spotify 开发网站上发现了 Web Playback SDK,但它似乎不适用于 Android,而且我不相信我可以破解它以获得一个可从我的应用程序播放。
我试图对旧的 SDK 进行“逆向工程”,但所有 Java 代码所做的只是通过 JNI、libspotify_sdk.so
和其他共享库中的函数调用本机函数。即使我重写了 Java 部分,我仍然必须依赖它,这显然似乎是当前错误的来源。我可以尝试对已编译的“.so”共享库进行逆向工程,但我不确定会得到任何结果。
(编辑:我试着用 Ghidra 来研究它,但我不明白发生了什么...... playUri 函数似乎只在某些播放器全局变量中执行检查和设置 uri,但后来我不知道不明白哪个函数真正播放,从 uri 获取音频流...)
我不知道现在该做什么。由于存在旧的 SDK,我确信有一种方法可以从 Spotify 曲目中获取加密流或其他内容,但我不知道如何...
如果你在你的应用程序中使用 Spotify,你是怎么做的?您找到旧 SDK 的解决方法了吗,它工作正常吗?也许只是在不同的线程或其他东西中调用所有旧的 sdk 函数?
如果您知道我如何在 2021 年在我的应用程序中包含来自 Spotify 的多媒体播放,而无需应用程序远程,请告诉我。
郑重声明,我使用 librespot-java
解决了这个问题