Skip to content

About

红果鉴 Android 版 · 上游 zhoufuweigg/guoapp 的 Android 拆分二开版,只维护 Android · 免责声明与来源声明见 README/NOTICE

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

红果鉴 / 真果鉴 · Android 版

⚠️ 免责声明:本项目是个人学习研究的二次开发作品,源码来源见下方「来源与二开说明」。 我不保证任何可用性,随时可能停止维护或删除仓库。 请勿冒充官方、请勿以任何"授权"名义收费;本软件与各站源平台无任何隶属或授权关系。

Flutter 独立短剧 / 影视应用,原名「短剧库 APP」。站源请求、解析、下载和播放均在设备上完成,不依赖自建服务。当前源码版本:0.3.6+7。

来源与二开说明

本仓库是 zhoufuweigg/guoapp 的 Android 拆分派生版, 只维护 Android,跟随上游同步——上游发布新版本(新站源、修复等)时合入 Android 相关内容, 不带回上游的 Windows / iOS 构建面。主要差异与修改记录见 NOTICE。

来源链路(详见 NOTICE):

层级 名称 仓库 许可
直接上游 guoapp(红果鉴 / 真果鉴) zhoufuweigg/guoapp 未声明
原始来源 短剧库 APP(据上游自述来自「鱼佬」) 未提供 未知
本仓库 红果鉴 Android 版 dawei233/guoapp-android 未声明

⚠️ 许可状态:本仓库与全部上游来源均未提供 LICENSE 或明确许可声明。 因此本仓库不授予任何再分发、修改或商业使用的许可,公开源码仅出于学习研究与技术交流。 请勿将本仓库标记为任何标准开源许可证。详见 NOTICE 第二节。

⚠️ GPL 组件:Android 产物打包了 FFmpegKit min-gpl(含 x264 / x265 / xvidcore / vid.stab 等 GPL 编解码器),产物的媒体处理部分受 GPL-3.0 约束,重新分发须履行对应源码提供义务。 组件清单见 THIRD-PARTY-NOTICES.md。

本仓库是当前唯一维护的仓库,只维护 Android。原多端仓库 dawei233/guoapp 已冻结存档(含 Windows 完整实现与历史版本),仅作参考、不再维护。

本轮在 0.2.50 基线上新增两个原生站源:韩小圈(hanxiaoquan,韩剧 / 韩国电影 / 韩国综艺 / 韩国动漫)与鬼片网(guipian,鬼片 / 电视剧 / 动漫)。默认可见站源顺序为:红果 → 韩小圈 → 鬼片 → 青空。

说明:应用长期按「只维护源码与定向测试,集中验证另行安排」的方式推进。未完成集中验证与真机验收的项目保持未验收状态;历史版本的检查记录不能作为后续新增功能的验收结论。

编译方式 应用名称 可用站源
默认(不加参数) 红果鉴 仅红果
加 --all-sources 真果鉴 红果、韩小圈、鬼片、青空,以及黄豆、剧果、野果、帝果、黄果视频、黄果 AI、黄果旧版

默认可见站源(红果、韩小圈、鬼片、青空)无需密码;其余站源默认隐藏,在站源管理里通过密码锁解锁后显示。已有受限用户不会自动获得新增站源权限,管理员可在用户管理中勾选。

这是编译选项,应用内不能切换版本。标题、Android 桌面名称与电视横幅随编译选项变化。界面、站源调用、原生下载调度同时限制可用站源;红果版不会访问或继续执行其他站源的旧任务。

两版保留原 Android 应用标识及数据目录;Android 使用同一签名可相互覆盖升级,不能作为两个独立正式应用并排安装。切换版本保留追剧、观看记录、用户权限和下载记录;备份格式保持兼容。

使用

