如何在 2021 年使用 Spotify 的媒体播放构建 Android 应用程序,而无需远程应用程序?

时间:2021-05-15 13:20:59

标签: java android spotify

我为 Android 制作了一个音乐播放器 (Blade-Player),可以播放来自本地图书馆、Spotify 和 Deezer 的音乐; 2018年,我使用Spotify的旧Android Playback SDK实现媒体播放。

随着代码变老,And​​roid/Spotify/...不断发展,我无法按照我想要的方式维护它,现在它到处都是黑客和脏东西的集合。

我正在尝试使用更简洁的库重写整个内容,使用新的 androidX 兼容库、RecyclerViews、Retrofit 和 GSon,当时我什至不知道它们的存在。到目前为止,我获得了更好的性能索引用户库和更好的用户界面,所以这很棒。

问题是现在没有来自 Spotify 的 Android Playback 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 的多媒体播放包含在我的应用中,而无需应用遥控器,请告诉我。

0 个答案:

没有答案