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 系统源码AOSPVSCode 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 → CMakeCMake 路径Build directory: app/.cxx/Preferences: Languages Frameworks → C/C启用 Code Completionclangd-tidy1.3 LLDB 调试 Native参考 ijkplayer 项目的patch-debugging-with-lldb.shshandroid/patch-debugging-with-lldb.sh armv7a之后 Android StudioRun: Edit Configurations → Debugger → Symbol Directories添加 obj/local// 目录Run: Debug ‘app’ (选 LLDB 模式)1.4 高频快捷键操作快捷键Mac/Linux 类似跳转到声明CmdB / CtrlB跳转到实现CmdAltB找用法AltF7重命名ShiftF6提取方法CmdAltM全局搜索双击 Shift搜索类CmdO搜索文件CmdShiftO命令面板CmdShiftA双击 Shift是最常用的搜索入口。1.5 Profile 工具项内容ViewTool Windows → ProfilerCPU记录 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直接安装系统仓库里的clangdmacOSbrew install llvm通过 Homebrew 安装 LLVM 工具链内含clangd2.2.2 生成 compile_commands.json不同构建系统的生成方式不同按工程类型选一套即可工程类型命令产物 / 作用CMake 工程mkdir build cd build新建独立构建目录避免污染源码目录CMake 工程cmake -DCMAKE_EXPORT_COMPILE_COMMANDS1 ..生成build/compile_commands.jsonCMake 工程ln -s build/compile_commands.json ../把编译数据库软链到工程根方便clangd识别Makefile 工程sudo apt install bear安装bear用于捕获编译命令Makefile 工程bear -- make替代直接执行make自动生成compile_commands.json2.2.3 VSCode 配置.clangd工程根CompileFlags:Add:[-stdc17,-Wall]Remove:[-W*]# 去掉某些警告If:PathMatch:src/.*\.cppDiagnostics:ClangTidy:Add:[modernize-*,performance-*]Remove:[modernize-use-trailing-return-type]2.3 VSCode 调试 NDK Nativelaunch.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找用法ShiftF12命令面板CmdShiftP文件搜索CmdP全文搜索CmdShiftF多光标CmdD选中下一处同时打开终端Ctrl切换文件CmdTab3. Vim —— 极速编辑器3.1 为啥要会 Vim序号要点1服务器调试SSH 远程没图形界面2快速改单个文件启动 100ms3Git rebase 编辑 commit4命令行 debuglldb 内嵌NDK 工程师至少要会基础。3.2 必学 30 个命令移动命令作用hjkl左 / 下 / 上 / 右w/b下一个 / 上一个单词0/$行首 / 行尾gg/G文件首 / 尾Ctrlu/Ctrld半页上 / 下:42跳到第 42 行编辑命令作用i/a/o插入当前位置前 / 后 / 下一行x删字符dd删行yy复制行p粘贴u撤销Ctrlr重做查找替换命令作用/text搜索n/N下一个 / 上一个匹配:%s/old/new/g全文替换文件命令作用:w保存:q退出:wq或ZZ保存退出:q!不保存退出:e file打开文件其他命令作用v选择visual modeV选行:%y复制全文到系统剪贴板:set nu显示行号3.3 .vimrc 推荐配置这组配置属于“配置项 含义”的对照关系先用表格扫读每项解决什么问题再复制下面的完整配置配置项作用推荐理由set number显示行号方便日志 / 编译错误跳转到具体行set tabstop4Tab 显示宽度设为 4C/C / Java 代码缩进更稳定set shiftwidth4自动缩进宽度设为 4配合tabstop保持缩进一致set expandtabTab 转空格避免多人协作时 Tab 宽度不一致set autoindent自动继承上一行缩进写代码时减少手动对齐set hlsearch高亮搜索结果搜索后能快速定位所有匹配点set incsearch输入搜索词时增量匹配边输入边跳转提高查找效率set clipboardunnamedplus打通系统剪贴板Vim 和 IDE / 浏览器之间复制更顺syntax on开启语法高亮远程改代码时降低误读概率filetype plugin indent on开启文件类型插件和缩进按语言启用更合适的缩进规则nnoremap leaderw :wCR快捷保存normal 模式下快速保存nnoremap leaderq :qCR快捷退出normal 模式下快速退出 ~/.vimrc set number 行号 set tabstop4 set shiftwidth4 set expandtab Tab 转空格 set autoindent set hlsearch 高亮搜索 set incsearch set clipboardunnamedplus 跟系统剪贴板互通 syntax on filetype plugin indent on 留分屏: Ctrlw 后跟方向键切换 nnoremap leaderw :wCR nnoremap leaderq :qCR3.4 跟 IDE 协同日常用 IDESSH 远程或单文件改用 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安装 APKAPKadb 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录屏使用CtrlC停止性能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开始抓帧率 / 渲染相关 traceTraceadb 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: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.pftraceEOF 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编译 FFmpeg3cp 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安装cscope和ctags进入源码cd vlc-source进入 VLC 源码根目录生成 tagsctags -R .递归生成符号索引生成 cscope 索引cscope -bR递归生成cscope数据库Vim 跳定义Ctrl]跳到符号定义Vim 回退Ctrlt从定义位置回退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 部分 GUISourcetree调试LLDB / GDB / atrace / Perfetto效率金句学会键盘所有快捷键—— 不要用鼠标clangd 比 IntelliSense 快 10x—— 装上双 IDE 协作AS VSCode—— 各管擅长的Vim 至少会 30 个命令—— 服务器调试必备ADB / dumpsys / atrace—— 音视频问题排查三件套金句写代码工具决定效率上限。Android Studio 写 UIVSCode clangd 写 NativeVim 改服务器LLDB 调崩溃——四件套熟练用 比同行快 2 倍出活。