ElderTV 1.1.2:关掉安全拦截也搜不到片,原因在插件进程
- 1ElderTV 1.0.3:第三方源能用了,直播回来了
- 2ElderTV 1.1.0:py 和 js 站能用了,直播会记住坏线路
- 3ElderTV 1.1.2:关掉安全拦截也搜不到片,原因在插件进程本文
- 4ElderTV 1.1.3 和 1.1.4:一个插件崩掉整个进程,更新下载从每秒 20KB 到 1.3MB

1.1.1 加了“报告问题”和应用内更新,没有单独写文章。这一版的主要问题就是通过“报告问题”发现的:加载了饭太硬的订阅,也关掉了安全拦截,搜什么都没有结果。
这一版修了这个问题;把高级设置重新排成一屏,并把安全拦截的入口放到了设置页;确认框的按钮配色也改了;另外从这一版开始,同时发 32 位和 64 位两个安装包。
下面的截图都来自同一台雷鸟电视(Android 11,32 位)。
关掉安全拦截后,搜索还是没有结果
报告上来的日志里,只有搜索开始的记录,没有任何一个站返回结果,也没有报错。报告自动带上的错误是一条 JSONException。查下来,它来自开机后的更新检查:第一条中转线路连接超时 30 秒,返回空内容,解析时报的错,随后程序自动换了下一条线路。跟搜索无关。
真正的原因在插件进程,这个进程的日志不会进到“报告问题”的记录里。连上电视看系统日志,搜索那一刻插件进程连续报:
dlopen failed: couldn't map ".../cache/.ftyfnw2qy28qkli5" segment 1: Operation not permitted第一,这个订阅的每个站都要加载原生库。 饭太硬的插件包里,每个站的代码都套了一层“守卫”。守卫先加载插件包里自带的原生库(ftyguard_v7.so / ftyguard_v8.so),再用它解开真正的爬虫代码。原生库加载不了,每个站都返回空结果。
第二,插件进程本来就禁止加载原生代码。 1.0.3 起,插件在单独的进程里运行,进程启动时会加一层系统级限制:不能启动其他程序,不能映射可执行内存。加载原生库正需要映射可执行内存,所以被挡下了。
第三,安全拦截开关只管扫描,不管这层限制。 1.1.0 加的开关,关掉后只是插件不再经过扫描;进程这层限制始终都在。所以对这类订阅来说,开关开着关着结果一样。
改法:关掉安全拦截后,插件进程允许加载原生库。其余限制不变:仍然不能启动其他程序,不能给其他进程发信号,也不能读写其他进程的内存。这层限制在进程启动时加上,之后撤不掉,所以切换开关时会结束插件进程,下次使用时按新设置重新启动。
代价是:关掉安全拦截以后,插件里的原生代码能做的事更多,也更难检查。这一项只在你主动关闭安全拦截时生效,默认还是开着。关闭前的确认框里也写明了这一点。
改后同一个订阅、同一台电视,搜“蒸蒸日上”,第一个结果汇总了 44 个源:

另外,“报告问题”上传的记录现在会附上插件进程最近 200 条警告和错误(同样会去掉网址参数、IP 等信息),下次遇到这类问题,从报告里就能直接看到原因。
高级设置排成一屏
改前的高级设置分三列,第一列有 8 项,要往下翻才看得到最后几项。安全拦截的入口不在这一页,藏在“站点屏蔽”的弹窗底部。


现在分成四列:片源配置、片源管理、播放排查、维护,每列最多 5 项,一屏能看全。安全拦截放在“片源管理”里。每一项的当前设置写在名称下面,比如安全拦截下面写“关:全部放行”,直播来源下面写“只用直播地址”。

这一页在电视上改了两次才定下来:
- 第一次把当前设置放在名称右边,列窄了以后只剩“已…”“只…”,看不出是什么。后来改成放在名称下面。
- 格子高度一开始按 72dp 设计,这台电视上实际占了 144 像素,第 5 行超出了屏幕底部。现在改成 60dp。
点播地址和直播地址太长时,中间部分会被省略,只显示开头和结尾。要看完整地址,可以点进去看。
搜索为空时可以直接关闭安全拦截
搜索结束后没有结果,并且有站被安全拦截挡住时,结果那一行旁边会出现“关闭安全拦截”按钮,遥控器焦点会自动落在上面。点了先弹出风险确认,确认后会自动重新搜一遍。
这个按钮还没在电视上实际看到过:测试时安全拦截已经是关着的,这种情况下按钮不会出现。
确认框的按钮
以前确认框右边的按钮平时也是亮的,焦点停在“取消”上时,看起来像是右边那个被选中了。现在两个按钮平时一样暗,只有遥控器选中的那个变亮:


