Qualcomm ADK Plugins
高通 ADK 开发专属 Claude Code 插件市场,为 Qualcomm ADK (Audio Development Kit) 项目提供智能代码分析与重构能力。
插件列表
x2p-compdb-parser (v2.0.0)
自动解析高通 .x2p 工程文件,具备项目扫描、交互式配置提取,并为 Serena/clangd 生成极简配置的智能跨平台插件。
核心功能:
- 项目扫描 (
scan_adk_projects) - 自动扫描 ADK 根目录,列出所有可用 .x2p 项目
- 配置提取 (
get_x2p_configs) - 解析 .x2p 文件,获取所有可用配置名称(如 TRAN03H)
- 智能缓存 - 内置极速缓存校验机制,仅在工程文件变更时重新生成
- 自动忽略 - 自动将生成的配置文件加入 .gitignore
- 环境变量支持 - 支持通过 ADK_ACTIVE_X2P、ADK_ACTIVE_CONFIG 环境变量配置
- 极简配置 - 生成极简版 compile_commands.json,消除冗余
- 动态隔离 - 智能屏蔽无关 ADK 子项目,避免符号污染
快速开始
前置要求
- Claude Code
- Python 3.10+
uv 包管理器
安装
本插件支持两种安装方式:
方式一:通过插件市场安装(推荐)
如果您的 Claude Code 已配置插件市场,可以直接从市场安装:
- 在 Claude Code 中运行命令添加插件源:
# 克隆仓库
git clone https://github.com/hyfhot/qualcomm-adk-plugins.git
cd qualcomm-adk-plugins
- 将插件配置路径添加到 Claude Code 设置中:
- 打开 Claude Code 设置
- 找到「插件/Plugins」配置项
- 添加插件目录路径:
./qualcomm-adk-plugins/plugins/x2p-parser
方式二:手动安装
- 克隆仓库:
git clone https://github.com/hyfhot/qualcomm-adk-plugins.git
cd qualcomm-adk-plugins
- 复制插件目录到 Claude Code 插件目录:
# 方式A:将整个仓库作为插件源
# 在 Claude Code 设置中添加: ./qualcomm-adk-plugins/plugins/x2p-parser
cp -r plugins/x2p-parser ~/.claude/plugins/x2p-parser
插件启用
插件安装后,需要在 Claude Code 中启用:
-
重启 Claude Code:安装新插件后需要重启使配置生效
-
验证插件状态:
# 检查插件是否加载成功
# 在 Claude Code 中输入:
/plugins list
- MCP 服务自动启动:
- 插件包含
.mcp.json 配置文件
- Claude Code 启动时会自动运行
uv run --with mcp x2p_compdb_mcp.py
- MCP 服务启动后,您可以使用
generate_clangd_config 工具
插件禁用
如需临时禁用插件,有以下几种方式:
方式一:修改插件设置
- 打开 Claude Code 设置
- 找到「插件/Plugins」配置项
- 移除或注释掉插件路径:
// 注释掉或删除此行
// "./qualcomm-adk-plugins/plugins/x2p-parser"
方式二:重命名插件目录
# 在插件目录名后添加 .disabled 后缀
mv ~/.claude/plugins/x2p-parser ~/.claude/plugins/x2p-parser.disabled
方式三:删除 MCP 配置
直接删除或重命名 .mcp.json 文件:
mv ~/.claude/plugins/x2p-parser/.mcp.json ~/.claude/plugins/x2p-parser/.mcp.json.disabled
注意:禁用后需要重启 Claude Code 才能生效。
插件卸载
完全卸载插件的步骤:
- 删除插件目录:
rm -rf ~/.claude/plugins/x2p-parser
# 或删除整个仓库
rm -rf qualcomm-adk-plugins
- 清理生成的配置文件(可选):
# 如果之前运行过插件,会在 ADK 项目目录下生成以下文件
# 这些文件可以手动删除
rm -f /path/to/adk/project/.clangd
rm -f /path/to/adk/project/compile_commands.json
- 重启 Claude Code:
卸载后需要重启 Claude Code 使更改生效。
使用教程
方式一:直接调用 MCP 工具
插件提供三个 MCP 工具:
1. scan_adk_projects - 扫描项目
扫描 ADK 根目录,返回所有可用的 .x2p 项目文件路径。
root_dir = "/path/to/adk/root"
2. get_x2p_configs - 获取配置
解析指定的 .x2p 文件,返回所有可用的配置名称。
x2p_file_path = "/path/to/project.x2p"
3. generate_clangd_config - 生成配置(核心)
解析 x2p 生成 compile_commands.json 和 .clangd,并隔离无关子项目。
# 方式A:直接传参
x2p_file_path = "/path/to/project.x2p"
output_dir = "/path/to/adk/root"
config_name = None # 使用默认配置
# 方式B:通过环境变量(推荐)
# 设置环境变量后无需传参
# ADK_ACTIVE_X2P=/path/to/project.x2p
# ADK_ROOT_DIR=/path/to/adk/root
# ADK_ACTIVE_CONFIG=TRAN03H
参数说明:
x2p_file_path:.x2p 工程文件的绝对路径(支持环境变量 ADK_ACTIVE_X2P)
output_dir:ADK 项目根目录的绝对路径(支持环境变量 ADK_ROOT_DIR)
config_name:配置名称(支持环境变量 ADK_ACTIVE_CONFIG)
方式二:使用工作流技能
当分析 ADK C/C++ 代码时,工作流会自动:
- 项目指纹确认 - 快速检测是否为高通 ADK 项目
- 跨平台路径处理 - WSL/Windows 路径转换
- 交互式选择 - 扫描并让用户选择目标项目和配置
- 环境同步 - 调用解析工具生成配置(含智能缓存)
- 符号解析 - 调用 Serena 进行深度代码分析
触发条件:当用户要求分析、阅读、重构 C/C++ 代码,且项目包含 adk/、application_common/ 等高通特征目录时自动触发。
生成内容详解
工作原理
本插件采用分层架构 + 智能缓存解决 ADK 项目代码分析的难题:
1. 极简 compile_commands.json
传统方式会将所有宏和头文件路径写入每条编译命令,导致文件体积庞大(通常 10MB+)。本插件采用分层架构:
compile_commands.json:仅包含文件列表,无冗余
.clangd:全局注入宏定义和头文件路径
优化效果:
- 文件体积减少 95%+
- clangd 启动速度提升 10 倍+
2. 智能缓存机制
插件内置极速缓存校验:
- 首次生成后创建
.x2p_parser_cache.json 缓存文件
- 再次调用时自动检测 x2p 文件的修改时间 (mtime)
- 若文件未变更,直接返回 "缓存命中",跳过生成步骤
- 确保每次分析前环境同步,同时避免重复计算
3. 自动 .gitignore 管理
插件自动将生成的配置文件加入 .gitignore:
.clangd
compile_commands.json
.x2p_parser_cache.json
2. 动态 .clangd 配置
插件会解析 .x2p 文件,提取以下信息:
- DEFS:宏定义(如
-DDEBUG=1)
- INCPATHS:头文件搜索路径
- 源文件列表:需要分析的
.c / .cpp 文件
然后生成 .clangd 文件:
CompileFlags:
Add:
- "-xc"
- "-std=c11"
- "-Wall"
- "-DDEBUG=1" # 从 DEFS 提取
- "-D__ADK__" # 从 DEFS 提取
- "-I/path/to/include" # 从 INCPATHS 提取
- ...
Index:
Background:
Skip:
- "^earbuds/.*" # 智能屏蔽无关项目
- "^headset/.*" # 动态计算排除名单
3. 智能目录隔离
ADK 是庞大的 Monorepo,包含 headset、earbuds、speakers 等多个子项目。通过分析源文件与 INCPATHS 的关系,动态生成 Skip 正则表达式:
- 自动检测哪些子项目被当前
.x2p 使用
- 屏蔽未使用的项目避免符号冲突
- 支持 topologies 目录深度隔离
算法流程:
1. 遍历 ADK 根目录下所有顶层目录
2. 检查目录是否包含源文件(在 compile_commands.json 中)
3. 检查目录是否在 INCPATHS 中
4. 如果既不含源文件也不在包含路径中 → 加入 Skip 列表
5. 特别处理 adk/src/topologies 目录进行深度隔离
输出示例