【发布时间】:2021-05-15 13:20:59
【问题描述】:
我为Android制作了一个音乐播放器(Blade-Player),可以播放来自本地图书馆、Spotify和Deezer的音乐;在 2018 年。我使用 Spotify 的旧 Android Playback SDK 来实现媒体播放。
随着代码变老,Android/Spotify/... 不断发展,我无法按照我想要的方式维护它,现在它到处都是黑客和肮脏东西的集合。
我正在尝试用更干净的库、使用新的 androidX 兼容库、RecyclerViews、Retrofit 和 GSon 来重写整个事情,当时我什至不知道它们存在。到目前为止,我正在获得更好的性能索引用户库和更好的 UI,所以这很棒。
问题是现在没有来自 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 的多媒体播放,无需应用远程控制,请告诉我。
【问题讨论】: