我正在编写一个包含与Java代码一起编译的C / C ++代码的Android应用程序。我的应用程序在执行本机代码期间崩溃。
有没有办法逐步完成Android C / C ++源代码并检查变量,因为Java源代码可以实现?
我不一定在寻找从Android Studio 中逐步浏览源的方法。这显然是理想的解决方案,但是,如果我需要在从Studio启动应用程序后使用外部工具,那很好。我希望能够逐行执行并检查变量。
Android Studio 1.0.2
Android NDK r10d
编辑:源于立即响应,"将Eclipse与ADT插件一起使用",让我添加更多要求。
该项目最初是作为Eclipse ADT项目开始的。但是,我现在已迁移到Android Studio。我的项目现在使用Gradle构建,我的项目目录结构反映了这一点。我愿意使用Eclipse;我不愿意改变我的项目结构,以便从Android Studio恢复到Eclipse。如果有办法在Eclipse中打开Android Studio项目并以这种方式进行调试,请详细说明该过程。
答案 0 :(得分:6)
<强> [UPDATE] 强>
截至2015年7月,Android Studio DOES支持NDK。
您可以在this link上详细了解相关信息。
<强> [老] 强> Android Studio尚不支持NDK。
当我们必须处理NDK时,唯一的解决方案是使用Eclipse。
修改强>
我们基本上将Eclipse项目与NDK功能(在我们的例子中为map)和Gradle项目与其他(非地图)功能保持在一起。所以必须用NDK完成所有工作,我们在Eclipse中完成,然后将更改包含在Gradle项目中。
更准确地说,在目录/src/main/
内,我们创建了另一个名为jniLibs
的目录,并将编译好的*.so
文件放在特定于体系结构的文件夹中(armeabi-v7a,armeabi,x86 .. )。然后在Gradle项目的主类中简单地添加一行
static {
System.loadLibrary("OurNDKLibName");
}
每个项目只能添加一行此行。也许我错了,但我们没有任何问题。
答案 1 :(得分:5)
从版本1.3+开始预览Android Studio支持C ++调试,引用Android M Developer Preview & Tools:
最值得注意的是我们的Android NDK&amp;游戏开发人员:C / C ++代码的代码编辑和调试。 Android Studio NDK插件基于JetBrains Clion平台,提供诸如C / C ++代码的重构和代码完成等功能以及Java代码。 Java和C / C ++代码支持已集成到Android应用程序开发人员免费的一个开发体验中。
答案 2 :(得分:3)
不是很好。
hello-jni 失败失败:
Starting LLDB server: run-as com.example.sample
/data/data/com.example.sample/lldb/bin/start_lldb_server.sh
/data/data/com.example.sample/lldb
/data/data/com.example.sample/lldb/tmp/platform.port1442695333842 "lldb
process:gdb-remote packets"
Error while launching debug server on device:
com.android.tools.ndk.run.DebuggerContext$StartServerException:
java.lang.IllegalStateException: Failed to read platform port
/data/data/com.example.sample/lldb/tmp/platform.port1442695333842
我正在使用1.4RC1
compileSdkVersion 23
buildToolsVersion "23.0.1"
@Gerry提到的“app-native”运行配置。它几乎就在那里,但我在应用程序的私有数据文件夹中找不到lldb
目录的痕迹。我确实在那里链接的lib
目录中找到了400kb的 gdbserver ,除了我自己的*.so
之外。不幸的是,使用gdb而不是lldb进行调试的选项已经从1.3升级到1.4。 NDK 10e在ndk\prebuilt\android-arm\gdbserver
中发送了一个400kb的gdbserver二进制文件(我猜)。 9月15日gdb调试howto https://github.com/mapbox/mapbox-gl-native/wiki/Android-debugging-with-remote-GDB已更新。这比logcat调试IMO更难,但是当前的主题,遗憾的是如此消极,但我不相信lldb实际上有效。
我已经运行了hello-jni并得出了同样的结论。
因此,在回答您的问题时,尚无法在Android Studio中调试C / C ++。对不起,这不是你所希望的答案,我希望用相反的确凿证据证明是错误的,但就在这里,现在,没有机会!
更新我提出了一个issue,我在那里修理了一部手机。
UPDATE2 说得太早,毕竟它是实验性的,但我偶尔会失败,通常如果不是总是出现乱序和带有无意义参数值的断点。我只是设置了一个没有触发的条件断点但是logcat显示它应该。最初我认为这是我的逻辑错误,但它更深入。
简单地点击断点非常有帮助,但它仍然比Java调试或Vis Studio C ++调试还要短一百万英里。
UPDATE3 回到稳定的1.3.1,因为canaray频道版本暂停每次击键的厕所休息。虽然本机调试版本至少使用我的“固定”手机启动,但即使在hellojni中也没有出现断点,或者稍微扩展版本以提供更多机会。我现在习惯logcat,但是在Android,NDK和Eclipse方面有更好的去尾经验。更复杂的解决方案也更容易破解,但至少它有效。
答案 3 :(得分:2)
是,Android Studio支持至少使用Android studio 1.5.1和android-ndk-r10e进行C ++调试。
在过去,您必须编写make文件 Android.mk 和 Application.mk 才能在Android Studio中构建C ++代码。你不再需要它们了。只要您将它们放在 jni 文件夹下,gradle就可以将其拾取并编译。你应该看到如下内容:
还允许您设置断点并进行调试。
您应该关注this step-by-step tutorial并详细了解相关信息。并阅读有关文档here的更多信息。我上传了一个完整的工作示例,以便您可以在GitHub下载并试用它。
答案 4 :(得分:0)
使用tools.android.com的Android Studio 1.4,可以进行调试。当您打开/创建一个包含C ++ [jni]代码的项目时,Android studio会创建一个新配置,例如$(module_name)-native
我会选择此配置,同步gradle,构建,设置断点等,然后使用Android Studio运行它。经过漫长的等待,我的调试器已连接,应用程序已中断[我认为您此时也可以设置断点];这个突破不在我的设定断点,我让它进入android工作室,我的断点被击中。希望这有助于 Some samples应该与android调试器一起使用
答案 5 :(得分:-1)
是的!可以在android studio中调试本机代码。从用于调试本机代码的内置工具中的Android Studio 2.2+更新支持开始。