【发布时间】:2013-07-16 07:41:04
【问题描述】:
我下载了适用于 Linux 和 Android NDK 的 Android SDK Bundle。安装了ADT,我安装了CDT。
我创建了一个 Android 项目并添加了原生支持 (jni)。然后我用 java 代码编写了本机函数,该函数以 c++ 代码导出。我在 C++ 代码中定义了这个函数。
Java 代码:
static {
System.loadLibrary("test");
}
private native String get_text_from_cpp();
c++代码(h):
extern "C"{
JNIEXPORT jstring JNICALL Java_com_example_test_MainActivity_get_1text_1from_1cpp(JNIEnv *, jobject);
}
c++代码(cpp):
JNIEXPORT jstring JNICALL Java_com_example_test_MainActivity_get_1text_1from_1cpp(JNIEnv * env, jobject){
return env->NewStringUTF( "hello from C++" );
}
代码可以正常工作。但是当我在 c++ 代码中设置断点时,它没有被命中。
build-nkd NDK_DEBUG = 1 - 包含
我遵循了这个指示http://tools.android.com/recent/usingthendkplugin
jni/ 中的 Android.mk 具有 LOCAL_CFLAGS := -g
我已经阅读了很多信息,但我无法自定义 Eclipse。请帮助任何人。
PS:对不起,我的英语不是我的母语。我写作有困难。
添加:在控制台调试期间也显示: “警告:无法加载 95 个库的共享库符号,例如 /system/bin/linker。 使用“info sharedlibrary”命令查看完整列表。 你需要“set solib-search-path”还是“set sysroot”? 警告:无法找到动态链接器断点函数。 GDB 最终会重试。同时,很可能 GDB 无法调试共享库初始化程序 或在 dlopen() 之后解决挂起的断点。”
【问题讨论】:
-
也许,您运行了 Debug,它启动了 Java 调试器?您应该右键单击项目并选择“调试为”->“android 本机应用程序”
-
是的,我选择了“debug as”->“android native application”。在“Debug Configurates”中添加了新配置(在“Android Native Application”中)gyazo.com/567ae4fa0e8aa2363676789b7df780be
-
可能,你的app很早就执行了JNI函数,导致调试器还没准备好?从您发布的代码中,不清楚调用本机方法的位置。我建议在您的活动中使用一些按钮来启动本机方法。然后,您有机会尝试几次。
-
顺便说一句,关于 95 个库的警告是完全正常的。这些是您不想调试的系统库,并且没有源代码。
-
在onCreate()方法中调用native方法。哪些是按钮?
标签: android eclipse debugging android-ndk java-native-interface