音视频修炼之前置工具链(四):AS+VSCode+Vim工具链

📅 2026/7/17 5:58:10 👁️ 阅读次数 📝 编程学习
音视频修炼之前置工具链(四):AS+VSCode+Vim工具链

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 UIAndroid 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 ToolboxGit 增强
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

shandroid/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 工具

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

2. VSCode —— 跨语言主力

2.1 必装插件

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

2.2 clangd 配置

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

2.2.1 装 clangd

按平台选择安装命令:

平台命令说明
Linux / Ubuntusudo apt install clangd直接安装系统仓库里的clangd
macOSbrew 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/.*\.cppDiagnostics: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)
3Git rebase 编辑 commit
4命令行 debug(lldb 内嵌)

NDK 工程师至少要会基础

3.2 必学 30 个命令

移动
命令作用
hjkl左 / 下 / 上 / 右
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=4Tab 显示宽度设为 4C/C++ / Java 代码缩进更稳定
set shiftwidth=4自动缩进宽度设为 4配合tabstop保持缩进一致
set expandtabTab 转空格避免多人协作时 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 是否正常
APKadb install app.apk安装 APK
APKadb 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 五类信息:

场景命令作用 / 适合排查
Codecadb 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查看音频策略、设备选择和路由决策
ANRadb pull /data/anr/traces.txt拉取 ANR 堆栈,定位主线程卡顿
Traceadb shell atrace --async_start gfx view开始抓帧率 / 渲染相关 trace
Traceadb 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 --rebaserebase 拉取,避免无意义 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”的二分工具:

步骤命令含义
1git bisect start开始二分定位
2git bisect bad HEAD标记当前版本是坏的
3git bisect good v1.0标记v1.0是好的
4git bisect good/git bisect badGit 跳到中间 commit 后,根据测试结果继续标记
5git 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:42file.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

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

9. 几个高效工作流

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

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

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

9.2 看大型 C 工程

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

阶段命令 / 快捷键作用
安装工具sudo apt install cscope universal-ctags安装cscopectags
进入源码cd vlc-source进入 VLC 源码根目录
生成 tagsctags -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. 总结

工具链速记:

场景工具
日常 AndroidAndroid Studio + Profiler + ADB
看 NDK 大型工程VSCode + clangd
快速编辑 / SSHVim
版本控制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 倍出活。