运行 CLI
将提供的 dexsql 可执行文件(Windows 为 dexsql.exe)放到 PATH 中的目录,或使用完整路径运行。以下示例使用 dexsql:
dexsql --version
dexsql --help
dexsql query --help
每个命令的 --help 列出可用参数。全局参数可以放在子命令前后。带 \ 续行的示例使用 POSIX shell;在 PowerShell 或命令提示符中请合并成一行。
命令
tables --input app.apk:显示内置表名、列和 SQL 类型。schema 固定;输入参数仅用于兼容,文件不会被读取。query --input app.apk --sql "...":一次性查询,默认只准备 SQL 所需数据;结果与--full相同。query --input app.apk --interactive:在同一个内存数据集上连续执行查询的交互会话。prepare-cache --input app.apk --output app.dexsql-cache:解析输入,在输出目录中写入cache.dxc2,用于重复查询。query-cache --cache-file app.dexsql-cache/cache.dxc2 --sql "...":查询持久缓存容器文件。decode --input app.apk --method 'Lcom/example/Foo;->bar(I)V':反汇编方法,详见 Smali 解码。mcp:通过 stdio 提供 MCP 工具和文档。客户端用open_dataset打开数据集,详见 MCP 配置。extract licenses --output THIRD_PARTY_NOTICES:导出构建时嵌入此程序的第三方版权及许可声明。省略--output时输出到 stdout,不覆盖已有文件;无需 APK、网络连接或源码目录。声明包含程序依赖及运行库,不包含构建依赖、过程宏、编译器和链接器。
参数
--threads N:工作线程数。0和默认值都使用全部可用逻辑 CPU。--full(仅query):准备完整元数据、方法引用和 opcode 数据,而非仅准备 SQL 所需数据;查询结果相同。交互模式始终准备完整数据,因而此参数无效。使用prepare-cache保存供后续进程使用的缓存。--cache NAME=SQL:为一个SELECT定义命名。在query --sql和query-cache中限于当前请求,在query --interactive中为 lazy 会话定义。--limit N:限制每条语句返回的行数,默认不限;不等同于执行工作量限制。--timing:向 stderr 输出加载、解析、数据准备、缓存和 SQL 耗时;交互模式逐次输出查询耗时。--trusted-input:仅适用于输入与缓存均受控的环境。它跳过部分校验,包括query-cache对源输入的严格新鲜度检查。默认关闭。
query 必须选择 --sql 或 --interactive。重复 --input 可组合多个 DEX/APK;不读取 DEX/APK 的 SQL 可以省略输入,例如 dexsql query --sql "SELECT 1"。每个 --sql 传一条语句;多个 --sql 按顺序执行,共享一次加载的数据:
dexsql query \
--input app.apk \
--sql "select count(*) as class_count from classes" \
--sql "select count(*) as method_count from class_methods"
交互模式至少需要一个 --input,并在查询之间保留内存中的 DEX/APK 数据。以分号或空行提交查询;.help 显示帮助,.exit、.quit 或 EOF 退出。--repl 是 --interactive 的别名:
dexsql query --input app.apk --interactive
交互模式下,CREATE VIEW、CREATE TEMP VIEW、CREATE TEMP TABLE 和 --cache 定义跨次提交保留。CREATE 在校验后替换现有定义;IF NOT EXISTS 保留原定义。DROP VIEW 或 DROP TABLE 删除定义。所有会话定义(包括 TEMP TABLE)都是 lazy 的,仅在查询需要时读取其行;会话关闭后定义消失。
命名关系可用于重复 join:
dexsql query \
--input app.apk \
--cache "refs_per_method=select file_id, method_idx, count(*) ref_count from method_refs group by file_id, method_idx" \
--sql "select m.descriptor, r.ref_count from methods m join refs_per_method r using (file_id, method_idx) order by r.ref_count desc limit 20"
输入文件
支持 DEX、APK、JAR、ZIP 路径,重复 --input 可组合多个输入。压缩包内的 classes*.dex 编号可以不连续;格式错误的 DEX 成员会被跳过,后续可读成员仍然保留。压缩包结构损坏或超过解压预算仍会返回错误,SQL 输入加载至少需要一个可读 DEX。
跨进程重复查询可使用持久缓存。按需反汇编方法见 Smali。
连接 AI 客户端
使用可执行文件的绝对路径配置本地 stdio MCP 连接:
{
"mcpServers": {
"dexsql": {
"command": "/absolute/path/to/dexsql",
"args": ["mcp"]
}
}
}
Windows 路径需遵循 JSON 转义,例如 "D:\\Tools\\dexsql.exe"。客户端负责启动进程,输入文件路径必须能被该进程访问。连接后的 AI 可查阅英文 MCP 参考。
Copyright (c) 2026 LSPosed Developers。本文档采用 MIT 许可证。