Android Studio + VSCode + Vim 工具链 —— 音视频开发 IDE 速查

音视频 NDK 工程师每天对着代码 8 小时,IDE 用得顺不顺直接决定效率。这一篇给 Android Studio / VSCode / Vim 三套工具的实用配置 + 调试技巧。


本文速览

章节 阅读重点
0. 不同场景用不同工具 把握本节核心概念和使用场景
1. Android Studio —— Android 主力 把握本节核心概念和使用场景
2. VSCode —— 跨语言主力 把握本节核心概念和使用场景
3. Vim —— 极速编辑器 把握本节核心概念和使用场景
4. ADB 调试速查 定位常见故障和规避方式
5. Git 高效命令 记住常用接口和关键参数
6. 跨工具协同 把握本节核心概念和使用场景
7. 调试技巧 定位常见故障和规避方式
8. 性能调优工具 把握本节核心概念和使用场景
9. 几个高效工作流 把握本节核心概念和使用场景
后续章节 余下 1 节继续按“概念 → 示例 → 坑点 → 总结”展开

0. 不同场景用不同工具

场景 推荐工具
看 Java/Kotlin + Android UI Android Studio
看 C/C++ Native 代码 VSCode + clangd
看 FFmpeg / VLC 大型 C 工程 VSCode(远程)或 Vim
快速改命令行 / 调试 Vim
查 Android 系统源码(AOSP) VSCode + clangd

不同场景换工具,别死守一个 IDE


1. Android Studio —— Android 主力

1.1 必装插件

插件 用途
Kotlin 默认带
ADB Idea 一键卸载 / 重启 / 清缓存
Rainbow Brackets 彩色括号 (大型 C 文件必备)
String Manipulation 字符串处理
Git Toolbox Git 增强
LeetCode 摸鱼时刷题

1.2 NDK 开发设置

Preferences: Build, Execution, Deployment → CMake

  • CMake 路径
  • Build directory: app/.cxx/

Preferences: Languages & Frameworks → C/C++

  • 启用 Code Completion
  • clangd-tidy

1.3 LLDB 调试 Native

参考 ijkplayer 项目的 patch-debugging-with-lldb.sh

sh android/patch-debugging-with-lldb.sh armv7a

之后 Android Studio:

Run: Edit Configurations → Debugger → Symbol Directories
添加 obj/local// 目录

Run: Debug ‘app’ (选 LLDB 模式)

1.4 高频快捷键

操作 快捷键(Mac/Linux 类似)
跳转到声明 Cmd+B / Ctrl+B
跳转到实现 Cmd+Alt+B
找用法 Alt+F7
重命名 Shift+F6
提取方法 Cmd+Alt+M
全局搜索 双击 Shift
搜索类 Cmd+O
搜索文件 Cmd+Shift+O
命令面板 Cmd+Shift+A

双击 Shift 是最常用的搜索入口。

1.5 Profile 工具

内容
View Tool Windows → Profiler
CPU 记录 method 级耗时, 看热点
Memory 看泄漏 / 大对象
Network 看 HTTP / Socket 流量
Energy 看耗电

2. VSCode —— 跨语言主力

2.1 必装插件

插件 用途
clangd C/C++ 智能补全 + 跳转(远比 Microsoft C/C++ 快)⭐
CMake Tools CMake 工程支持
Native Debug LLDB / GDB 调试
Better Comments 注释着色
Error Lens 错误内联显示
Git Graph 可视化 Git 历史
Remote - SSH 远程开发 ⭐
Remote - Containers Docker 开发

2.2 clangd 配置

clangd 是 LLVM 自带的语言服务器,比 IntelliSense 快 10x

2.2.1 装 clangd

按平台选择安装命令:

平台 命令 说明
Linux / Ubuntu sudo apt install clangd 直接安装系统仓库里的 clangd
macOS brew install llvm 通过 Homebrew 安装 LLVM 工具链,内含 clangd
2.2.2 生成 compile_commands.json

不同构建系统的生成方式不同,按工程类型选一套即可:

工程类型 命令 产物 / 作用
CMake 工程 mkdir build && cd build 新建独立构建目录,避免污染源码目录
CMake 工程 cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 .. 生成 build/compile_commands.json
CMake 工程 ln -s build/compile_commands.json ../ 把编译数据库软链到工程根,方便 clangd 识别
Makefile 工程 sudo apt install bear 安装 bear,用于捕获编译命令
Makefile 工程 bear -- make 替代直接执行 make,自动生成 compile_commands.json
2.2.3 VSCode 配置 .clangd(工程根)
CompileFlags:
  Add: [-std=c++17, -Wall]
  Remove: [-W*]   # 去掉某些警告

