【发布时间】:2012-01-31 21:20:23
【问题描述】:
我阅读了很多示例来检索 C/C++ 代码中的 java 字符串,但似乎我错过了一些东西。这个简单的代码不起作用..
在 ActivityTest(android java 代码)中我已经:
public static native void nativeInit(String stringfromjava);
在 TestActivity 我有:
ActivityTest.nativeInit("test");
在我的 test-jni.c 中:
JNIEXPORT void JNICALL Java_com_test_jni_ActivityTest_nativeInit(JNIEnv* env, jclass cls, jobject obj, jstring stringfromjava){
__android_log_print(ANDROID_LOG_INFO, "TESTJNI","Native Init started");
const char* w_buf = (*env)->GetStringUTFChars(env, stringfromjava, 0);
if(w_buf == NULL) {
__android_log_print(ANDROID_LOG_INFO, "TESTJNI","file path recv nothing");
}
else {
__android_log_print(ANDROID_LOG_INFO, "TESTJNI","String: %s", w_buf);
}
(*env)->ReleaseStringUTFChars(env, stringfromjava, w_buf);
}
但在我的 logcat 中,我只得到:
I/TESTJNI (18921): Native Init started
I/TESTJNI (18921): String:
我哪里错了...?
已修复 感谢马里奥,从签名中删除“jobject obj”解决了我的问题!
【问题讨论】:
-
如果马里奥的回答为您解决了问题,您应该将他的回答标记为已接受(点击他回答旁边的勾号)。
-
你有没有像这样在Java中添加一个静态块:
static { nativeInit(); }
标签: java android c++ c android-ndk