dexsql 文档 打开应用

命令行使用

Markdown 源文件 · dexsql app

运行 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 许可证。