功能 操作
浏览 标题栏依次提供排序与筛选、榜单、多选下载和展开搜索。分类保持独立一行,内容区左右滑动切类;支持默认、名称、自然季号、上线日期、热度、播放量排序及连载状态筛选。列表下滑接近底部自动加载下一页,底部「加载更多」为兜底
搜索 红果合并官网与名称索引,输入停顿 300 毫秒显示最多 10 条联想;韩小圈、剧果、野果、鬼片调用各自的在线搜索并按分页继续加载。部分失败保留有效结果;最近 20 次搜索按用户保存
推荐 仅红果分类栏在「全部」后显示「推荐」,可切换真人剧、漫剧、AI 剧并分别记住位置
详情 普通点剧直接进入播放;下载和兜底入口保留详情页。详情页浏览封面、资料、追剧状态与可展开简介;底部固定「立即播放 / 继续播放」和下载入口。选集默认折叠,展开后每组 50 集,可切换范围、定位当前或输入集数跳转;宽屏与电视采用资料、选集分栏
追剧与历史 按想看 / 在看 / 已看 / 有更新筛选;红果已追剧发现新季后进入「有更新」。追剧和历史均可搜索。每个用户独立保存,每 5 秒及退出播放时记录真实进度
卡片与批量下载 卡片「更多」提供收藏、状态和下载选集;电脑右键,电视菜单键。发现页长按卡片或点标题栏「多选下载」,一次最多 50 部
VIP 全站源版浏览黄豆或全部站源时显示 VIP 图标,仅过滤黄豆;默认隐藏已确认的 VIP。未知、免费、VIP 分别保存,未知不会覆盖已知状态
手机播放 上滑下一集、下滑上一集;长按 350 毫秒临时 3 倍速。竖屏轻点播放 / 暂停,横屏轻点控制条,双击播放 / 暂停。视频下方为「选集 / 简介 / 下载」Tab
播放手势 按住屏幕左侧 20% 区域上下滑动调亮度,右侧 20% 区域上下滑动调音量,中间区域上下滑动切换上下集。亮度/音量需纵向滑动超过阈值才生效,仅触碰边缘不会触发。音量调的是系统媒体音量,与手机侧键同一路,调过后记住并在下次开播沿用
画中画 Android 手机 / 平板播放器在控制层右上角提供画中画按钮;进入前隐藏自绘控制层与弹幕,小窗只保留画面。全屏按钮固定在底部控制条最右侧。Android TV 暂未接入
画质增强 依赖 mpv + D3D11VA,原仅 Windows 支持;本仓只维护 Android,该功能恒为隐藏且不生效
弹幕 红果在线播放默认开启;播放器侧边圆形「弹」字按钮可关闭、查看状态及失败重试。本地播放不加载弹幕。上游按游标分批返回,同一句话会在不同批次带不同 id 重复给出,因此按「时间 + 文本」去重,同句不会重复上屏
下载 播放页「下载」Tab 和详情页下载入口均可选择分集与画质;支持批量暂停、继续、重试、删除及清理任务但保留视频。「更新本剧」补新增或缺失分集
更多 站源管理、用户管理、设置与备份、界面模式、关于
站源 浏览与播放 搜索
红果 真人剧、漫剧、AI 剧及分集 联网搜索与官网搜索联想
韩小圈 MacCMS 模板:最新韩剧 / 韩国电影 / 韩国综艺 / 韩国动漫,多线路分集 站源在线搜索
鬼片 MacCMS 站点:鬼片 / 电视剧 / 动漫,多线路分集 RSS 最新条目标题匹配(站点搜索已停用)
青空 番剧、剧场动画、特摄及分集 站源在线搜索
黄豆 列表、VIP 标记及分集 筛选已加载短剧
剧果 热门、最新、接口分类、详情及可播放分集;签名 Cookie 接入在线播放、预加载和下载 站源在线搜索,支持继续加载
野果 接口实际分类、目录、详情及真实分集;按分集重新取流,保留 H.264 / H.265 地址 站源在线分页搜索
帝果 网页分类、目录、详情及分集;vplayer 签名解析 站源在线分页搜索
黄果视频 / 黄果 AI / 黄果旧版 列表、分类、详情及分集 筛选已加载短剧

站源可用性、清晰度和区域限制取决于源站及网络;应用不解除源站 VIP 或其他授权限制。

网络与资源设置

