首页 / 资讯中心 / 文章详情

Jellyfin for Android TV 客户端:源码构建、分支策略与翻译协作全指南

Jellyfin for Android TV 客户端:源码构建、分支策略与翻译协作全指南 ★ FEATURED ARTICLE
移动开发音视频视频【免费下载链接】jellyfin-androidtvAndroid TV Client for Jellyfin项目地址https://gitcode.com/gh_mirrors/je/jellyfin-androidtv点击查看免费下载Jellyfin for Android TV 是 Jellyfin 官方开源的 Android TV 客户端面向 Android TV、Nvidia Shield 与 Amazon Fire TV 等大屏设备可通过 README.md 了解其定位与社区协作方式。本文以该文档为主线结合仓库中的 Gradle 配置、模块结构与源码实现完整讲解如何从源码构建 APK、理解master与release分支的正确用法以及如何参与翻译工作帮助开发者快速上手二次开发与部署。项目定位与适用设备Jellyfin for Android TV 是一个 Jellyfin 客户端专门面向 Android TV、Nvidia Shield 和 Amazon Fire TV 设备。它通过 Android 的 Leanback 体系与 TV 交互范式适配遥控器操作并复用 Jellyfin 服务端的能力提供媒体浏览、播放与 Live TV 等功能。从 app/src/main/AndroidManifest.xml 可以看到客户端运行所需的核心能力声明网络权限INTERNET、ACCESS_NETWORK_STATE、ACCESS_WIFI_STATETV 集成com.android.providers.tv.permission.WRITE_EPG_DATA配合LeanbackChannelWorker与MediaContentProvider向系统 TV 频道提供 EPG 数据硬件需求采用宽松声明android.software.leanback、android.hardware.touchscreen、android.hardware.microphone均标记为requiredfalse允许非纯 TV 设备安装额外特性声明了屏幕保护服务LibraryDreamService、启动引导StartupActivity含LEANBACK_LAUNCHER入口与主界面MainActivity。该客户端是社区驱动项目README 明确欢迎一切贡献与 Pull Request若有较大的功能设想建议先开 Issue 讨论实现方案再动手以避免重复劳动。从源码构建 APK环境要求项目使用 Gradle 构建需要 Android SDK。README 推荐直接使用 Android Studio自带全部依赖进行开发与构建若选择手动构建则需确保系统 PATH 中已安装兼容的 JDK 与 Android SDK然后通过项目自带的 Gradle wrapper./gradlew执行构建。以当前仓库为准构建链路的版本要求如下Gradle wrapper 固定为 Gradle 9.8.0见 gradle/wrapper/gradle-wrapper.propertiesAndroid Gradle Plugin 版本为 9.4.1见 gradle/libs.versions.toml 中android-gradle声明Kotlin 版本为 2.4.20compileSdk 37、minSdk 23、targetSdk 36其中minSdk 23意味着可覆盖 Android 6.0 及以上的设备Java 工具链为 JDK 21。这些版本号全部集中在版本目录Version Cataloggradle/libs.versions.toml 中统一管理实际编译时由 app/build.gradle.kts 引用。构建命令与产物在仓库根目录执行 README 给出的命令即可生成调试版 APK./gradlew assembleDebug构建完成后APK 会输出到app/build/outputs/apk/debug目录。README 特别强调这个 APK 使用了与稳定版不同的 applicationId可以手动安装到设备上与正式版并存运行。这一点可以在 app/build.gradle.kts 中得到印证——debug构建类型为applicationId追加了.debug后缀applicationIdSuffix .debug即调试包实际 ID 为org.jellyfin.androidtv.debug同时通过resValue分别覆盖app_id、搜索建议 authority 与app_name显示为 Jellyfin Debug。这意味着你可以在同一台设备上同时安装调试版与 Play 商店版而互不冲突非常适合日常联调。签名、版本号与可配置属性发布签名app/build.gradle.kts 中的signingConfigs通过四个属性注入发布签名信息keystore.filekeystore.passwordsigning.key.aliassigning.key.password这四项均通过 buildSrc/src/main/kotlin/Properties.kt 的getProperty读取先查 Gradle 属性如-Pkeystore.file...再查同名环境变量.转为_小写转大写如keystore.file→KEYSTORE_FILE。只有当四项全部提供时才会创建release签名配置否则跳过——这也是从源码构建release包前必须准备的配置项。版本号解析versionName由 buildSrc/src/main/kotlin/VersionUtils.kt 生成优先读取环境变量JELLYFIN_VERSION或属性jellyfin.version去掉前导v后使用缺省回退为0.0.0-dev.1。versionCode则由语义版本计算而来MA.MI.PA-PR编码为MAMIPAPR主版本 ×1000000、次版本 ×10000、补丁 ×100预发布段如-rc.1、-beta.3取.后的数字缺省为99示例2.0.0→20000992.0.0-rc.3→2000003。debug构建类型的DEVELOPMENT标志由versionCode 100推导默认开发版本号0.0.0-dev.1计算出的 code 为99恰好落在开发区间用于在代码中区分开发/正式行为。其他构建行为release开启isMinifyEnabled true与isShrinkResources true混淆规则见 app/proguard-rules.pro开启coreLibraryDesugaring见 app/build.gradle.kts 与android-desugar依赖lint 配置指向仓库根目录的 android-lint.xml且abortOnError false单元测试基于 JUnit Platform测试代码可参考 app/src/test/kotlin 下的TimeUtilsTests.kt等用例。模块结构从构建产物反观架构README 虽未展开架构细节但 settings.gradle.kts 清晰呈现了当前仓库的多模块结构可作为源码阅读的路线图:app—— 客户端主工程包含 UI、集成与 DI 装配:design—— 设计令牌Design Tokens见 design/src/main/kotlin/Tokens.kt统一封装ColorTokens、RadiusTokens、SpaceTokens、TypographyTokens:playback:core—— 播放核心抽象PlaybackManager、PlayerBackend、队列与媒体流模型不依赖具体播放器实现:playback:jellyfin—— Jellyfin 服务端集成媒体段、播放会话、队列同步等:playback:media3:exoplayer—— ExoPlayer 后端实现ExoPlayerBackend、ExoPlayerOptions、FFmpeg 解码与 libass 字幕支持:playback:media3:session—— Media3 Session 与系统媒体通知集成:preference—— 偏好设置存储与迁移。播放装配入口在 app/src/main/java/org/jellyfin/androidtv/di/PlaybackModule.kt通过 Koin 注入ExoPlayerOptions缓冲时长、FFmpeg 偏好、libass、调试日志、媒体会话与 Jellyfin 插件。其中HttpDataSource.Factory特意将requestTimeout设为Duration.ZERO注释说明媒体播放禁用请求超时以避免 Live TV 断流问题——这是排查直播卡顿时可参考的实现细节。依赖管理方面settings.gradle.kts 中的dependencyResolutionManagement为 Jellyfin SDK 预留了快照仓库latest-SNAPSHOT本地 mavenLocal、master-SNAPSHOT与openapi-unstable-SNAPSHOTsonatype 快照源配合 app/build.gradle.kts 中sdk.version属性local/snapshot/unstable-snapshot可切换 SDK 版本来源。分支策略master 与 release 的正确取舍README 对分支使用给出了非常明确的纪律性建议这部分对 Fork 与自建部署的团队尤其重要master是主开发分支也是所有 Pull Request 的目标分支master是不稳定的可能包含破坏性变更或未解决的 Bug不应直接用于生产生产部署或长期 Fork 应始终基于最新的release-x.y.z分支不要以master为基线做长期开发。发布分支的运作方式在每个 beta 周期开始时创建随每次正式发布保持更新维护者会按需将选定的修改 cherry-pick 到发布分支backports同一发布分支会被后续的补丁版本patch release复用。对贡献者而言这意味着提交 PR 时应瞄准master对使用者而言构建自己的稳定版本时应检出release-x.y.z分支。仓库根目录无 git 元数据分支切换需在 clone 之后执行例如git checkout release-0.16.x以实际发布的版本号为准。参与翻译借助 Weblate 而非 PR客户端面向全球多语言用户仓库内可见 60 个values-*语言目录从values-af到values-zh-rTW默认文案位于 app/src/main/res/values/strings.xml。README 对翻译协作给出了两条明确的渠道约束翻译可通过 Jellyfin 官方的 Weblate 实例jellyfin-androidtv 项目在线完成操作非常轻量无需搭建本地环境翻译文件不接受通过 Pull Request 提交的改动——即不要直接修改values-*/strings.xml后提 PR应统一走 Weblate 流程。这一约定的意义在于避免多人 PR 直接改翻译文件造成的冲突与重复劳动保证翻译源Weblate与代码仓库的单向同步关系。对本地开发者可对照 app/src/main/res/values-zh-rCN/strings.xml 等语言文件查看翻译现状但修改后请勿作为 PR 提交。结语从 README.md 出发可以看到 Jellyfin for Android TV 的三条核心协作主线用./gradlew assembleDebug快速产出可安装的调试 APK、以master为贡献目标而以release-x.y.z为生产基线、通过 Weblate 而非 PR 维护多语言翻译。结合仓库中的 Gradle 版本目录、构建脚本与播放模块源码开发者既能快速跑通构建也能在深入定制播放行为如 ExoPlayer 缓冲、FFmpeg 解码、字幕与媒体会话时找到清晰的代码入口。赞分享移动开发音视频视频【免费下载链接】jellyfin-androidtvAndroid TV Client for Jellyfin项目地址https://gitcode.com/gh_mirrors/je/jellyfin-androidtv点击查看免费下载相关推荐Jellyfin Android TV 客户端从构建到部署的全方位指南Jellyfin Android TV 客户端从构建到部署的全方位指南 一、认识Jellyfin Android TV客户端 1.1 项目概述 Jellyfi移动开发音视频视频Hy-Embodied-RxBrain-1.0文本到图像生成创作高质量图像的完整教程Hy Embodied RxBrain 1.0文本到图像生成创作高质量图像的完整教程 Hy Embodied RxBrain 1.0是一款由腾讯RoboticJellyfin Android TV客户端Live TV功能问题分析与修复Jellyfin Android TV客户端Live TV功能问题分析与修复 引言 Jellyfin作为一款开源的媒体服务器软件其Android TV客户端提移动开发音视频视频上一篇解决React Native权限申请难题iOS/Android双平台适配完全指南下一篇Windows 11系统精简终极指南5步打造轻量高效的定制系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站