Я прочитал много примеров, чтобы получить строку Java в коде C / C ++, но мне кажется, что я что-то упустил. этот простой код не работает ..
В ActivityTest (Java-код Android) я:
public static native void nativeInit(String stringfromjava);
В TestActivity у меня есть:
ActivityTest.nativeInit("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:
Где я не прав ...?
FIXED
Благодаря Марио, удаление «jobject obj» из подписи устранило мою проблему!