云取 YunGet

插件

云取的插件是一段 JavaScript:不用编译、不用打包 APK —— 写一个 .js 文件,装进应用,启用,它就开始工作。它负责认出链接、算出真正的下载地址、拼请求头、算签名,以及任务结束后做点收尾的事。

插件市场在应用里:设置 → 插件市场。那一页管「哪里能拿到插件」——加源、看源里有什么、从源里装、检查更新;旁边那一行 设置 → 插件 管「本机装了什么」——启停、看运行状态、卸载。

插件不经手下载数据流

这一条是刻意的边界,不是还没做完:插件只在下载任务开始之前和结束之后参与。没有流式 API,没有 body 句柄,没有「每收到一块数据调一次」的回调;插件也不能注册下载后端(试着注册会直接返回 unsupported)。

分片与字节面留在 Kotlin 里,脚本就永远不会站在数据路径上。否则一个写得不好的插件(或者干脆是恶意的)会变成整条下载链路的带宽瓶颈 —— 而且每个数据块都要跨一次 JS 边界,代价比下载本身还大。所以插件的定位是「算 URL / 拼头 / 签名 / 解析分享链接」,不是「自己实现一个下载器」。

认链接、算下载地址

注册解析器:把一个分享链接变成一条或多条可下载的请求。

改提交前的任务

提交前钩子:拼请求头、算签名、改写这次请求。

任务结束后收尾

结束后钩子:记日志、清理临时转存这类只观察的事。

分片视图16 片 · 9 片已完成

块数约为连接数的四倍:慢连接不会独占最后剩下的那点工作

官方插件源

官方源就是 YunGet-Plugins 这个仓库:一份 JSON 索引 + 插件源码 + 公钥,没有服务器、没有后台。App 拉的是它根目录下的 plugins.json。本页的条目直接从那份索引里读出来渲染,当前源里有 2 个插件。

源自称等级签名 keyId验签算法 / 载荷
云取官方插件源
official
officialofficial-2026ed25519 / raw-script-bytes
这个源里有什么plugins.json
源身份云取官方插件源
信任等级official
插件数2 个
索引生成时间2026-10-14
索引地址https://raw.githubusercontent.com/jiayuxuan123/YunGet-Plugins/main/plugins.json
公钥随应用内置(判定 official 的两个条件之一)

本节的所有数字都是从那份索引文件里读的,不是手抄的

支持页

官方支持入口

官方支持入口:赞赏方式与项目链接(P7 支持页插件化的第一个真实用例)

v1.0.0JS 插件支持页作者:YunGet许可:MIT源自称等级:official

最低宿主版本 2.7.5。签名验证通过:keyId=official-2026、sha256=a618df18647c7b3e…。签名覆盖脚本原始字节,任何改动都会让校验失败并拒绝安装。签名只回答「内容有没有被改过、是不是这把钥匙发的」,不回答「作者写得好不好」。首次发布:说明文字 + 微信赞赏码(远程图片)+ 项目主页链接。

源码 · 清单 · 脚本

链接解析

Example Cloud Parser

示例插件:example:// 链接 → 一条 https 下载请求(含权限声明、文件名清洗、签名样例)

v1.0.0JS 插件链接解析example://作者:YunGet许可:MIT源自称等级:official

申请的能力:http、crypto —— 装之前请看清楚,http 意味着它能把你的链接发出去。最低宿主版本 2.6.22。签名验证通过:keyId=official-2026、sha256=b1aa85197621be29…。签名覆盖脚本原始字节,任何改动都会让校验失败并拒绝安装。签名只回答「内容有没有被改过、是不是这把钥匙发的」,不回答「作者写得好不好」。首次发布:example:// 链接解析、文件名清洗、stableKey 去重、可选 ?resolve=1 直链解析。

源码 · 清单 · 脚本

怎么装

方式一:在应用里从市场装(推荐)

  1. 云取 → 设置 → 插件市场;
  2. 加一个源:添加源 → 填索引地址 → 选信任等级 → 点「只添加源」。官方源的索引地址是 https://raw.githubusercontent.com/jiayuxuan123/YunGet-Plugins/main/plugins.json;
  3. 源会列出它里面有哪些插件,点进某个插件看权限与信任等级;
  4. 点「安装」—— 装之前会弹一次权限确认,确认之前不下载;
  5. 装完默认就是启用状态,在 设置 → 插件 里能看到它注册了什么、占多少内存。
加源与装插件是两个独立动作:添加源只登记地址、拉取索引,绝不顺手把里面的插件装进来。这样「我从哪拿到这个脚本的」永远是你主动做过的决定,而不是加源时的副作用。

方式二:手动导入一个 .js 文件

  1. 从插件的源码地址下载那个 .js 文件;
  2. 云取 → 设置 → 插件 → 底部 从文件导入,选中它;
  3. 也可以直接 粘贴脚本:粘贴时先点「校验」——校验只解析、不执行,会告诉你它会注册什么、声明了哪些能力。
手动导入的脚本没有签名可验,在插件列表里一律标「未验证」(错误色 + 风险提示)。这不是 bug:没有签名就没有「内容与发布者一致」这条证据。

能力级别:手机上只有一档

