NeriPlayer 是一款基于 Jetpack Compose + Media3 的 Android 音乐播放器,支持网易云、Bilibili、YouTube Music 多源播放。仿 Apple Music 歌词、GitHub 同步、一起听、音效调节。Android 9+ 免费无广告。

🎤 引言

说实话,安卓音乐播放器这个赛道已经卷到没边了——手机厂商自带的应用商店里躺着几十个"支持网易云"的 App,大多数都是套个壳,歌词显示残缺、播放一卡一卡、换个网络就歇菜。

NeriPlayer 不太一样。

它把多源播放、GLSL 流体背景、GitHub 元数据同步、甚至"一起听"(多人实时同步播放)全部做进了同一个应用里,而且用的是 Jetpack Compose + Media3 这样的现代 Android 技术栈,不是那种 WebView 套壳能比的。

更难得的是:没有公共云端服务,数据全存在你自己手里——GitHub 私有仓库或 WebDAV,自己掌控,不被平台绑架。


⭐ 核心功能

1. 多源播放 — 网易云 / B站 / YouTube Music 一个不落

NeriPlayer 的核心逻辑是"账号即能力":你在各平台有账号,就能搜、能播、能下载。PlayerManager 统一管理音源解析、播放队列和失败重试。

特别值得一提的是网易云自动换源机制:歌曲无版权、只有试听片段时,会先尝试降低音质,再自动匹配 Bilibili 音源兜底。这个逻辑解决了很多网易云用户的痛——版权灰了不用手动去找 B 站版,App 自己就搞定了。

Bilibili 取流支持 DASH 音频重试和 html5/mp4 渐进流回退,YouTube Music 包含 PoToken / JS Challenge 支持。

2. 仿 Apple Music 歌词体验

SyncedLyricsView 支持逐词高亮、翻译歌词、音译显示、歌词偏移、点击跳转和长按分享。LyricShareSheet 可以生成 1080p 歌词卡片。

更实用的是悬浮歌词状态栏歌词:Android 13+ 可以显示系统悬浮歌词,魅族设备还能用状态栏歌词,SuperLyric 和蓝牙歌词也支持。

3. GLSL 流体背景 — 不是简单高斯模糊

播放页动态背景由 BgEffectPainter 加载 hyper_background_effect.glsl shader,通过 RuntimeShader 逐帧渲染。shader 基于封面取色生成动态色块,接入音频电平数据做音频响应——不是简单地把封面图高斯模糊,是真正的视觉反馈。

4. 去中心化同步 — 数据在自己 GitHub 仓库里

这是 NeriPlayer 最有区分度的功能。播放统计、歌单、收藏、最近播放都可以同步到你自己创建的 GitHub 私有仓库(或 WebDAV),不是上传到任何中心化服务器。

PlaybackStatsRepository 按歌曲稳定身份记录播放次数、收听时长、每日统计桶,参与 GitHub/WebDAV 同步合并。

5. 一起听 — Cloudflare Workers 私有部署

内置"一起听"功能,客户端和 Cloudflare Worker 通过 WebSocket 实时同步。房主可以分享直链给朋友,听众权限可配置,支持循环/随机模式同步、房主离线检测。你也可以部署自己的服务端,不依赖任何公共服务器。

6. 本地歌曲管理

  • 支持外部分享导入、设备媒体库扫描、授权文件夹扫描
  • 自动识别附近 lrc/txt 歌词和 cover/folder/front 封面
  • 大批量扫描先快速预览,再后台补全完整元信息
  • 本地歌手自动聚合、拆分合作歌手写法

7. 下载与缓存

不走系统 DownloadManager,而是用共享 OkHttpClient + 工作文件和 sidecar 元数据管理完整落盘流程。支持直链、YouTube Range 分块和 HLS 续传。默认缓存上限 1GB,可按类型分组清理(只清缓存,不删用户主动下载的内容)。

8. 音效调节

内置倍速、音调、系统均衡器预设/手动频段、响度增强、淡入淡出、交叉淡入淡出。USB 独占播放支持 UAC1.0 DAC 设备(采样率/位深/缓冲策略可调)。

9. 脱机模式

NetworkStatusMonitor 自动感知网络状态。脱机时只走本地缓存,本地文件、已下载音频、播放缓存、歌单仍可继续使用。