管理员从「设置与备份 → 网络与资源」选择自动、直连或手动代理,手动地址支持 HTTP、HTTPS、SOCKS5 / SOCKS5h。代理地址默认遮蔽、不进入备份;设备内播放服务始终绕过代理。自动模式读取系统静态代理与排除列表,恢复前台及每 30 秒更新;代理不会关闭 TLS 校验。

目录请求并发可设 1–6、间隔 0–5000 毫秒(默认 3 / 250ms);下载并发默认 2、可设 1–6。仍保留前台优先、后台让行、取消、退避及请求数量边界。

局域网互联:追剧同步与推送播放(已接入,待验证)

两台设备在同一局域网直连,自动同步追剧记录或接续播放,不依赖账号服务器。服务类型 _zgj-link._tcp(DNS-SD / mDNS),按设备 ID 合并多网卡地址,首次配对记录证书指纹,后续连接固定校验。

入口:「追剧 → 标题栏同步」或「设置与备份 → 设备互联」。手动同步默认「双向合并」,可选覆盖对方 / 覆盖本机,先「查看预览」再执行;自动同步仅发送改动条目与删除标记,播放期间约每 10 秒发送进度。冲突记录保留候选,用户从同步页逐项处理。

安装包与平台状态

平台 包与状态
Android 8.0+ 三架构(arm64-v8a / armeabi-v7a / x86_64)APK;同一签名可覆盖升级
Android TV 与手机共用源码,自动识别电视模式并保持横屏;待电视 / 盒子实机验收
Windows / iOS 已移出本仓库,实现保留在冻结存档 dawei233/guoapp(含 0.2.x 全部版本与安装包)

INSTALL_FAILED_NO_MATCHING_ABIS 表示 APK 与设备架构不匹配,请更换对应架构安装包。

GitHub Actions

推送 main / master、v* 标签、提交 PR,或手动运行 Build app packages,会先检查再构建两版(默认与 --all-sources):

产物 内容
*-android 三种架构 APK 和 SHA256

推送 main 且 android 构建成功时,自动创建 / 更新 GitHub Release(tag app-v{version})。发布新版本前需先在 pubspec.yaml 提升 version,否则会覆盖同名 tag 的 Release。

Android 正式发布使用同一签名并递增构建号,在仓库 Secrets 配置:ANDROID_KEYSTORE_BASE64、ANDROID_KEYSTORE_PASSWORD、ANDROID_KEY_ALIAS、ANDROID_KEY_PASSWORD。未配置时生成 debug 签名预览包。

本地不入库的 android/key.properties:

storeFile=/absolute/path/zhenguojian-release.jks
storePassword=你的密码
keyAlias=zhenguojian
keyPassword=你的密码

开发与构建

Flutter 3.47.4、Dart 3.12+、Go 1.24.1+、Python 3.10+。Android 需要 JDK 17、SDK 36、NDK 28.2.13676358。

构建脚本对子进程默认设置 GOPROXY=https://goproxy.cn,direct、GOSUMDB=off,同名环境变量可覆盖。

python3 scripts/build_android.py                 # 红果鉴
python3 scripts/build_android.py --all-sources   # 真果鉴
python3 scripts/build_android.py --abi arm64-v8a
python3 scripts/build_android.py --cn-mirrors    # 国内镜像

产物在 dist/android,红果版以 hongguojian- 开头,全站源版以 zhenguojian- 开头。

首次 Android 调试先编译对应架构核心,再运行:

python3 scripts/build_native.py --platform android --abi arm64-v8a
flutter pub get --enforce-lockfile
flutter run

调试全站源版:先给 build_native.py 加 --all-sources,再 flutter run --dart-define=ALL_SOURCES=true。脚本会同步设置 Dart 常量和 Go 编译参数,应用启动时校验二者一致,避免混装原生库。

播放器使用 media_kit / libmpv,合并和导出使用 FFmpegKit min-gpl(含 GPL 媒体组件)。FFmpegKit 不参与正常播放或下载的转码。

集中检查与真机回归