开始发 64 位安装包
有的电视是纯 64 位系统,装不了 32 位安装包。从这一版起,每次同时发两个包:
armeabi-v7a:32 位,大多数电视装这个就行arm64-v8a:64 位,装 32 位包提示“不兼容”时装这个
两个包签名相同,可以互相覆盖安装。应用内更新会按你装的那一种继续更新。64 位包还没在 64 位电视上装过,我手上这台雷鸟只支持 32 位。
这一版还带上了几项之前没发的改动
这几项在 1.1.1 之后就写好了,这次一起发出:
- 直播地址可以单独设置:设置里有“直播地址、直播来源、直播地址历史”三项。直播来源可选“只用直播地址”或“直播地址+点播”;没填直播地址时,照旧用点播配置里的直播。
- 扫码配置页:电视上的二维码以前打开的是上游页面的“弹幕”标签,现在打开新的配置页,点播和直播分开推送。
- 网页控制台改版:分成总览、点播、直播、设置四页,手机上也能用。聚合直播会把各个列表按频道名合成一张表,可以只保留精选的频道,也可以调整顺序和分组。
这几项在模拟数据下走通过,电视上的设置项和扫码页也用过;合成频道表和精选频道还没在真实订阅下完整测过,见下面的表。
剩余问题和进度
| 问题 | 现状 | 下一步 |
|---|---|---|
| 64 位安装包 | 只确认了构建、签名和架构,没在 64 位电视上装过 | 找一台 64 位电视或盒子实装 |
| 从 1.1.1 应用内更新到 1.1.2 | 第一次真正走这条路;雷鸟的系统安装器会不会拦截还不知道 | 在电视上从 1.1.1 实际更新一次 |
| 聚合直播合成频道表、精选频道 | 模拟数据下走通;真实订阅下的频道数、内存和耗时还没有数据 | 用真实订阅跑一次,记录耗时和频道数 |
| 斗鱼、虎牙两个 js 站打不开 | 报 'pdfh' is not defined,是 js 运行环境缺函数 | 补上这个函数后再测 |
| 搜索为空时的“关闭安全拦截”按钮 | 已实现,电视上没触发过 | 开着安全拦截搜一次被拦的站 |
| “报告问题”自动带上的错误不准 | 现在取的是记录里最后一个异常,常是后台的无关报错(比如这次的更新检查超时) | 只在闪退时附带异常,其余时候不附带 |
| gh-proxy.com 上的 32 位更新清单还是旧版 | 中转站缓存了 1.1.1 的清单;应用会先走 ghfast,影响不大 | 等缓存过期后再核对一次 |
下载
最低要求:安卓 7.0(Android 7.0)及以上。大多数电视和盒子都满足,安卓 7.0 以下的老设备装不上。
复制到浏览器打开,前两个是中转地址,国内一般能直接下。
32 位(大多数电视装这个,约 99MB):
64 位(装 32 位提示不兼容时用,约 114MB):
GitHub 原地址: https://github.com/riowang88/ElderTV/releases/tag/v1.1.2
中转站是第三方的,不归我管,一条打不开就换另一条。
装法:
- 下载 APK,拷到 U 盘,插到电视上
- 用电视的文件管理器打开,提示未知来源就去设置里允许
- 装好后在“设置 → 高级设置 → 点播地址”填片源地址,或者打开聚合
已经装了 1.1.1 的,开机后首页右上角会显示“有新版本”,点它就能在应用里更新;也可以直接覆盖安装。更早的版本直接覆盖安装。观看记录都会保留。
ElderTV 不内置任何片源,地址需要自己填。
ElderTV 按 GPL-3.0 发布,对应的源码压缩包在 GitHub 原地址的 Release 页面里。
到目前为止,ElderTV 只在这一台雷鸟电视上测试过。其他电视能不能正常用,还没有数据。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!












