Kanade 脚本系统 (KSS) 是一个基于 QuickJS 引擎的扩展框架,允许开发者通过 JavaScript 编写插件来扩展媒体资源(如在线音乐平台、歌词库等)。KSS 的核心设计理念是逻辑解耦:应用负责 UI 与播放控制,脚本负责数据的抓取与解析。
- 扫描:应用启动或刷新时,
ScriptManager会扫描指定目录下的.js文件。 - 元数据提取:读取文件头部的 JSDoc 块,解析
ScriptManifestJSON 块。 - 初始化:脚本加载后会立即调用
init(config)函数,并注入当前用户的偏好设置。
为了优化性能和网络开销,KSS 采用延迟解析策略。脚本提供的 id 会被包装在 kanade:// 协议中,只有当歌曲即将进入播放队列时,才会调用 getMediaUrl 获取真实的流媒体地址。
脚本必须在全局作用域实现以下函数(支持 async 异步函数):
init(config): 初始化脚本。config为一个包含用户配置的 JS 对象。search(query, page): 搜索音乐。返回MusicItem[]。getHomeList(): 获取首页推荐列表。返回MusicItem[]。getMediaUrl(id): 解析可播放的流媒体 URL。返回StreamInfo。getLyrics(id)(可选): 获取歌词。返回原始歌词字符串(LRC/TTML)。
getMusicListByIds(ids): 批量获取音乐详情。返回MusicItem[]。getMusicDetail(id): 获取单个音乐详情。返回MusicItem。
{
id: "string", // 平台唯一标识
title: "string", // 歌曲标题
artist: "string", // 艺术家名(多个用逗号分隔)
album: "string?", // 专辑名(可选)
cover: "string?", // 封面图 URL(可选)
duration: number? // 时长(秒,可选)
}{
url: "string", // 播放地址
format: "string", // 格式 (如 "mp3", "flac")
headers: { // 播放请求所需的 HTTP 请求头
"User-Agent": "...",
"Referer": "..."
}
}脚本可以通过全局对象访问 Android 原生能力。
http.get(url, options)http.post(url, body, options)
options 字段说明:
headers:Object(请求头)responseType:"text"(默认) |"hex"(用于处理二进制数据)contentType:String(仅限 POST,如"application/json")
crypto.md5(text): 返回 MD5 哈希的十六进制字符串。crypto.aesEncrypt(text, key, mode, padding): AES 加密。crypto.aesDecrypt(hex, key, mode, padding): AES 解密。mode:"CBC","ECB"等。padding:"PKCS5Padding","NoPadding"等。
console.log/info/debug/warn/error(...args): 将日志输出至 Android Logcat (Tag:KanadeScript)。
- 沙箱环境:无
process,require,eval访问权限。 - 资源限制:
- 超时:单次函数执行不得超过 15 秒。
- 内存:每个脚本实例分配 64MB 堆内存。
- 网络隔离:默认仅允许 HTTPS 请求。