插件还有能力级别这一维。它回答的是「这东西能碰到多大范围的能力」以及「改了要不要重启 App」。云取曾经规划过两档:沙箱里的 JS(L1)与宿主进程内的原生代码(L2)。Android 端现在只保留 JS 一档——原生插件在手机端暂时停用,后续出 Windows 版时在 Windows 端启用。

级别运行位置能做什么生效时机
JS 插件
level: "js"
应用内的 JS 沙箱,进程内网盘登录 / 解析 / 取直链、网页与 API 调用、规则与轻逻辑可热加载,装上或更新后立即生效
原生插件(手机端暂时停用)
level: "native"
宿主进程内,Kotlin/JVM 原生代码曾经用来承载新的下载后端、Adapter 与文件 Handler手机端不生效:条目会被拒绝,并说明原因;计划在 Windows 端启用
为什么手机上先停用原生插件:Android 10 起系统禁止加载应用可写目录里的 dex(换到缓存目录也一样被拒),限制一代比一代严;而且首批四个原生网盘插件实际上只是把工作转回宿主既有实现,从没提供过宿主做不到的能力。与其留着一个装不上、或装上也不多给任何东西的档位,不如先在手机上把这一档收起来,等 Windows 端那边不受这条限制时再启用。

索引里没写 level 的存量条目一律按 JS 读;条目写着 native 时,应用会拒绝安装它,并给出「原生插件在手机端暂时停用,后续 Windows 版将启用」这句明确说明 —— 而不是含糊地提示去升级应用。

信任等级:四级都能装,差别在提醒

等级说的是「这个源 / 这个插件的身份可信到什么程度」,四级都能装,差别在界面上怎么显示、低等级时有没有醒目提示。

等级什么情况下给界面怎么显示能装吗
官方
official
源的身份是官方,且签名公钥随应用内置主色实心徽标,标「官方」能
已验证
verified
用户主动添加的源,条目带签名,公钥由该源自带(有签名,但发布者身份靠源自己声明)次级样式容器,标「已验证」能
社区
community
用户主动添加的源,条目带签名但公钥来自网络中性样式,标「社区」能
未验证
untrusted
没有签名,或公钥拿不到(含从文件 / 粘贴导入的脚本)错误色系,标「未验证」+ 明确风险提示能
四级各自的判据越往下越依赖你自己判断
官方(official)源的身份是官方,<strong>且</strong>签名公钥随应用内置
已验证(verified)用户主动添加的源,条目带签名,公钥由该源自带(有签名,但发布者身份靠源自己声明)
社区(community)用户主动添加的源,条目带签名但公钥来自网络
未验证(untrusted)没有签名,或公钥拿不到(含从文件 / 粘贴导入的脚本)

官方 = 源是官方 且 公钥随应用内置;其余等级只有签名,发布者身份靠源自己声明

插件市场按分类筛选
网盘解析4 个
下载后端1 个
其它2 个

分类来自插件清单,不是客户端写死的

一份插件清单要填什么turbodl-plugin.json
id唯一标识,如 parser.example
name / version显示名与版本(semver,升版本才能推更新)
categoryturbodl-parser / turbodl-hook / turbodl-loader …
capabilities声明要用到的能力(用户会在安装前看到)
protocols认哪些 scheme / 域名
entry脚本入口(本地文件或 inline)

实际授予 = 声明 ∩ 加载器上限 ∩ 用户已确认 —— 没有任何 API 能改它

哪些是插件、哪些是内置分界线
内置夸克 / UC / 迅雷 / 百度 / 139 / 123 / 115 / 光鸭 / 蓝奏云的解析
内置分片下载(TurboDL 引擎)· 任务管理 · 界面
插件其余站点与网盘:装一个,认一种链接
插件额外的钩子 / 别的语言写的插件
不可能是插件下载数据流与字节面(留在 Kotlin 一侧)

所以「网盘接口变了要等应用更新」这件事,对内置的那几个成立、对插件不成立

两条不肯让步的规则:

签名有效只证明脚本内容与某个密钥持有者发布的一致,不证明它安全。它不证明作者是好人、脚本没有恶意行为、没有 bug、不会把你的数据发出去,也不证明它声明的权限是「必要的」而不是「能拿就拿」。同样地,官方源收录不等于绝对安全 —— 官方源的意义是「这个插件经过人工看过、来源明确、出问题能找到负责人」,不是「你可以不看权限就装」。

另外两条实情:用户为该源选的等级优先于索引自称的等级(索引自称高于用户所给时取用户的),所以 fork 一份索引把 trustLevel 改成 official 没有用;自建源被添加时默认就是 community,不是「已验证」。完整的校验链、以及这份机制不做的那些承诺,写在插件安全模型里。

开发自己的插件

插件 API 是一套稳定 ABI:注册解析器与钩子、发 HTTP 请求、算摘要与 HMAC、读写自己的小存储、打日志、用定时器。所有函数、参数与上限都有文档,官方源里那个示例插件就是可以直接照着改的模板。

插件源仓库

官方源在 GitHub 上:https://github.com/jiayuxuan123/YunGet-Plugins。里面有索引、每个插件的源码与清单、公钥,以及签名工具 tools/sign_plugin.py(零依赖可用)。想提插件就 fork 它、提 PR;想自建一个源,也只需要一个能通过 https 访问的静态目录。