Nit*_*der 2 android android-ndk android-studio ndk-build android-native-library
在 Android studio(v4.1.2) 中尝试 ndk-build C 代码调试。下面是 build.gradle 设置。
jni ,C/C++ 源文件 Dirs. 实际的 C 文件不在 jni 文件夹下,而是在其外部,但在 android.mk 文件中引用。
sourceSets.main.jniLibs.srcDirs = ['D:/ccodefolder/jni/']
2)Android.mk 从 C、C++ 代码构建共享库,并链接内置共享库和静态库。
externalNativeBuild {
ndkBuild {
path file('D:/ccodefolder/jni/Android.mk')
}
}
ndkVersion '21.1.6352462'
Run Code Online (Sandbox Code Playgroud)
debug {
debuggable true
jniDebuggable true
minifyEnabled false
shrinkResources false
//ndk.debugSymbolLevel = 'FULL'
}
Run Code Online (Sandbox Code Playgroud)
4)项目结构如图所示。
能够运行项目并生成共享库以及其他预构建的 .SO 和 apk 作品,还创建了 CPP 文件夹并能够查看我的项目的 C 代码文件。
调试问题:
LLDB 服务器启动并且调试器附加到进程,但是调试任何 C 文件都失败并出现以下错误。
当前不会命中断点。没有可执行代码与该行关联
谢谢
您可以尝试以下几种方法,每种解决方案我都取得了成功。
来自NDK 错误跟踪器:
选择运行 -> 编辑配置
在左侧选择Android应用程序->应用程序
在右侧,选择“调试器”选项卡
在符号目录子选项卡下,按 + 按钮
浏览到以下路径:
libModule/build/intermediates/cmake/debug/obj在“构建变体”窗口中,选择应用程序的“调试”配置
我发现有时有效的另一个解决方案是仅在 C++ 代码中添加断点。Android Studio 调试器不能很好地处理从 Java/Kotlin 到 C++ 的转换。我发现通过删除所有 Java 断点、重新启动 Android Studio 并再次启动调试模式,现在将命中 C++ 断点(尽管现在添加的任何 Java 断点都将被错过)。