把免费无广告的 NewTube 刷不出新视频这事用一个补丁解决了,安卓基友请享用!
-
不想用官方YouTube会员的朋友应该对电视的SmarTube和 手机的NewTube(SmartTube 的手机分支)有刚需,而这个手机版NewTube有个很闹心的毛病:下拉刷新,出来的还是刚才那几条视频,越刷越烦。
查下来原因不在客户端缓存,而在未登录时 InnerTube 给的 browse 接口本身就是几个固定 topic feed 轮播:实测 FEtopics_music 23 张里重复 19 张、FEtopics_news 16 张里重复 11 张、FEtopics_gaming 50 张里重复 47 张,整体重复率 73% 到 94%。所以多刷新、多拉几页是没用的,服务端压根没给你新东西。

一、思路
不改服务端,也不指望接口开恩。逻辑只有一条:今天已经给你看过的,就别再给你看第二遍。
二、改了哪些地方
基线是上游 1.17.1(commit 6f96a1b),主仓 10 个文件,477 行增、6 行删:
RecentHomeCards + HomeFeedData:记住今天首页出现过的视频 id,上限 1500 个,24 小时后自动过期
VideoGroup:只在 Home 和相关推荐这两个位置丢掉看过的,播放页、订阅、搜索完全不受影响
每次刷新最多丢 40 张,避免整屏被丢空
BrowsePresenter:首页缓存从 5 分钟缩到 60 秒;ShelfTail 原来一轮加不够规定张数就直接收工,现在允许再试 3 轮
子模块 MediaServiceCore:匿名判定缓存从 30 分钟缩到 5 分钟,几个 topic 轮换着发核心逻辑就这两行:
if (freshHomeCard && recent.shouldDrop(video.videoId)) return; // 看过的直接不要 if (freshHomeCard) recent.record(video.videoId); // 留下来的记下来三、效果
同一个首页连刷四次,看前 12 张里真正新增了几张:原版是 12、2、1、0,打完补丁是 12、12、12、12。四次抓取总共能拿到的不同卡片只有 155 张,也就是说原版从第二次刷新起就在反复嚼同一批。
四、开关在哪
Settings -> Tabs and feeds -> Show new videos on Home,默认开着,关掉就是原版行为。
五、说明
未登录才是重灾区。登录状态下首页有多粘我没能复现出来(匿名接口返回首页是 0 张视频加一个引导卡片),所以这套改动对不登录使用的场景收益最大。搜索、订阅、播放页相关推荐的排序都没动,chip 分类那一套也没碰。
APK 是 debug 版,包名带 .debug,可以和商店版并存,不用先卸载;架构 arm64-v8a,很老的 32 位机器装不上。SHA-256:c3cdb11ef99021db85a69ec3900528fcba583ade3e79857a43675d7c11e480de
个人的 repo,欢迎指教
fork 的原仓库(补丁在 main,一个 commit 9c862ef6)
https://github.com/halonc/NewTuber
APK 下载页
https://github.com/halonc/NewTuber/releases/tag/v1.17.1-fresh-home
子模块也 fork 了(GitHub 的 fork 不带子模块内容,不 fork 编译不过)
https://github.com/halonc/MediaServiceCore