# 红果 TV 原生独立版 这是独立的 **Kotlin + Android 原生 View + Media3** 工程,最低 Android 8.0 / API 26。安装一个 APK,联网后可直接浏览和播放,无需部署 Node、Docker 或填写服务器地址。 - 应用名称:红果 TV 原生版 - 包名:`com.hongguotv.nativeapp`,与旧版 `com.hongguotv` 可以并存。 - 收藏和历史独立保存在本机,不自动迁移旧版数据。 - APK 不含 JNI 库,可由 Android 在 ARM32、ARM64、x86、x86_64 上运行;视频解码能力依赖设备。 - 源码分支:`codex/kotlin-standalone`。 - [下载正式签名 APK](https://github.com/N3urda/hongguoTV-updates/releases/latest) 0.2.1 修复简介与设置切换后的焦点跳转,并适配放大字号的卡片高度。可直接覆盖安装 0.2.0,保留收藏和观看记录;见 [交付与验证记录](DELIVERY.md)。 ## 0.9.0 新增 - 应用内更新:浏览时自动检查、下载公开发布仓库中的新版,校验文件和签名后由系统确认安装;设置中可手动检查或关闭自动下载。播放与后台会取消更新请求。 - 推送 `codex/kotlin-standalone` 的原生代码后,自动导出对应原生源码到公开仓库,由 CI 验证、签名并发布 APK、源码及更新元数据。电视无需 GitHub 凭据。 - 首次仍需手动安装这版;Android 8 首次需开启本应用的安装权限,之后每次确认系统安装。覆盖安装保留本机记录。 [自动更新、发布配置与版本规则](AUTO_UPDATES.md)。云端构建编号从 10001 起递增,正式包沿用旧发布签名。 ## 0.8.0 新增 - **安静连播**:首次开播、自动连播、手动换集都不主动显示进度浮层。暂停、快进快退及打开更多操作仍显示必要控制;缓冲与错误状态保留提示。 - **返回先收起**:进度条或更多控制显示时,第一次返回收起整个浮层,保留当前播放或暂停状态;再次返回才退出播放器。选集取消恢复打开前的浮层可见性。 - **完整竖版海报**:接口封面样本约为 7:10,首页与列表改用竖版卡片;图片解码和显示均保留原始比例及全部内容,不再居中裁切。大字体下缩小图片以留出文字空间。 - **统一电视界面**:深色背景、珊瑚色焦点、精简导航、六列海报、固定选剧信息和分区标题。设置分为「播放偏好」「片单与设备」两组,左右方向键直达同排选项;延续原生轻量控件和既有图片预算。 沿用发布签名,可覆盖安装 0.7.0 并保留本机记录。验证范围见 [0.8.0 交付与验证](RELEASE_0.8.0.md)。 ## 0.7.0 新增 - **首页更紧凑**:焦点预览固定为一行剧名和一行状态,完整简介留在详情。接着看、收藏有更新各显示最多 8 部,稍后看、热门各最多 10 部;超过后从行末「查看全部」进入集合。本地收藏、最近观看及首页集合每页最多 20 部,避免一次创建全部剧卡。首屏数量不改变本机记录的保存上限。 - **快捷操作保持位置**:收藏、稍后看和隐藏更新当前卡片区域,不重建整个页面;保留每行横向位置,移除当前卡后聚焦相邻卡。返回列表保留页码,并确保恢复的焦点处于可见区域。 - **本机查询不再反复解析记录**:启动在后台载入收藏、历史、设置及首页缓存,之后通过内存索引查询;记录按变更字段合并,由后台串行写入。首页缓存独立存储,兼容迁移旧版记录,生命周期变化会请求及时写入。 - **封面和请求可以取消**:图片按实际显示尺寸采样和裁切,优先处理焦点附近内容;图片等待队列最多 24 项,低内存设备使用 1 个图片线程和 4 MiB 内存缓存,其他设备为 2 个线程和 8 MiB。保留 24 MiB 封面磁盘缓存;离开页面、换集或进入后台时释放旧图片绑定并取消相应请求,翻页与搜索也会取消前一次内容请求。 - **换集复用播放器**:普通换集复用 Media3 播放器与播放视图,更新媒体源和本集监听;故障恢复、退出和后台释放仍走完整清理。播放进度与媒体状态按可见性、播放状态和事件更新,减少后台或隐藏界面的重复工作。 - **预加载靠近片尾**:按当前倍速估算剩余播放时间,在最后 30 秒内且自动连播、网络和缓冲条件允许时准备下一集;每集最多尝试 3 次,尝试间隔至少 15 秒。仍只保留一个结果和最多 1 MiB 开头数据,2 分钟失效,取消及失败走普通加载流程。 - **避免只播声音却黑屏**:过滤已知不兼容的视频格式;优先遵守默认清晰度,若只有更高清晰度可用则显示「兼容资源」。视频轨道无法播放时显示失败操作,不把音频 READY 当成视频成功。 - **续播少一层操作**:最近观看和首页续播确认后直接播放,退出回原列表;播放中「↓」直接选集,「↑ / 菜单键」打开更多操作。选集取消恢复原播放或暂停状态。 沿用发布签名,目标安装包 `hongguotv-kotlin-0.7.0-android8.apk`,可覆盖安装 0.6.0 并保留本机记录。验证状态和设备边界见 [0.7.0 交付与验证](RELEASE_0.7.0.md)。 ## 0.6.0 新增 - 首页重组为「接着看 → 收藏有更新 → 稍后看 → 热门发现」横向剧架,空分区不占位。续播显示集数、时间和进度条;收藏更新直接显示对应剧;遥控器上下切分区、左右选剧,返回后恢复原卡片。 - 首页、搜索、排行榜、收藏和历史的焦点区显示完整剧名(最多两行)、接口提供的集数/热度、题材、简介及本机状态;确认可进入详情阅读完整简介。720p 大字体下自动缩小封面,保留文字和进度。 - 所有剧卡支持长按确认或菜单键:直接播放/续播、收藏/取消、加入/移出稍后看、查看详情;首页可隐藏热门推荐,设置可恢复。稍后看最多 100 部、隐藏推荐最多 500 部,纳入本机备份,兼容 0.5.0 旧备份。 - 启动先显示最近 7 天的首页缓存,后台更新不替换正在浏览的卡片;页面底部确认应用新内容。封面有 24 MiB 磁盘缓存,首页按焦点附近加载。缓存仅包含列表和封面,不缓存平台账号、签名播放地址或整集视频。 - 自动连播开启、非按流量计费网络且当前集稳定播放后,预解析下一集并保留最多 1 MiB 开头数据。只保留下一集,2 分钟后失效;切换清晰度、退出/后台、网络变化时取消。未完成、过期或失败时回到正常播放流程。视频索引仍受原 8 MiB 上限约束,媒体始终在内存处理。 沿用正式签名,可覆盖安装 0.5.0 并保留记录。[0.6.0 交付与验证](RELEASE_0.6.0.md)。 ## 0.5.0 新增 - 定时停止:播放菜单选择 15 / 30 / 60 / 90 分钟后停止,或本集 / 再播完 3 / 5 集后停止。到点暂停、保存进度并取消自动重试,片尾先判断定时再自动连播。分钟按实际经过时间计时(包含暂停),集数在片尾计数,手动切集不扣次数。仅本次观看有效,退出播放器或切到后台会取消。 - 手机备份与恢复:设置中扫码,用同一局域网内的手机浏览器下载 JSON,或上传已有备份。电视预览并确认后才合并收藏、观看位置、已看状态及搜索历史;已有收藏优先,观看位置以较新记录为准。默认保留电视设置,可勾选恢复备份内的清晰度、倍速、自动连播、内容类型与画面模式。收藏最多 500 部、历史最近 200 条、搜索 20 条,文件最多 2 MB。它用于本原生版设备之间迁移,与红果账号无关。 - 全局画面模式:完整画面 / 等比铺满 / 拉伸铺满,播放中立即切换并保存;完整画面为默认。等比铺满可能裁切字幕,拉伸会改变比例,选择时有说明。 - 系统媒体控制:前台播放时提供剧名、集数、时长和状态,接受系统播放 / 暂停 / 上下集 / 定位 / 停止;退出或进入后台撤销媒体会话。加载视频期间暂停,以及选集面板中收到暂停,都不会在后续加载或关闭弹窗后误播放。 沿用正式签名,可覆盖安装 0.4.0 并保留本机记录。仍是单 APK,无需部署服务。[0.5.0 交付与验证](RELEASE_0.5.0.md)。 ## 0.4.0 新增 - 播放故障恢复:网络恢复后重新获取播放地址,保留集数、位置和暂停状态;同一集最多自动重试 3 次,可立即重试、停止自动重试或改用 720P。退到后台或退出播放会取消重试;解码类错误不反复进行网络重试。 - 播放中选集:遥控器「↓ → 选集」打开侧边面板,默认聚焦当前集;支持每组 20 集、数字跳转。定位后确认才换集。打开面板暂时暂停,取消恢复原播放/暂停状态和焦点。 - 首页一键续播:显示最近 3 部未手动标为整剧已看的剧,直接确认续播;已播完一集则优先接着下一集。按剧集 ID 匹配进度,避免片源调整顺序后串集。 - 收藏更新提示:前台打开应用自动检查超过一小时未检查的收藏,收藏页可手动检查;逐部读取最新详情,显示新增集数和当前总集数。首次检查建立基准,进入详情后清除该剧新增提示;失败保留之前结果,连续失败 3 部时停止本轮检查。提示基于内容接口实际集数,不提供后台推送或平台账号同步。 - 全局默认配置:设置中选择 480P / 720P / 1080P,以及 0.75 / 1 / 1.25 / 1.5 / 1.75 / 2×;对所有剧集生效,重启保留。清晰度为优先上限,具体取片源提供的档位;播放菜单内修改清晰度或倍速也保存为全局默认。 单 APK,无需部署其他服务。正式签名延续 0.2.x / 0.3.0,可覆盖安装并保留本机记录。交付与验证见 [0.4.0 交付记录](RELEASE_0.4.0.md)。 ## 0.3.0 新增 - 推荐、搜索增加「漫剧 / 短剧」类型选择,默认漫剧,重开应用保留上次选择。漫剧首页展示漫剧热播榜,搜索限定漫剧;切换类型会回到第 1 页。收藏和最近观看继续保留原有全部记录。 - 播放时按遥控器「↓」打开菜单,选择「倍速」:0.75 / 1 / 1.25 / 1.5 / 1.75 / 2×。立即生效,换集、重试及重开应用后保持;取消不修改倍速,关闭弹窗后焦点回到倍速按钮。 - 漫剧接口失败会显示重试,不会用真人短剧结果代替。搜索翻页携带接口游标,避免重新搜索导致结果重复。 - 顶部「排行榜」进入漫剧热播榜,展示网站提供的名次、热度、更新时间和总页数,前三名突出显示。支持遥控器翻页、刷新榜单、进入剧集后返回原页与卡片;刷新会重新读取第 1 页。排行榜始终为漫剧,不受推荐/搜索的短剧选择影响。 - 详情增加「跳转集数」,用遥控器数字面板定位任意一集;定位后再按确认播放,输入超出范围会提示。 - 搜索增加「历史」,按内容类型记录最多 20 个搜索词,去重、重启保留,选择后按对应漫剧/短剧类型重搜;支持清空。 - 搜索增加「手机输入」,同一局域网内扫码、在手机浏览器输入剧名,发送后电视自动搜索。临时页面只有窗口打开时有效,单次使用、最长 5 分钟,关闭窗口或应用退到后台立即关闭监听;无需部署额外服务。 - 最近观看增加「管理记录」,也可在卡片上按菜单键或长按确认:删除单条、标记整剧已看/恢复未看、清空记录;删除观看记录保留收藏,删除操作带取消入口。 - 设置增加「版本与更新」,手机扫码或电视浏览器打开 GitHub 发布页。仓库为私有时需在浏览器登录有权限的 GitHub 账号;这是下载入口,不是自动检测、下载或静默安装更新。 正式版使用同一发布签名,可覆盖安装 0.2.0 / 0.2.1 并保留收藏、观看记录与设置。Debug APK 使用开发签名,不能覆盖不同签名的正式安装包。 **红果账号同步尚未实现**:你使用抖音账号登录红果,仍需要可验证的红果授权、账号映射和收藏/进度读写接口。当前收藏与观看记录继续保存在本机。调查依据和接入条件见 [账号同步调查](../docs/ACCOUNT_SYNC.md)。应用内二维码均不是红果登录入口。 本版交付与复测见 [0.3.0 交付记录](RELEASE_0.3.0.md)。 本轮测试和模拟器证据见 [漫剧与倍速验证记录](COMIC_SPEED_VERIFICATION.md)。 排行榜补充验证见 [漫剧排行榜验证记录](COMIC_RANKING_VERIFICATION.md)。 ## 使用 1. 从公开发布仓库下载最新正式 APK,首次拷贝到电视安装,或通过 `adb install -r APK文件路径` 覆盖安装。之后在设置 → 版本与更新中完成更新。 2. 在电视应用列表打开「红果 TV 原生版」,进入首页或搜索。 3. 首页续播和最近观看确认即播放;发现新剧时确认进入详情,选择开始观看。设置中可选择 480P / 720P / 1080P 上限和是否自动连播。 播放中:确认键暂停/播放;左右跳转 10 秒,长按连续跳转;向下直接打开选集,向上或菜单键打开播放、上下集、倍速等更多操作。返回键先关闭选集或收起进度条与菜单,再退出播放;从列表直接续播时回原列表,从详情开始播放时回详情。列表恢复原卡片和页码。 ## 构建 需要 JDK 17、Android SDK Platform 36 / Build Tools 36.0.0。Gradle 8.14.3 包装器已包含;不需要 npm、Node 或 React Native。设置 `ANDROID_HOME`,或在本目录的 `local.properties` 写入 `sdk.dir=SDK绝对路径`。 ```sh # 仓库根目录:开发包直接可安装,无需发布私钥 ./kotlin-tv/gradlew -p kotlin-tv :core:test :app:lintDebug :app:assembleDebug adb install -r kotlin-tv/app/build/outputs/apk/debug/app-debug.apk ``` 正式 APK 使用独立发布密钥,**私钥和口令不在 GitHub 中**。重建发布包时,配置以下环境变量,或创建被 Git 忽略的 `kotlin-tv/keystore.properties`: ```properties storeFile=/absolute/path/to/your-release.jks storePassword=your-password keyAlias=your-alias keyPassword=your-password ``` 对应环境变量:`HONGGUOTV_KEYSTORE`、`HONGGUOTV_STORE_PASSWORD`、`HONGGUOTV_KEY_ALIAS`、`HONGGUOTV_KEY_PASSWORD`。使用自己的签名重建时,不能直接覆盖安装官方发布密钥签名的 APK;卸载会清除本机记录。更新已安装的正式版应继续使用同一发布密钥。 ```sh ./scripts/build-kotlin.sh # 输出:outputs/hongguotv-kotlin-0.7.0-android8.apk ``` ## 工程结构 - `core/`:纯 Kotlin 内容列表、搜索、详情、请求签名、播放地址解析、MP4 索引和分段处理;可在 JVM 测试。 - `app/`:原生电视界面、遥控器焦点、本地收藏/进度、Media3 播放器及自定义 DataSource。 - `core/src/test/`:固定签名对照、NIST AES-CTR 向量、跨样本/非对齐分段、AVC 索引恢复及畸形输入校验。 - `tools/signing-oracle.cjs`:仅开发期生成兼容性测试样本;运行、构建 APK 不需要它。 播放器直接通过 HTTPS 分段拉取数据,经本机 Kotlin 处理后交给 Media3。没有 JS 引擎或常驻内容服务。仅在用户打开「手机输入」或「手机备份与恢复」窗口时,APK 临时监听局域网 HTTP;最长 5 分钟,窗口关闭或应用进入后台后停止。备份下载每次二维码一次,上传成功后关闭会话并等待电视确认。页面不处理平台账号凭据或媒体。媒体只在内存中处理,不下载整部剧到存储。元数据响应、封面大小、索引数量和播放缓冲均有上限。 ```sh # 可选联网检查:真实网站和内容接口,网络变化可能导致失败 ./kotlin-tv/gradlew -p kotlin-tv :core:run # 漫剧分类、搜索两页、详情与真实视频分段检查 ./kotlin-tv/gradlew -p kotlin-tv :core:run --args=--comic # 漫剧排行榜首两页及末页:来源名次、热度、分页和重复检查 ./kotlin-tv/gradlew -p kotlin-tv :core:run --args=--ranking # 重新生成签名对照样本才需要 Node node kotlin-tv/tools/signing-oracle.cjs ``` ## 验证边界 **0.7.0 最终验证待填写,发布前替换本段。** 首轮 69 项 JVM 测试通过,Release lint 为 0 错误、28 警告;后续回归仍在进行。最终 APK、签名与覆盖安装、遥控器焦点、播放器复用和性能证据见 [0.7.0 交付与验证](RELEASE_0.7.0.md),不得将首轮结果当作最终验收。 既往版本已进行 JVM 单元测试、Android lint、正式 APK 构建及 Android TV API 36 模拟器上的真实播放和遥控器检查;本版最终结果以上述发布记录为准。最低 API 26 配置和静态检查不等同于实体电视验收;**Android 8.0 实体电视的芯片解码、音频输出和长期稳定性尚待实机验证**。遇到设备解码失败可尝试 720P,仍失败需对应电视的日志。 内容来自第三方接口;接口、签名、内容可用性或地区网络变化可能需要更新 APK。此版本不是内容平台官方客户端。 原生代码按 GPL-3.0-only 发布;派生来源和依赖声明见 [NOTICE.md](NOTICE.md),完整许可见 [LICENSE](LICENSE)。