如何在NDK本机代码中获取断点并在Android Studio中调试本机代码?
我正在使用NDK开发android应用程序。我有两个项目。一个是我的本地库,它使用NDK并生成.so文件 我正在使用Android Studio,但禁用了自动构建,并使用ndk构建启用了构建。我正在使用Windows7 现在,在生成.so文件之后,我复制了我的主应用程序项目中的文件,该项目也使用ndk build编译JNI函数,我在其中调用库的函数。我希望到现在为止我还是清白的。如果没有,我会根据要求提供更多细节 现在,我正在使用Android Studio在设备中运行我的应用程序,我可以在java代码中设置断点并调试该代码,但我无法调试JNI调用以及我在单独项目中拥有的本机代码。我需要在我的库代码中进行调试。那么,有什么办法可以实现这一点呢 我看过VisualGDB,但它是付费的。所以,让我知道是否有任何替代方案来完全满足我的调试要求。我已经搜索了很多,但没有得到任何具体的解决方案 我可以在Android Studio中看到附加到Android进程的选项,在这里我可以看到我正在运行的设备,但我不确定如何使用它,这样我就可以通过本机库代码进行调试(它在单独的项目中,没有任何活动)如何在NDK本机代码中获取断点并在Android Studio中调试本机代码?,android,android-studio,android-ndk,Android,Android Studio,Android Ndk,我正在使用NDK开发android应用程序。我有两个项目。一个是我的本地库,它使用NDK并生成.so文件 我正在使用Android Studio,但禁用了自动构建,并使用ndk构建启用了构建。我正在使用Windows7 现在,在生成.so文件之后,我复制了我的主应用程序项目中的文件,该项目也使用ndk build编译JNI函数,我在其中调用库的函数。我希望到现在为止我还是清白的。如果没有,我会根据要求提供更多细节 现在,我正在使用Android Studio在设备中运行我的应用程序,我可以在ja
如果需要更多详细信息,请告诉我Android Studio 1.3+支持本机调试 要进行设置,请执行以下步骤:
Android Studio 1.4测试版刚刚发布。我对它进行了测试,并能够在Windows 8.1上进行本机调试。在Android Studio 2.0预览版中,该过程有点不同(我认为更简单):
如果不起作用,请检查您的本机配置是否已选择调试类型“混合”:在播放按钮的右侧,单击小三角形,选择“编辑配置”,选择“应用程序本机”配置,进入“调试器”选项卡并选择“调试类型:混合”.我能够设置断点并单步执行本机代码,但只有在以下所有条件均为真时:
它现在在Android Studio 1.5中对我有效,如果本机代码中的断点不起作用,则使用另一个检查点:
- 删除android:extractNativeLibs=“false”行或在AndroidManifest.xml中将其设置为true
extractNativeLibs=“false”
偶尔会导致1或2
如果在您尝试了所有操作之后,您的本机断点仍然无法命中,并且您的本机库可能已经在多个AS项目中被引用,那么有一个简单的解决方案 只需在setting.gradle和build.gradle中重命名本机库即可 在以下日期之前:
//in setting.gradle
include ":myNativeLib"
project(":myNativeLib").projectDir = new File("...")
//in app's build.gradle
api project(':myNativeLib')
之后:
//in setting.gradle
include ":myNativeLib2"
project(":myNativeLib2").projectDir = new File("...")
//in app's build.gradle
api project(':myNativeLib2')
抱歉,在android studio中不可能进行本机调试。顺便说一句,如果你给你的问题加上一些格式,使它不那么“密集”,更多的人会阅读它。@JonasCz实际上,现在是这样了,请看Sistr的答案below@Premal,我看到没有公认的答案,在调试a时,有任何建议的解决方案有效吗。因此,从第二个项目中的一个项目来看?对我来说,一切似乎都很好,没有错误,调试器正在控制台中附加。但我的断点根本没有被击中。我的断点位于Activity onCreate中调用的一段代码中。结果发现Android Studio 1.3中存在一个bug,在应用程序启动时断点不会被命中。在金丝雀频道将我的IDE升级到1.4测试版,效果很好。顺便说一句,如果您尝试使用graddle 2.9及以上版本,在编译时可能会出现空指针异常。如果是这种情况,只需进入[preferences]->[Build,Execution,Deployment]->[Instant Run]并检查Instant Run是否被取消激活。Graddle 2.9与instant run存在问题。哈哈哈哈!!!很抱歉信不信由你,我错过了第一步!现在它可以工作了(Studio 2.0 Beta 4,Gradle 2.10,不是实验版)。谢谢这么多!这应该是公认的答案!很高兴看到它有所帮助:)有一天我的调试停止了随机工作。解决方案是将调试类型从“Auto”设置为“Dual”(Android Studio 3.0.2)。@CJxD您是一个救生员。非常感谢。