蜻蜓伴读
开源安卓

MTBOX

基于 FongMi/TV 二次开发的安卓视频与本地音乐播放工具箱,整包源码已按 GPL-3.0 开源。音乐引擎、歌词面板、音效直通与安全加固全在里面,本地解码、离线可用。

letian1650 m,https://gh-proxy.com/raw.githubusercontent.com/letian1650/mybox/main/m.json
cttv ctys,http://www.cttv.vip/ys/json/ctys.json
zheng197600 0820,https://gh-proxy.com/raw.githubusercontent.com/zheng197600/tvbox/main/0820.json
哈基米,https://17264.kstore.space/哈基米.png
47.96,http://47.96.82.41:5188/
liucn m,https://raw.liucn.cc/box/m.json
wdjyys,http://550.3vcn.work/wdjyys.json
dimaston 4K,https://jihulab.com/dimaston1/4k/-/raw/main/tongyong.json
bin1site1 OS,https://gh-proxy.com/raw.githubusercontent.com/bin1site1/bin1site1.github.io/main/OS.json
252035 jsm,https://www.252035.xyz/p/jsm.json

怎么做的

MTBOX 基于开源的 FongMi/TV(GPL-3.0)二次开发,当前版本 6.6.19。整包源码连同音乐引擎与构建脚本已全部上 GitHub,11,200 个文件、约 183 MB。

本地音乐引擎是 13 个 Java 文件,走 d8 出 classes4.dex 直接注入,不回编 smali;配 MediaSession 与 MediaStyle 通知,锁屏、控制中心、耳机车机上下曲都能用。

音效链路只保留 Equalizer + BassBoost,禁用 LoudnessEnhancer,1.0 倍速不调 setPlaybackParams —— 满刻度无损源不会被动态响度处理削波,走原生直通。

歌词走网易云公开接口,LRC 逐字同步、封面降级加载;封面和歌词都失败时静默回落,不弹错误打扰播放。

安全加固:NanoHTTPD 从 0.0.0.0 改绑 127.0.0.1,移除 CAMERA 等 6 个危险权限,扫码页直接 finish 不再开摄像头。

签名用自己保管的 keystore 出包,apksigner verify 校验 v2/v3,不走第三方重签名。与 TTBOX 互为补充:一个守鸿蒙生态,一个守安卓。

功能

它能做什么

不用开 GitHub,这一页就讲得清楚。

01

覆盖非鸿蒙设备

安卓端独立打包,和 TTBOX 互补——家里那台安卓投影或旧平板也能用。

02

自持签名

用自己保管的 keystore 出签名包,安装前可校验,不走第三方重签名。

03

本地导入即用

不绑定云端账号,本地资源导入就播,断网也能用。

04

已开源 GPL-3.0

整包源码连同音乐引擎与构建脚本一并上 GitHub,基底 FongMi/TV 本身也是 GPL-3.0。

05

音效链路直通

只保留 Equalizer + BassBoost,不启用 LoudnessEnhancer;1.0 倍速不碰 setPlaybackParams,无损源走原生直通。

界面

MTBOX 演示界面

MTBOX 界面截图 1
本地音乐 · 歌曲列表
MTBOX 界面截图 2
歌词面板 · 逐字同步
MTBOX 界面截图 3
主题与播放
架构

整包怎么拼起来的

两半:反编译基线,加上注入进去的音乐引擎,中间靠 apktool 跑两遍把资源 id 钉住。

01

work_fong 基线

FongMi/TV 5.6.1 反编译,重命名,版本抬到 6.6.19(versionCode 60619)。

02

smali 补丁

主题统一、版本显示、全屏旋转、安全加固都落在 smali 上,每一条都留了方案记录。

03

javainject 音乐引擎

13 个 Java 文件走 javac + d8 出 classes4.dex,丢进 work_fong/unknown 随 apktool 原样打进包,不回编 smali。

04

R.java 重生成

genr.ps1 用 public.xml 加 aapt2 dump 拼资源 id 表。资源一动 id 就整表漂移,所以必须两遍出包。

05

unknown 装载

apktool 会把 work_fong/unknown 下的文件原样复制进 APK,ART 把 classes 1 到 4.dex 一起加载。

06

签名

apksigner 签 v2/v3 并 verify,keystore 自己保管,不进仓库。

构建

本地怎么出包

四步,顺序不能反。

  1. 01

    生成 R.java

    powershell -File javainject/genr.ps1 -Apk <刚构建的.apk>,资源 id 会漂移,每次都得重跑。

  2. 02

    配签名口令

    设 MTBOX_KS_PASS 与 MTBOX_KEY_PASS 两个环境变量,keystore 需要自己生成。

  3. 03

    出包

    powershell -File javainject/build.ps1 -Tag music,apktool 跑两遍,不要跳 pass 1。

  4. 04

    校验

    apksigner verify 通过、R.java 里 tabSongs 与 musicList 这些 id 对得上,才算成功。

上游

致谢

  • FongMi/TV —— 基底,本项目基于它二次开发,GPL-3.0
  • mpv —— 播放内核,GPL-2.0-or-later
  • FFmpeg —— 编解码,LGPL / GPL
答疑

常见问题

为什么 apktool 要跑两遍?
资源一动,aapt2 就会整表重排 @+id,而 R.id 是编译期常量。pass 1 拿到资源表重生成 R.java,pass 2 用同一份 res 出包,两遍的 id 才一致。跳过 pass 1 的结果是 findViewById 返回别人家的 view 或者 null,当场崩。
音乐引擎为什么不走 smali?
13 个 Java 文件直接 javac 加 d8 出一个 classes4.dex,丢进 work_fong/unknown 就行 —— apktool 会把该目录原样复制进 APK。省掉一整轮 smali 编译,也不用碰寄存器。
音效开了会不会失真?
音效链只有 Equalizer 加 BassBoost,LoudnessEnhancer 是禁用的 —— 它是动态响度处理器,满刻度无损源会被削波。原声预设就是 EQ 全 0 加 BassBoost 0,此时完全透明。
锁屏和车机能控制吗?
硬件媒体按键可用,耳机和车机的上下曲、播放暂停会转发进容器。锁屏音乐卡与控制中心媒体卡不通 —— 那依赖系统主动查询 MediaSession,容器隔离挡住了,App 层无解。
为什么没有内置源?
刻意不内置。所有外部订阅源由使用者自行配置,本项目不提供任何内容源与在线解析地址。
说明

免责声明

  1. 本项目基于开源的 FongMi/TV(GPL-3.0)二次开发,整包源码与第三方授权声明见 GitHub 仓库。
  2. 本项目不包含任何内容源,也不提供任何在线解析地址;所有外部订阅源与频道由使用者自行配置,与本项目无关。
  3. 本项目不提供任何商业服务,不收取任何费用、不构成任何交易关系,仅供个人学习与技术研究使用。
  4. 使用前请遵守当地法律法规;因使用本软件产生的任何后果由使用者自行承担,与作者无关。
  5. 上游第三方组件(迅雷 SDK、ForceTV、mpv、FFmpeg 等)仍适用各自许可证,重新分发前请自行核实授权条款。
  6. 本站只放技术与实现细节,不涉及任何交易;爱发电是作品支持渠道,与 APK 分发无关。