dexclub-cli 是一个面向 dex / apk / Android 资源 的 Kotlin 多模块项目。
它当前同时提供:
- 一套围绕工作区的 CLI,用来做 dex 查询、方法检查、代码导出以及 Android 资源解析
- 一套面向 AI/agent 的 MCP server,用来把同一批能力以工具调用方式暴露给上层编排
当前仓库包含四个核心模块:
cli命令行入口,负责参数解析、命令分发、结果渲染与退出码core稳定能力边界,负责 workspace、dex 查询/导出、resource 解析dexkit面向 KMP 的 DexKit 包装层mcpHTTP MCP server,负责把core能力暴露成 AI 可调用工具面
- 初始化并管理
.dexclub工作区 - 在同一工作区内列出并切换 active target
- 输出工作区状态与 active target 摘要
- 按 JSON 条件查找类、方法、字段
- 按字符串批量条件查找类和方法
- 查看单个方法的一层关系详情
- 导出单类 dex、smali、Java
- 导出单方法 dex、smali、Java
- 解析
AndroidManifest.xml - 读取
resources.arsc - 解码二进制 XML
- 列出、解析、搜索资源条目
- 通过 MCP 暴露 target session、dex 查询、方法检查、代码导出、manifest 与资源相关工具
cli/当前命令行模块core/当前能力库模块dexkit/KMP DexKit 包装层mcp/MCP server 模块skills/仓库内维护的 Codex skill 副本dexkit/vendor/DexKit/vendored 上游 DexKitdexkit/vendor/libcxx-prefab/Android 构建链依赖的本地libcxxprefab 仓库.docs/v3/命令面、对象模型、执行流与存储结构设计文档
开发和本地构建默认要求:
- JDK 21
- Android SDK
- Android NDK
28.2.13676358 cmakeninja
说明:
- Android SDK / NDK 主要服务于 DexKit native 构建和测试样本生成
core的资源命令运行时不要求额外安装 Android SDK- 桌面端 DexKit 运行前提可参考上游文档: DexKit 桌面端运行说明
首次拉取后先初始化 submodule:
git submodule update --init --recursive如果本地还没有发布 libcxx,先执行:
cd dexkit/vendor/libcxx-prefab
./gradlew :cxx:publishToMavenLocal编译 dexkit:
./gradlew :dexkit:compileKotlinJvm
./gradlew :dexkit:assembleAndroidMain编译 core / cli / mcp:
./gradlew :core:compileKotlinJvm :cli:compileKotlin :mcp:compileKotlin运行测试:
./gradlew :core:jvmTest
./gradlew :cli:test
./gradlew :mcp:test打包 fat jar:
./gradlew :cli:fatJar生成带启动脚本的分发目录与 zip:
./gradlew :cli:installShadowDist :cli:shadowDistZip生成 MCP 分发目录:
./gradlew :mcp:installDistfat jar 入口:
java -jar cli/build/libs/dexclub-cli-all.jar <command> [args]Windows PowerShell 下推荐优先使用分发脚本:
& .\cli\build\install\cli-shadow\bin\cli.ps1 <command> [args]查看帮助:
java -jar cli/build/libs/dexclub-cli-all.jar --help
java -jar cli/build/libs/dexclub-cli-all.jar help
java -jar cli/build/libs/dexclub-cli-all.jar help find-methodWindows PowerShell 如果要传复杂 --query-json,优先使用:
& .\cli\build\install\cli-shadow\bin\cli.ps1 find-class E:\path\to\workdir --query-json '{"matcher":{"className":{"value":"Sample","matchType":"Contains","ignoreCase":true}}}'说明:
cli.ps1会比cli.bat更稳定地保留 PowerShell 参数边界- 对复杂 JSON 查询,也可以优先使用
--query-file
DexKit native 运行提示:
- fat jar 分发场景下,通常只需把 DexKit native 动态库放在
dexclub-cli-all.jar同目录 - 如果不是通过 fat jar 运行,则可以通过 native 文件路径或 native 目录显式指定,也可以通过环境变量传入,或确保其位于
java.library.path可见范围内
当前 mcp 模块提供一个基于 HTTP 的 MCP server,默认监听:
host = 127.0.0.1port = 8787path = /mcp
Windows PowerShell:
$env:DEXCLUB_MCP_PORT="8787"
.\mcp\build\install\mcp\bin\mcp.bat运行参数可通过环境变量调整:
DEXCLUB_MCP_HOSTDEXCLUB_MCP_PORTDEXCLUB_MCP_PATHDEXCLUB_MCP_TRACE
说明:
mcp是面向 Codex / agent 的工具服务,不是交互式 CLI- 终端默认保留最小运行日志(启动、tool failure、未捕获异常、shutdown)
- 详细轨迹默认写入
logs/mcp.log;每次启动会先把旧的mcp.log归档到logs/archive/mcp_<启动时间>.log,可通过DEXCLUB_MCP_TRACE=false显式关闭 mcp默认依赖 DexKit native 动态库位于分发目录的lib/下
仓库当前也维护面向 Codex 的 skill 副本,位于:
skills/
当前主要 skill:
dexclub-analysis通过mcp__dexclub__驱动 APK / Dex / manifest / resources 分析
说明:
- 仓库内
skills/是版本化源码,不一定会被当前机器上的 Codex 自动发现 - 如果需要在本机 Codex 中实际触发,通常还需要同步到
$CODEX_HOME/skills - 具体说明见 skills/README.md
当前命令面遵循两条规则:
init必须显式传入单文件输入路径- 其余命令统一在已初始化工作区上执行,
[workdir]可省略;省略时默认使用当前目录
当前工作区允许存在多个已初始化 target,但任意时刻只有一个 active target:
init <input>:为该输入创建或刷新 target,并将其设为当前 active targetswitch <input>:只在当前工作区内切换到已经初始化过的 target,不创建新 targettargets:列出当前工作区已有 target,并标出当前 active target
受管工作区固定写入:
<workdir>/.dexclub/
初始化工作区:
java -jar cli/build/libs/dexclub-cli-all.jar init /path/to/app.apk
java -jar cli/build/libs/dexclub-cli-all.jar init /path/to/classes.dex
java -jar cli/build/libs/dexclub-cli-all.jar init /path/to/AndroidManifest.xml查看工作区状态:
java -jar cli/build/libs/dexclub-cli-all.jar status /path/to/workdir
java -jar cli/build/libs/dexclub-cli-all.jar inspect /path/to/workdir --json
java -jar cli/build/libs/dexclub-cli-all.jar gc /path/to/workdir切换和列出 target:
java -jar cli/build/libs/dexclub-cli-all.jar switch a.apk
java -jar cli/build/libs/dexclub-cli-all.jar targets /path/to/workdir
java -jar cli/build/libs/dexclub-cli-all.jar targets /path/to/workdir --jsonDex 查询:
java -jar cli/build/libs/dexclub-cli-all.jar find-class /path/to/workdir \
--query-json '{"matcher":{"className":{"value":"Sample","matchType":"Contains","ignoreCase":true}}}' \
--jsonjava -jar cli/build/libs/dexclub-cli-all.jar find-method-using-strings /path/to/workdir \
--query-file /path/to/query.json方法详情:
java -jar cli/build/libs/dexclub-cli-all.jar inspect-method /path/to/workdir \
--descriptor 'Lcom/example/Sample;->name()Ljava/lang/String;' \
--json代码导出:
java -jar cli/build/libs/dexclub-cli-all.jar export-class-smali /path/to/workdir \
--class Lcom/example/Sample; \
--output /tmp/Sample.smalijava -jar cli/build/libs/dexclub-cli-all.jar export-method-smali /path/to/workdir \
--method 'Lcom/example/Sample;->name()Ljava/lang/String;' \
--output /tmp/Sample_method.smali资源命令:
java -jar cli/build/libs/dexclub-cli-all.jar manifest /path/to/workdir
java -jar cli/build/libs/dexclub-cli-all.jar res-table /path/to/workdir --json
java -jar cli/build/libs/dexclub-cli-all.jar decode-xml /path/to/workdir --path res/layout/activity_main.xml
java -jar cli/build/libs/dexclub-cli-all.jar get-res-value /path/to/workdir --id 0x7f0a0001仓库当前提供:
- .github/workflows/build-native.yml
- .github/workflows/build-cli.yml
- .github/workflows/build-mcp.yml
- .github/workflows/build-packages.yml
职责划分如下:
build-native.yml构建 DexKit native 产物build-cli.yml消费 native 产物并打包 CLI 分发物build-mcp.yml消费 native 产物并打包 MCP 分发物build-packages.yml统一驱动 native、CLI、MCP 构建,并在 tag 下统一上传 release 附件
GNU General Public License v3.0
Copyright (C) 2024 Gang
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.