python3 -m unittest discover -s scripts -p 'test_*.py'
dart format --output=none --set-exit-if-changed lib test integration_test test_driver
dart analyze --fatal-infos lib test integration_test test_driver
flutter test --dart-define=DISABLE_REMOTE_IMAGES=true
flutter test --dart-define=DISABLE_REMOTE_IMAGES=true --dart-define=ALL_SOURCES=true
cd native
go test -race ./...
go test -race -ldflags="-X duanjuapp/native/core.buildAllSources=true" ./...

Android 设备回归(连接并授权 USB 调试、保持解锁):

python3 scripts/create_test_media.py
python3 scripts/serve_test_media.py
adb reverse tcp:38473 tcp:38473
flutter drive --driver=test_driver/playback.dart --target=integration_test/playback_test.dart \
  --dart-define=DISABLE_REMOTE_IMAGES=true --dart-define=FIXTURE_BASE_URL=http://127.0.0.1:38473

结果在 build/device-test/results/;结束后停服务并 adb reverse --remove tcp:38473。

源码同步

python3 scripts/finish_task.py --message "本次实际完成的变更"
python3 scripts/sync_source.py --check

脚本只同步纯源码到同级 ../guoapp,并生成 真果·鉴-YYYYMMDDHHMM.zip 源码压缩包;不执行 Git 提交、分支或推送。

目录结构

目录 内容
lib 页面、播放器、本地用户、FFI、下载和媒体处理
native/core、native/bridge 独立站源核心、缓存、下载、目录迁移及 C ABI
android Android 平台工程与必要资源
scripts、.github/workflows 构建、签名、验证、同步和版本快照
test、integration_test 自动化与设备回归

站源开发约定

站源是 Go 原生 provider(native/core/provider_*.go),不是运行期加载的 Python 源。新增站源需接入:provider_huangguo.go(常量 / 白名单 / canonicalProviderSource / GetHuangguoChapters)、provider_media.go(baseURL / host 反查 / 播放分派)、app_categories.go、app_cover_metadata.go、app_runtime.go(Config 字段 + 目录 / 搜索 / 详情分派 + 空页放行),并在 lib/models.dart 登记 SourceSite。

注意:Go RE2 正则不支持 lookahead。解析多线路播放列表时不能用 (?=...) 做分段,否则非捕获组会消耗下一段开头;应改用显式字符串截断(从容器标记之后查找下一段标记)。

免责声明与使用须知

一、性质与用途

本软件为个人学习研究用途的二次开发作品,非商业产品,不提供任何形式的担保。 建议体验后 24 小时内自行删除;请勿冒充官方,或以"授权""官方版"等名义收费。 上述倡议不代表已获得各平台或版权方授权,也不构成免责承诺。

二、与平台的关系

本软件与红果、韩小圈、鬼片网等任何站源平台均无隶属、合作或授权关系。 不解除、不绕过任何平台的 VIP、付费或其他授权限制。

三、内容与版权

安装包不包含任何剧集媒体。所有视频、封面与元数据均来自第三方站点, 版权归原平台及创作者所有。开源许可只适用于软件,不授予剧集内容的再分发权。 请仅处理你有权访问、下载或备份的内容,遵守平台条款与相关法律。

四、可用性

站源接口为不可控的第三方依赖,随时可能调整或失效;某次验证通过不保证后续持续可用。 本软件不保证任何可用性,作者保留随时停止维护或删除仓库的权利。

五、责任

使用本软件所产生的一切后果由使用者自行承担,作者不承担任何责任。

六、许可与来源

  • 本仓库与全部上游来源均未声明许可证,本仓库不授予任何再分发或商业使用许可, 详见 NOTICE。
  • 产物中的 GPL 组件(FFmpegKit min-gpl 等)义务见 THIRD-PARTY-NOTICES.md。
  • 若你是来源链路中任一环的权利人并认为本仓库不妥,请通过 Issue 联系,本站将配合处理。

七、关于二次开发

本仓库是上游的 Android 拆分派生版,只维护 Android。欢迎学习参考,但请注意上述许可状态: 在未获得上游授权前,请勿将本项目用于任何商业用途或对外分发。

About

红果鉴 Android 版 · 上游 zhoufuweigg/guoapp 的 Android 拆分二开版,只维护 Android · 免责声明与来源声明见 README/NOTICE

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages