Как собрать музыку из разных сервисов в одном Android приложении

29 May, 2026

Знакомая история: любимый плейлист лежит в Spotify, редкие лайв-записи — на YouTube, а какие-то старые треки пылятся в памяти телефона. Переключаться между тремя приложениями, чтобы просто послушать музыку в дороге, быстро надоедает. Китайские разработчики часто создают специфические, но технически любопытные инструменты для решения таких бытовых проблем. На днях я наткнулся на NeriPlayer — плеер на Jetpack Compose, который пытается объединить локальную медиатеку и стриминг с нескольких площадок в одном интерфейсе.

Что это за плеер

NeriPlayer — это нативный Android-клиент, написанный на Kotlin. Его главная фишка в том, что он не предлагает свой облачный сервис, а выступает агрегатором. Проект использует современные библиотеки вроде Media3 и ExoPlayer для воспроизведения, а интерфейс полностью построен на Compose.

Автор вдохновлялся персонажем из визуальной новеллы «The Railway to Starlight and Shiro», что объясняет аниме-стилистику и название. Но если отбросить визуальную часть, внутри скрывается серьезная работа с API разных платформ.

Чем он интересен на практике

Самое полезное здесь — работа с источниками. Плеер умеет «подтягивать» контент из NetEase Cloud Music, Bilibili и YouTube Music. Причем это не просто поиск по названиям, а полноценная интеграция.

Аккаунты как источник данных

В приложении нет общей базы музыки. Вы авторизуетесь в своих аккаунтах на сторонних сервисах, и плеер получает доступ к вашим плейлистам и истории. Это удобно, если вы не хотите переносить медиатеку вручную. Все данные авторизации и куки шифруются через Android Keystore, так что за безопасность токенов можно не переживать.

Реклама

Умное кэширование и загрузка

Разработчик реализовал кастомный слой управления воспроизведением на базе Media3. Плеер использует SimpleCache с алгоритмом LRU. По умолчанию лимит кэша составляет 1 ГБ, но его можно почистить в настройках. Если песня понравилась, ее можно скачать прямо в приложении. Треки сохраняются в закрытый каталог вместе с обложками и текстами песен.

Синхронизация через GitHub

Это, пожалуй, самая необычная фича. Вместо того чтобы поднимать свой бэкенд для синхронизации настроек и плейлистов между устройствами, автор предлагает использовать приватный репозиторий на GitHub. Плеер через WorkManager периодически пушит JSON-файлы с метаданными в ваш репозиторий. Это бесплатно, надежно и полностью под вашим контролем.

Работа с локальными файлами

NeriPlayer не забывает про классику. Он умеет сканировать память устройства и подхватывать аудиофайлы, которыми вы делитесь через системное меню Android. При импорте плеер ищет рядом файлы .lrc и картинки, чтобы автоматически подтянуть тексты и обложки.

NeriPlayer logo

Техническая начинка

С точки зрения кода проект выглядит как хороший пример современной Android-разработки. Здесь используется архитектура с одной Activity и навигацией через Compose NavHost.

Интересно реализована работа с Bilibili: так как сервис часто проверяет заголовки запросов, автор добавил ConditionalHttpDataSourceFactory, которая на лету подставляет нужные Referer и User-Agent в зависимости от источника аудио.

Для любителей визуальных эффектов в плеере есть динамические фоны. На Android 13+ они работают через RuntimeShader, создавая реактивную подложку, которая меняется в такт музыке.

Как это пощупать

Проект сейчас в активной разработке (Work in progress), поэтому баги встречаются. Чтобы увидеть скрытые возможности, в настройках нужно семь раз нажать на номер версии — откроется вкладка Debug. Там можно посмотреть логи и проверить работу API-зондов для каждого сервиса.

Для запуска понадобится устройство на Android 9 или выше. Проще всего скачать готовую сборку из разделов Releases или воспользоваться CI-билдами в их Telegram-канале. Если решите собирать сами, понадобится актуальная Android Studio и Java 17.

NeriPlayer подойдет тем, кто устал от тяжелых официальных приложений стриминговых сервисов и хочет иметь легкий плеер «все в одном». Это отличный пример того, как можно использовать GitHub не только для кода, но и как бесплатное облако для пользовательских данных.

Конечно, проект сильно завязан на китайские сервисы, но поддержка YouTube Music делает его актуальным и для нас. Если вы ищете проект на Media3 и Compose для изучения — это достойный кандидат для разбора.