10. 安全模式与诊断

JVM / Native 崩溃或 ANR 后,下次启动会优先进入 Safe Mode,只开放日志预览导出、配置导出和设置重置。连续点击版本号 7 次可开启开发者模式,出现独立 Debug 页面。


📥 安装与使用

下载地址(Release):

版本选择:

  • arm64-v8a — 大部分手机选这个
  • armeabi-v7a — 老旧 32 位设备
  • x86 / x86_64 — 模拟器、Intel 设备、Chromebook

从源码构建:

git clone --recursive https://github.com/cwuom/NeriPlayer.git
cd NeriPlayer
# Android Studio 打开并同步
./gradlew :app:assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apk

最低要求: Android 9 (API 28)+

首次使用: 启动后先阅读免责声明并完成引导,Android 13+ 会申请通知权限。


🎯 适用场景

  • 网易云灰歌党:版权灰了自动换 Bilibili 音源,不用手动找
  • 多平台音乐用户:同时用网易云、B站、YouTube Music,不想装三个 App
  • 在意隐私的用户:播放历史和统计同步到自己 GitHub,不上传到任何第三方
  • 极客玩家:一起听私有部署、GLSL shader 背景、USB DAC 直连
  • 本地音乐收藏者:本地歌曲管理、歌手聚合、歌词自动匹配

🔍 对比 / 替代方案

工具类型NeriPlayer 优势
网易云音乐 App官方 App无版权灰色歌曲限制,无广告
Splayer本地播放器NeriPlayer 有多平台在线播放
OrbitAndroid 音乐 App无 GitHub 同步和一起听功能
YouTube Music App官方 AppNeriPlayer 无地区限制,支持网易云
本地播放器 (Shuttle/VLC)本地播放NeriPlayer 有多源播放能力

一句话:如果你用网易云 + B 站 + YouTube Music 且受够了版权灰色歌曲,NeriPlayer 的自动换源 + 本地管理 + GitHub 同步是其他 App 给不了你的组合。


⚠️ 注意事项

  1. 不提供公共云端曲库:NeriPlayer 需要你自己有各平台账号(网易云/B站/YT Music),没有账号的话在线播放功能不可用。本地歌曲管理和音效功能不依赖账号。
  2. Release 渠道非严格稳定版:官方说明"Release 渠道不是严格意义上的稳定通道",要尝鲜最新功能建议走 CI Builds(t.me/neriplayer_ci)。
  3. 部分功能需要 Android 12/13+:GLSL RuntimeShader 动态背景仅 Android 13+,封面模糊仅 Android 12+,低版本会自动降级。
  4. GitHub 同步需要 Access Token:同步到 GitHub 需要生成 Personal Access Token,应用内新建仓库时默认创建为私有仓库。Token 需要 repo 权限。
  5. USB 独占仅支持 UAC1.0:如果你用的高端 USB DAC 是 UAC2.0,暂时不支持。
  6. 一起听需要 Cloudflare 部署:想用自己的服务端,需要部署 Cloudflare Workers(官方有部署模板)。

✅ 总结

NeriPlayer 解决的核心矛盾:不想被任何一个音乐平台绑架版权,又想要统一的歌词体验、播放统计和跨平台管理。

它的优势:

  • 多源播放 + 网易云自动换 Bilibili 兜底,版权灰色问题基本自动化解决
  • 仿 Apple Music 歌词体验(逐词高亮 + 翻译 + 音译 + 悬浮歌词)
  • GitHub/WebDAV 去中心化同步,数据永远在自己手里
  • GLSL 音频响应流体背景,不是简单封面高斯模糊
  • Jetpack Compose + Media3 现代技术栈,不是 WebView 套壳
  • 完整本地管理链路 + USB DAC 支持
  • Cloudflare Workers 一起听,可私有部署

不足:

  • 需要各平台账号,无公共曲库兜底
  • 歌词依赖 LRCLIB 外部来源,部分冷门歌曲可能找不到
  • 部分高级功能(USB 独占、一起听)有门槛,需要一定技术基础

推荐给:网易云/B站/YouTube Music 重度用户、被版权灰色歌曲困扰的音乐爱好者、注重隐私和数据自持的极客用户,以及想要一个"全功能统一管理"的 Android 音乐播放器的人。

项目地址:https://github.com/cwuom/NeriPlayer