[英]Debugging a prebuilt shared library in Android Studio
我正在尝试使用 C++ 共享库,该库单独构建,并且仅将二进制文件复制到我的 Android 项目中。
除调试外,一切正常。
Android Studio 的 lldb 调试器只是跳过了共享库 API 调用的那一行。
二进制文件是用所有需要的符号构建的。
你能给我一些想法我可以尝试什么吗?
谢谢。
以下是我的 Android Studio 设置、build.gradle 和 cmake。
构建.gradle
defaultConfig {
externalNativeBuild {
cmake {
cppFlags ''
arguments "-DANDROID_STL=c++_shared"
}
}
ndk {
abiFilters "x86"
//abiFilters "x86_64"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled false
debuggable true
jniDebuggable true
renderscriptDebuggable true
}
}
packagingOptions {
doNotStrip "/x86/*.so"
//doNotStrip "/x86_64/*.so"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
externalNativeBuild {
cmake {
path file('CMakeLists.txt')
version '3.10.2'
}
}
sourceSets {
main {
jniLibs.srcDirs = ['/src/main/libnode/bin']
}
}
制作
add_library(libnode SHARED IMPORTED)
set_target_properties(
libnode
PROPERTIES IMPORTED_LOCATION
${CMAKE_SOURCE_DIR}/src/main/libnode/bin/${CMAKE_ANDROID_ARCH_ABI}/libnode.so)
add_library(
native-lib
SHARED
src/main/cpp/native-lib.cpp)
target_link_libraries(
native-lib
libnode
${log-lib})
"-Wl,--build-id=sha1"
(抱歉,我编辑 CMake 已经有一段时间了)。 可以在NDK 构建维护者指南中找到有关构建 ID 的更多信息
库的源需要由 Android Studio 索引,源根目录中的源的符号链接就足够了。 例如在/src/main/cpp/myLib
需要在库中内置的源和磁盘上的源之间进行 LLDB 映射。 也就是说,如果库是在其他机器上构建的,并且符号对该机器是唯一的,则您需要“映射”符号,以便 LLDB 可以在您的机器上找到源。
toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android-objdump
(在本例中它是 aarch64-linux-android,对于arm64 库),在库上运行 objdump: aarch64-linux-android-objdump -C -l -d myLib.so | grep \\\\.cpp
这将打印出调试符号何时/何地构建的路径。
如果库是在 /a/b/c 文件夹中的机器上构建的,则共享库中的所有相关符号的格式/a/b/c/myLib/src/myFile.cpp
,并且相同文件位于您机器上的/Studio/x/y/z/src/main/cpp/myLib/src/myFile.cpp
您需要创建从/a/b/c
到/Studio/x/y/z/src/main/cpp
的 LLDB 映射/Studio/x/y/z/src/main/cpp
settings append target.source-map /a/b/c /Studio/x/y/z/src/main/cpp
如果您使用的是 windows,只需将路径提供为 windows 路径,即使库是在 cygwin 或 bash 中构建的,也请完全按照 objdump 提供的路径复制路径。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.