文章目录
Android 调试 C++ 相关代码配置
为了调试 c++ 的代码,我们需要确保打出来的 so 库是带调试信息的。几个步骤如下,如果 SO 中没有带调试信息,可以使用下面的步骤排查:
- 在 Cmake 中设置构建类型,确保打出来的 so 是debug 的,带调试信息。
set(CMAKE_BUILD_TYPE "Debug")
- 如果 so 被 strip 了的话,设置 app 不strip so
packagingOptions{
doNotStrip "*/arm64-v8a/*.so"
}
buildTypes {
debug {
externalNativeBuild{
cmake {
// 修改点2 : 可以改,一般都不需要
cppFlags += "-g" // 增加调试信息
}
}
}
}
查看 so 是否被 strip 的方式,终端输入下面的命令,就会输出 so 的状态,是否是 strip 的:
file path/xxx.so
- 如果是 cmake 调试别的 aar 中的so ,则需要做下面的操作:
- 本地打包 aar ,打包的 aar 的操作需要满足 上面 1,2,修改项目中依赖的外部 aar 的路径。如果不打包 aar ,联编调试,也可以,步骤类似,只不过需要修改下 so,头文件的路径就可以
- 修改 cmake link 的so 改成我们打包的没有 strip 的 so
link 指定本地的 so 的方式有下面两种任选其一:
这里假设我们的 so 叫 libtest.so
方式一:
1. add_library(test SHARED IMPORTED) // 添加需要引用的 so
2. set_property(
TARGET
test
PROPERTY
IMPORTED_LOCATION
path/libtest.so
)
3. target_link_libraries(targetsoname test)
方式二:
1. add_library(test INTERFACE) // add test so
2. target_link_libraries(test INTERFACE path/libtest.so) // 指定 test so 的路径
3. target_link_libraries(targetsoname PRIVATE test)