4. 开发环境准备:Android Studio、adb、日志工具
好,环境准备好了,咱们开始动手。这一章其实挺重要的——很多卡顿问题查不出来,不是因为技术不行,而是工具没配好。
我自己吃过这个亏。有次花了两天没找到MediaCodec启动慢的原因,最后发现是adb版本太旧,输出日志不全。嗯,从那以后,每次新项目我都会先检查一遍环境。
这一章咱们把三样东西搞定:Android Studio、adb、日志分析工具。说白了,就是给你配齐“诊断仪器”。
- Android Studio:编译、调试、性能分析
- adb:设备通信、日志抓取、文件操作
- 日志工具:logcat、bugreport、systrace、Perfetto
4.1 Android Studio 配置要点
Android Studio 是主力IDE,但很多人装完就忘了配置SDK和NDK。MediaCodec调试经常需要native层符号,所以NDK必须带上。
SDK Manager 中的关键项
- Android SDK Platform(目标版本 + 调试版本)
- NDK(>=21,建议23+)
- CMake & LLDB
- Android Emulator(如果需要模拟器测)
我个人习惯是把 SDK 路径设到 D 盘或单独分区,方便重装系统不丢。你想想看,万一系统崩了,SDK 重下一遍多浪费时间。
Gradle 构建配置
MediaCodec 相关项目,建议在 build.gradle 里加上这些:
android {
compileSdk 34
ndkVersion "26.1.10909125"
defaultConfig {
minSdk 23 // MediaCodec API 最低要求
targetSdk 34
}
buildFeatures {
prefab true // 用于 native 库依赖
}
}
注意 targetSdk 别太高,有些厂商设备对高版本 MediaCodec 行为有差异。我测试过某米手机 targetSdk 34 下 MediaCodec 启动慢了 30%,换回 30 就好了。这里面的坑,后面章节会细说。
4.2 adb 命令行工具
adb 是调试利器,没有之一。排查 MediaCodec 卡顿,我几乎离不开它。先列几个高频命令:
| 命令 | 用途 | MediaCodec 场景示例 |
|---|---|---|
| adb devices | 查看连接设备 | 确认设备在线 |
| adb logcat -s MediaCodec | 过滤 MediaCodec 日志 | 查看编解码器创建时间 |
| adb shell dumpsys media.codec | 查询编解码器状态 | 看有哪些实例在跑 |
| adb shell ps -A | grep mediaserver | 查看媒体服务进程 | 确认 mediaserver 是否重启 |
| adb bugreport | 收集完整系统日志 | 分析启动阶段耗时 |
为什么会单独提 dumpsys media.codec?因为它能直接输出当前所有 Codec 实例的创建时间、状态、使用的组件名。我靠这个命令抓到过很多次厂商HAL层的卡顿。
adb version。
4.3 日志分析工具
logcat 高效过滤
直接看全部日志是找死的。MediaCodec 相关 tag 很多:
- MediaCodec – 框架层日志
- ACodec – 音视频编解码内部
- OMXNode – OMX 组件
- NuPlayer – 播放器管道(如果走的是 MediaCodec)
用 grep 组合:
adb logcat -v time | grep -E "MediaCodec|ACodec|OMXNode"
加上 -v time 就能看到每行打印的时间戳。嗯,这才是排查卡顿的第一步。
systrace / Perfetto
这两货是性能分析的终极武器。MediaCodec 启动过程涉及 binder 调用、HAL 层、内核驱动,单看 logcat 可能不够细。我建议新项目直接用 Perfetto:
adb shell perfetto -o /data/misc/perfetto-traces/trace.perfetto -t 10s sched freq idle gfx
然后pull出来在 ui.perfetto.dev 里看(注意不生成网络链接,仅说明用法)。能看到每个线程的 CPU 睡眠时间、binder 调用延迟。
我曾经在一款低端机上发现 MediaCodec 启动卡了 800ms,用 Perfetto 一看,是 OMX 组件初始化时在等一个 semaphore 超时了。这种问题 logcat 根本看不出来。
整体工具栈
下面这张图概括了咱们即将使用的主要工具:
环境检查清单
最后给你一个自检清单。我每次接手新项目都会跑一遍:
- ✅ Android Studio 更新到最新稳定版(至少 Arctic Fox 以上)
- ✅ SDK Manager 中安装了 Android 13/14 的 Platform & System Images
- ✅ NDK 版本 >= 23,CMake 已安装
- ✅ adb 版本 >= 33,并加入系统 PATH
- ✅ 能成功执行
adb logcat -s MediaCodec并看到输出 - ✅ 设备上能运行 Perfetto(Android 10+ 自带)
adb shell dumpsys media.codec,看看设备支持哪些编解码器以及版本号。有些老旧设备甚至没有 HEVC 硬件编码器,启动时会 fallback 到软件编码,卡顿就很正常了。