如何从零构建NuvioTV源码:full与Play Store双构建的完整开发者指南
【免费下载链接】NuvioTVOfficial Nuvio Android TV Repository项目地址: https://gitcode.com/gh_mirrors/nu/NuvioTV
NuvioTV 是一款免费开源的 Android TV 媒体库应用,支持"自带源"(BYOS),把影视源自动变成带海报、评分、字幕和播放进度的媒体库。这篇指南带你从零完成 NuvioTV 源码构建:了解双构建变体差异、配置环境,并用一条 Gradle 命令产出你的第一个 APK。
一、NuvioTV 技术栈速览:构建前先认识它
在动手之前,先了解 NuvioTV 源码由什么构成,这会直接决定你的构建环境要求:
| 技术 | 说明 |
|---|---|
| Kotlin 2.3.0 | 主力开发语言 |
| Jetpack Compose + TV Material 3 | 声明式 UI,专为电视遥控器交互设计 |
| Media3 (ExoPlayer) | 播放引擎,项目内置了 本地 AAR 引擎库(AV1、MPEG-H、IAMF、FFmpeg 解码器) |
| Gradle 8.13 / AGP 8.13.2 | 构建工具链,详见 gradle/wrapper/gradle-wrapper.properties |
| minSdk 24 / targetSdk 36 | 覆盖 Android 7.0 至最新系统 |
所有依赖版本统一维护在 gradle/libs.versions.toml 中,工程结构由 settings.gradle.kts 定义,共三个模块:
:app—— 主应用:baselineprofile—— Baseline Profile 性能基线生成器:ffmpeg-decoder-downmix—— 可选的本地 FFmpeg 解码器模块
二、构建环境准备:3 件事先做好 ✅
- 安装 Android Studio(含 Android SDK Platform 36、NDK 29.0.14206865、CMake 3.22.1)
- JDK 11+—— 项目 Java/Kotlin 编译目标均为 11
- Git—— 用于拉取源码
💡 无需手动配置 NDK:只要开启 DOVI 原生构建(默认开启),CMake 会自动编译 Dolby Vision 桥接库,配置见 app/src/main/cpp/CMakeLists.txt。
三、获取 NuvioTV 源码:clone 仓库只需两行
打开终端,执行:
git clone https://gitcode.com/gh_mirrors/nu/NuvioTV cd NuvioTV进入项目后,建议先复制一份本地配置模板:
cp local.example.properties local.propertieslocal.example.properties 是项目提供的配置模板,包含 Supabase 后端地址、Trakt/SimKL/MDBList 客户端 ID 等。首次构建即使留空占位值也能正常编译,相关字段只是注入到 BuildConfig 中,可按需再填写。
四、full 与 playstore:双构建变体到底差在哪
NuvioTV 采用产品风味(Product Flavor)实现一份源码、两种分发,核心定义在 app/build.gradle.kts:
| 对比项 | full 变体 | playstore 变体 |
|---|---|---|
| 包名 | com.nuvio.tv | com.nuvio.app |
| 插件系统(QuickJS + CloudStream) | ✅ 开启 | ❌ 关闭 |
| 应用内自动更新 | ✅ 开启 | ❌ 关闭 |
| 应用内预告片 | ✅ 开启 | ❌ 关闭 |
| 外部播放保活服务 | ✅ 开启 | ❌ 关闭 |
| 自定义服务器连接 | ✅ 开启 | ❌ 关闭 |
| Leanback 特性 | 不强制 | 强制要求 |
两个变体在功能之外的差异同样讲究:
- 依赖差异:full 变体额外引入 QuickJS 脚本引擎、CloudStream 插件库、Jackson、NiceHttp 等(见 app/build.gradle.kts),用于在设备端运行第三方扩展插件;playstore 变体则全部剔除,包体更小。
- 权限差异:playstore 变体通过 app/src/playstore/AndroidManifest.xml 移除了"安装未知应用""前台服务"等权限,并删除保活 Service,以符合商店审核规范。
- 代码差异:每个变体有独立源集,如 full 的 PluginManager.kt 是真正的插件管理器,而 playstore 的 同名文件 是不含插件能力的桩实现。
📌 新手建议:本地开发选full 变体,功能最全,方便调试插件与更新逻辑;面向商店分发时才选 playstore。
五、最快构建方法:一条 Gradle 命令搞定
仓库自带 Gradle Wrapper,无需本机安装 Gradle。常用构建命令如下:
# full 变体 Debug APK(最常用,本地开发首选) ./gradlew :app:assembleFullDebug # playstore 变体 Debug APK ./gradlew :app:assemblePlaystoreDebug # full 变体 Release APK(需要签名配置) ./app:assembleFullRelease 2>/dev/null || ./gradlew :app:assembleFullRelease # playstore 变体 AAB(提交 Play Store 用) ./gradlew :app:bundlePlaystoreRelease产物在哪里?构建完成后,APK 位于:
app/build/outputs/apk/{full,playstore}/{debug,release}/几个值得注意的细节:
- ABI 分包:Release 构建默认按
arm64-v8a、armeabi-v7a、x86、x86_64四种架构分包,并额外生成一个 universal 全架构包(见 app/build.gradle.kts),而 AAB 构建则不做分包。 - 签名:Debug 构建复用 release 签名配置,CI 环境可通过环境变量
CI_USE_DEBUG_SIGNING=true切换为调试签名。 - Dolby Vision:
DOVI_NATIVE_ENABLED=true(默认)时,构建过程会把 DV7/libdovi/ 中预编译的各架构静态库链接进dovi_bridge原生库,实现杜比视界 Profile 7 → 8.1 转换。
六、进阶:两个可选构建开关
在local.properties中按需修改:
USE_LOCAL_FFMPEG_DECODER=false(默认)——使用预编译 FFmpeg 解码器 AAR;设为true时改为构建 ffmpeg-decoder-downmix/ 本地模块,需要额外指定 FFmpeg 源码与构建目录。DOVI_NATIVE_ENABLED/DOVI_ENABLE_REAL_LINK—— 控制杜比视界原生桥接是否编译及是否链接真实 libdovi,找不到静态库时会自动降级为 stub 模式,不会中断构建。
七、项目结构导航:源码都藏在哪
NuvioTV/ ├── app/ │ ├── src/main/ # 公共主代码(播放器、同步、Debrid、插件框架等) │ ├── src/full/ # full 变体专属代码(插件、自动更新) │ ├── src/playstore/ # playstore 变体专属代码(桩实现、清单裁剪) │ ├── src/main/cpp/ # DOVI 原生桥接(CMake 构建) │ └── libs/ # Nuvio 引擎与解码器本地 AAR ├── baselineprofile/ # Baseline Profile 生成模块 ├── ffmpeg-decoder-downmix/# 可选本地 FFmpeg 解码器 ├── DV7/libdovi/ # 预编译 libdovi 静态库(4 种架构) └── docs/ # 架构与设计文档如果你想深入理解某块功能,架构文档 docs/architecture/mdblist-library.md 是不错的起点;应用入口从 MainActivity.kt 开始读即可。
八、总结:你的第一个 NuvioTV APK 只需要 3 步 🎉
- 安装 Android Studio(含 SDK 36 + NDK + CMake),准备 JDK 11+
git clone https://gitcode.com/gh_mirrors/nu/NuvioTV && cd NuvioTV./gradlew :app:assembleFullDebug
构建成功后,把app/build/outputs/apk/full/debug/下的 APK 传到你的 Android TV 或电视模拟器上安装,NuvioTV 的完整源码之旅就从这里正式开始。祝你构建顺利!
【免费下载链接】NuvioTVOfficial Nuvio Android TV Repository项目地址: https://gitcode.com/gh_mirrors/nu/NuvioTV
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考