同一个链接,在某个引擎手里卡住,换一个可能就下动了,反过来也成立。YunGet 里放了四套下载实现,设置里可以随时换。这篇讲清楚四套各自是什么、什么时候该选谁,以及 Gopeed 的内核为什么要在应用里手动导入一次。
为什么不止一个引擎#
默认走 TurboDL。它是一套独立发布的下载 SDK(内置的是 0.2.0.6),做了多线程 Range 分片、断点续传、动态分段,HLS 交给插件处理,日常的 HTTP/HTTPS 直链基本都靠它。
但有些任务它压根做不了。磁力和 BT 跟 HTTP 直链不是一回事,得指望 Gopeed 的 Go 内核。项目早期自己写的那套下载器也留在代码里,删掉没什么好处,就当成兜底选项留着。aria2 平时用不着,主要拿来对照排查:某个链接在 TurboDL 里出问题,换成 aria2 试试,就能分清是链接本身有问题,还是引擎处理得不对。
所以设置里的引擎切换更像一个应急出口,而不是让你天天调参的地方。
四个引擎分别是什么#
| 引擎 | 实现 | 什么时候用 |
|---|---|---|
| TurboDL | TurboDownloadManager,架在 TurboBootstrap + TurboClient 上 | 默认选择,普通 HTTP/HTTPS 直链 |
| 内置兼容引擎 | LegacyDownloadManager + AdaptiveDownloadEngine | 兜底 |
| aria2 | APK 里自带的 libaria2c.so | 实验性,用来对照排查 |
| Gopeed | 跑在应用进程里的 Go 内核(gomobile 编译) | 磁力 / BT 这类任务 |
TurboDL 是默认引擎,代码里是 TurboDownloadManager,底下由 TurboBootstrap 启动、TurboClient 干活。普通 HTTP/HTTPS 直链、分片并发、断点续传、插件形式的 HLS 都归它管,还支持现场诊断(把连接状态一类的信息导出来看)。没有特别理由就别换。
内置兼容引擎在设置里显示为「内置下载器」,标着 Legacy,实现是 LegacyDownloadManager 加 AdaptiveDownloadEngine。它是项目早期的写法:固定开比较满的并发、4MB 一块、用工作窃取调度。有两点和 TurboDL 不一样——它没有现场诊断,也不持久化请求头,所以那些靠会话(cookie、鉴权头)才能下的链接,它接不住。
aria2 是实验性的。二进制就是 APK 里的 libaria2c.so,实际版本是 aria2-next 2.8.3,只有 arm64 设备可用。并发参数 -x 保守取 16,再往上容易触发网盘的风控,反而下不动。HTTPS 需要一份 CA bundle,应用会从系统证书目录自动拼好,不用你手动准备。
Gopeed 是跑在应用进程内的 Go 内核,用来做内置分片器做不到的事,比如磁力和 BT。它的内核不随 APK 分发,得你在「下载引擎」页里手动导入一次。
怎么切换#
设置分两层。第一层选「内置下载器」还是「Gopeed 引擎」;选了「内置下载器」之后,下面还有一层,再挑 TurboDL、内置兼容还是 aria2。
改完不会立刻生效,要重启应用——正在跑的任务底下的引擎被临时抽掉会出问题。重启之后,新引擎对之后建的任务生效。
有几个边界情况值得知道:
- 选了 Gopeed 但内核还没导入:本次任务会走内置路径,不会因为找不到内核就直接报错。
- 应用启动时发现设置里选着 Gopeed、而内核文件不在:会把设置改回「内置下载器」。
- 已经明确用了哪个引擎,建任务却失败:不会悄悄换一个引擎继续下。报错总比「换个下载器默默下完」容易排查。
Gopeed 内核怎么来#
内核包来自上游维护的公开构建仓库 CYQawa/yunx_gopeed_build 的 Release。应用按本机的 ABI 去匹配对应的 libgopeed-<abi>.aar,下载通道有三条:GitHub 直链、GitHub 加速镜像、网盘。Release 说明里带了 [网盘下载](链接) 的时候,应用会多给你一个「网盘更新」入口。
校验这件事得说清楚,别指望它有签名:
- 走 GitHub 通道,会比对 Release 资产里的 sha256。
- 走网盘通道,拿不到摘要,跳过 sha256 校验,只校验下载后的大小。
也就是说,网盘通道能保证的只有「文件大小对得上」,没有签名校验这一层。
解开之后内核装到 filesDir/gopeed/lib/libgojni.so,引擎数据放在 filesDir/gopeed/store 和 filesDir/gopeed/tmp,导入完成后临时包会删掉。运行期的 Gopeed 不监听任何 TCP 端口(apiEnable 是关的)。
HLS 的两条路#
用哪个引擎,决定了 HLS 走哪条路。
TurboDL 这边交给 turbo-plugin-hls 插件:解析 M3U8、分片并发,支持 AES-128 解密和 EXT-X-BYTERANGE。内置兼容引擎有自己的一套轻量实现,能力弱一些,AES 加密和 BYTERANGE 都不支持。
如果你下载加密的 HLS 失败,先看一眼当前用的是不是 TurboDL——默认就是它,正常情况下不用管这件事。
这里的 HLS 指的是下载能力,不是播放器。
并发口径#
TurboDL 单任务的上限能开到 256,应用把默认值和上限装配成了「连接数上限 16、诊断档位上限 64」。理由不复杂:网盘服务端普遍有风控,连接数拉满往往比 16 还慢。
还有一点,并发是上限而不是硬性目标。一个文件只切出 5 个可调度的分片时,实际并发就是 5,想再多也没有东西可下。