If:
  PathMatch: src/.*\.cpp

Diagnostics:
  ClangTidy:
    Add: [modernize-*, performance-*]
    Remove: [modernize-use-trailing-return-type]

2.3 VSCode 调试 NDK Native

launch.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "LLDB Attach Android",
            "type": "lldb",
            "request": "attach",
            "pid": "${command:pickProcess}",
            "preLaunchTask": "build"
        }
    ]
}

2.4 远程开发 SSH

适合服务器开发(编译大型 C 工程时本地慢):

在这里插入图片描述

2.5 高频快捷键

操作 快捷键
跳转到定义 F12
找用法 Shift+F12
命令面板 Cmd+Shift+P
文件搜索 Cmd+P
全文搜索 Cmd+Shift+F
多光标 Cmd+D(选中下一处)
同时打开终端 Ctrl+`
切换文件 Cmd+Tab

3. Vim —— 极速编辑器

3.1 为啥要会 Vim

序号 要点
1 服务器调试(SSH 远程,没图形界面)
2 快速改单个文件(启动 < 100ms)
3 Git rebase 编辑 commit
4 命令行 debug(lldb 内嵌)

NDK 工程师至少要会基础

3.2 必学 30 个命令

移动
命令 作用
h j k l 左 / 下 / 上 / 右
w / b 下一个 / 上一个单词
0 / $ 行首 / 行尾
gg / G 文件首 / 尾
Ctrl+u / Ctrl+d 半页上 / 下
:42 跳到第 42 行
编辑
命令 作用
i / a / o 插入:当前位置前 / 后 / 下一行
x 删字符
dd 删行
yy 复制行
p 粘贴
u 撤销
Ctrl+r 重做
查找替换
命令 作用
/text 搜索
n / N 下一个 / 上一个匹配
:%s/old/new/g 全文替换
文件
命令 作用
:w 保存
:q 退出
:wqZZ 保存退出
:q! 不保存退出
:e file 打开文件
其他
命令 作用
v 选择(visual mode)
V 选行
:%y+ 复制全文到系统剪贴板
:set nu 显示行号

3.3 .vimrc 推荐配置

这组配置属于“配置项 + 含义”的对照关系,先用表格扫读每项解决什么问题,再复制下面的完整配置:

配置项 作用 推荐理由
set number 显示行号 方便日志 / 编译错误跳转到具体行
set tabstop=4 Tab 显示宽度设为 4 C/C++ / Java 代码缩进更稳定
set shiftwidth=4 自动缩进宽度设为 4 配合 tabstop 保持缩进一致
set expandtab Tab 转空格 避免多人协作时 Tab 宽度不一致
set autoindent 自动继承上一行缩进 写代码时减少手动对齐
set hlsearch 高亮搜索结果 搜索后能快速定位所有匹配点
set incsearch 输入搜索词时增量匹配 边输入边跳转,提高查找效率
set clipboard=unnamedplus 打通系统剪贴板 Vim 和 IDE / 浏览器之间复制更顺
syntax on 开启语法高亮 远程改代码时降低误读概率
filetype plugin indent on 开启文件类型插件和缩进 按语言启用更合适的缩进规则
nnoremap <leader>w :w<CR> 快捷保存 normal 模式下快速保存
nnoremap <leader>q :q<CR> 快捷退出 normal 模式下快速退出
" ~/.vimrc
set number            " 行号
set tabstop=4
set shiftwidth=4
set expandtab          " Tab 转空格
set autoindent
set hlsearch           " 高亮搜索
set incsearch
set clipboard=unnamedplus  " 跟系统剪贴板互通
syntax on
filetype plugin indent on

" 留分屏: Ctrl+w 后跟方向键切换
nnoremap <leader>w :w<CR>
nnoremap <leader>q :q<CR>

3.4 跟 IDE 协同

日常用 IDE,SSH 远程或单文件改用 Vim

Vim 用法心智一句话:i 进编辑模式 → 改东西 → ESC 回 normal → :w 保存

阶段 按键 / 命令 心智模型
进入编辑 i 从 normal mode 进入 insert mode,开始改内容
完成编辑 ESC 回到 normal mode,准备执行保存 / 搜索 / 跳转
保存结果 :w 把当前 buffer 写回文件

4. ADB 调试速查

4.1 高频 ADB 命令

这些命令互相独立,按“场景 → 命令 → 作用”做速查表更容易扫读:

场景 命令 作用 / 注意点
设备 adb devices 查看已连接设备,先确认 USB / Wi-Fi ADB 是否正常
APK adb install app.apk 安装 APK
APK adb uninstall com.example.app 卸载指定包名应用
启动 adb shell am start -n com.example/.MainActivity 直接启动指定 Activity,适合绕过入口页调试
日志 adb logcat 查看完整 logcat
日志 adb logcat *:W 只看 warning 及以上日志
日志 adb logcat | grep MyTag 按 tag / 关键字过滤日志
日志 adb logcat -c 清空历史日志,复现场景前常用
屏幕 adb shell screencap /sdcard/s.png && adb pull /sdcard/s.png 截图并拉到本地
屏幕 adb shell screenrecord /sdcard/v.mp4 录屏,使用 Ctrl+C 停止
性能 adb shell top 看进程 CPU / 内存占用
性能 adb shell dumpsys cpuinfo 查看系统 CPU 使用情况
性能 adb shell dumpsys meminfo com.example 查看指定应用内存
性能 adb shell dumpsys gfxinfo com.example 查看渲染耗时 / 掉帧信息

4.2 音视频专用

音视频问题排查时优先看 codec / 显示 / 音频 / ANR / trace 五类信息:

场景 命令 作用 / 适合排查
Codec adb shell dumpsys media.codec 查看编解码器实例、状态、输入输出队列等
显示 adb shell dumpsys SurfaceFlinger 查看 Surface / Layer / 合成相关状态
音频 adb shell dumpsys audio 查看 AudioService 侧路由和音量状态
音频 adb shell dumpsys media.audio_flinger 查看 AudioFlinger 线程、track、buffer 状态
音频 adb shell dumpsys media.audio_policy 查看音频策略、设备选择和路由决策
ANR adb pull /data/anr/traces.txt 拉取 ANR 堆栈,定位主线程卡顿
Trace adb shell atrace --async_start gfx view 开始抓帧率 / 渲染相关 trace
Trace adb shell atrace --async_dump > trace.html 导出 trace 文件,用于后续可视化分析

5. Git 高效命令

5.1 高频

高频 Git 命令按“工作区 / 提交 / 同步 / 历史 / 分支”分组记:

场景 命令 作用 / 注意点
工作区 git status 查看当前改动、暂存区和分支状态
工作区 git add -p 分块加入暂存区,适合提交前 audit 自己改了什么
提交 git commit -m "..." 创建一次提交
提交 git commit --amend 修改最近一次 commit
同步 git push 推送当前分支
同步 git pull --rebase rebase 拉取,避免无意义 merge commit
历史 git log --oneline --graph 用单行图形方式查看提交历史
历史 git log -p file 查看某个文件的历史 patch
历史 git blame file 查看每一行最后由谁修改
分支 git checkout -b new-branch 从当前提交创建并切换到新分支
分支 git checkout main 切回 main 分支
分支 git branch -D old-branch 强制删除本地旧分支

5.2 调试型

git bisect 是定位“哪个 commit 引入 bug”的二分工具:

步骤 命令 含义
1 git bisect start 开始二分定位
2 git bisect bad HEAD 标记当前版本是坏的
3 git bisect good v1.0 标记 v1.0 是好的
4 git bisect good / git bisect bad Git 跳到中间 commit 后,根据测试结果继续标记
5 git bisect reset 找到坏 commit 后退出 bisect 状态

5.3 撤销

撤销类命令风险差异很大,重点看是否会丢改动:

命令 作用 风险
git reset --soft HEAD~1 撤销最近一次 commit,但保留改动 低,改动仍在工作区 / 暂存区
git reset --hard HEAD~1 撤销最近一次 commit,并丢弃改动 高,会丢本地改动
git checkout -- file 撤销单个文件的本地改动 中,该文件未提交改动会丢失
git stash 暂存当前改动 低,适合临时切分支
git stash pop 恢复最近一次 stash 中,可能产生冲突

6. 跨工具协同

6.1 用 Android Studio 写 Java + VSCode 看 Native

在这里插入图片描述

两个 IDE 同时打开同一个工程目录,各管自己擅长的部分。AS 跑 Gradle / 调试 / 装机,VSCode + clangd 写 C++ 跳转更快。

6.2 用 Vim 远程 + AS 本地

服务器侧 SSH + Vim 改 FFmpeg 源码并编译,本地侧 Android Studio 连 USB 调试 Android 端——服务器跑大型工程不卡,本地用 IDE 调试体验最佳。


7. 调试技巧

7.1 LLDB 命令速查

说明
breakpoint set -f file.c -l 42 文件 + 行号断点
breakpoint set -n function_name 函数名断点
continue 继续运行
next 单步执行到下一行,不进入函数
step 单步进入函数
frame variable 查看当前栈帧局部变量
print var 打印变量
expression code 执行表达式,例如临时修改变量
backtrace 查看调用堆栈
watchpoint set variable my_var 设置数据断点

7.2 GDB 类似(Linux)

命令 作用
break file.c:42 file.c 第 42 行打断点
run 启动程序
n / s 下一行 / 进入函数
print var 打印变量
bt 查看调用堆栈

7.3 Logcat 过滤技巧

场景 命令 作用
按进程过滤 adb logcat --pid=$(adb shell pidof com.example.app) 只看指定应用进程日志
按 tag 过滤 adb logcat -s MyTag MediaCodec 只看指定 tag
显示时间戳 adb logcat -v time 排查时间线问题时更直观
看崩溃 adb logcat | grep -E “FATAL|AndroidRuntime” 快速定位 Java / native 崩溃相关日志

8. 性能调优工具

8.1 Android Studio Profiler

内容
CPU Profiler 看 method 级耗时, 找热点
Memory Profiler 看堆 / native heap / 泄漏
Energy Profiler 看 CPU / 网络 / GPS 耗电

8.2 systrace / Perfetto

# Perfetto (现代)
adb shell perfetto -c - --txt -o /data/local/tmp/trace.pftrace <<EOF
buffers {
  size_kb: 8960
}
data_sources {
  config {
    name: "linux.ftrace"
    ftrace_config {
      ftrace_events: "sched/sched_switch"
    }
  }
}
EOF

# 拉到 https://ui.perfetto.dev 分析

8.3 simpleperf

步骤 命令 作用
1 adb shell simpleperf record -p $(pidof com.example.app) -o /data/local/tmp/perf.data sleep 10 抓取指定进程 10 秒性能数据
2 adb pull /data/local/tmp/perf.data 把采样结果拉到本地
3 simpleperf report -i perf.data 在本地生成性能热点报告

9. 几个高效工作流

9.1 改 FFmpeg 源码 → 编译 → 部署 → 测试

步骤 命令 / 动作 说明
1 修改 ffmpeg/ 下的某个 .c 文件 只改目标模块,方便增量编译
2 cd ffmpeg && make -j8 编译 FFmpeg
3 cp libavcodec/libavcodec.so /path/to/app/src/main/jniLibs/arm64-v8a/ 把新 .so 拷到 Android Studio 项目
4 AS 跑 app 安装并运行验证包
5 看 logcat 验证行为和错误日志

整个循环可以 1 分钟内搞定(增量编译)。

9.2 看大型 C 工程

VLC 这类源码很大的 C 工程,可以先建索引再跳转:

阶段 命令 / 快捷键 作用
安装工具 sudo apt install cscope universal-ctags 安装 cscopectags
进入源码 cd vlc-source 进入 VLC 源码根目录
生成 tags ctags -R . 递归生成符号索引
生成 cscope 索引 cscope -bR 递归生成 cscope 数据库
Vim 跳定义 Ctrl+] 跳到符号定义
Vim 回退 Ctrl+t 从定义位置回退
Vim 查函数 :tag fn 跳到函数 fn

或 VSCode + clangd(前面讲了)。

9.3 远程编译 + 本地 IDE

本地: VSCode + Remote SSH
服务器: 编译大型工程 (FFmpeg / Chromium)

代码看本地, 编译跑服务器


10. 总结

工具链速记:

场景 工具
日常 Android Android Studio + Profiler + ADB
看 NDK 大型工程 VSCode + clangd
快速编辑 / SSH Vim
版本控制 git CLI + 部分 GUI(Sourcetree)
调试 LLDB / GDB / atrace / Perfetto

效率金句:

  1. 学会键盘所有快捷键 —— 不要用鼠标
  2. clangd 比 IntelliSense 快 10x —— 装上
  3. 双 IDE 协作(AS + VSCode)—— 各管擅长的
  4. Vim 至少会 30 个命令 —— 服务器调试必备
  5. ADB / dumpsys / atrace —— 音视频问题排查三件套

金句:写代码工具决定效率上限。Android Studio 写 UIVSCode + clangd 写 NativeVim 改服务器LLDB 调崩溃——四件套熟练用 = 比同行快 2 倍出活。

更多推荐