You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android Studio中调试Android平台原生C++代码(以AudioTrack为例)

配置Android Studio调试Android平台原生C++代码(以AudioTrack为例)

前置准备:获取对应版本的源码和调试符号

你使用的是API 30的x86模拟器,需要匹配Android 11(API 30)x86架构的资源:

  • 原生源码获取:SDK Manager默认只提供Java层平台源码,C++层源码需要拉取AOSP对应tag(android-11.0.0_r39,匹配API 30公开发布版)的相关目录即可,不需要同步全量AOSP。你需要的AudioTrack相关源码分布在frameworks/av/media/libaudioclient/、frameworks/base/core/jni/两个路径下,将对应文件存放到本地目录,目录结构要和AOSP的目录结构完全一致,比如AudioTrack.cpp的本地路径要为{本地根目录}/frameworks/av/media/libaudioclient/AudioTrack.cpp。
  • 调试符号获取:系统库的调试符号可以下载官方对应版本x86模拟器的符号包,也可以自行编译对应tag的x86模拟器镜像,编译产物的out/target/product/generic_x86/symbols/system/lib/路径下就包含libandroid_runtime.so、libaudioclient.so等带完整调试信息的系统库,注意符号的版本、架构必须和你运行的模拟器镜像完全一致,否则会出现地址不匹配的问题。

配置Android Studio关联资源

不需要修改应用的编译配置,仅调整调试运行配置即可:

  1. 打开你应用的运行配置页面,确认调试器类型已经设置为Dual (Java + Native)
  2. 切换到「Debugger > Native」标签页,找到「Source Directories」配置项,点击加号将你存放AOSP原生源码的本地根目录添加进去
  3. 在同一标签页下找到「LLDB Startup Commands」配置项,添加以下两行命令,路径替换为你本地的实际路径:
# 配置调试符号的搜索路径
settings set target.exec-search-paths {你存放调试符号的根目录}/system/lib
# 配置源码路径映射,前半段是AOSP编译时的源码根路径,后半段是你本地的源码根路径
settings set target.source-map /aosp/src/ {你存放原生源码的本地根目录}

如果不清楚编译时的源码根路径,可以在LLDB命中断点后执行image lookup -v -n android_media_AudioTrack_start,查看输出的CompileUnit字段里的路径前缀,替换到上面的映射规则里即可。

调试操作步骤

  1. 保存配置后,以调试模式启动应用到目标模拟器
  2. 正常单步调试到Java层的JNI调用处,比如AudioTrack的native方法调用行
  3. 可以直接使用「Force Step Into」尝试跳转,也可以提前在LLDB控制台给对应JNI方法设置断点,比如br set --name android_media_AudioTrack_start
  4. 断点命中后,Android Studio会自动加载对应的C++源码、展示变量和调用栈信息,即可正常单步调试系统原生代码。

常见问题排查

  • 如果断点命中后还是没有显示源码,先检查源码的目录结构是否和AOSP完全一致,再确认路径映射规则是否正确
  • 如果变量信息显示不全,确认你使用的调试符号是未剥离的带调试信息版本,且和运行的镜像版本完全匹配
  • 不需要给应用添加NDK、CMake相关的编译配置,仅调整调试配置即可正常调试系统原生代码。

内容的提问来源于stack exchange,提问作者Thomas McGuire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:09:00