gpt4 book ai didi

java - Android 上的 JNI : How to retrieve a string from Java code?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:49:09 27 4
gpt4 key购买 nike

我阅读了很多在 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:

我哪里错了...?

固定感谢 Mario,从签名中删除“jobject obj”解决了我的问题!

最佳答案

到目前为止只写了一个简短的测试(类似于你的程序),但我的函数有一点不同的签名(可能取决于 SDK/NDK/JDK 版本?从我找到的一些教程代码中获取):

extern "C" void Java_com_whatever_Activity_method(JNIEnv* env, jobject jthis, jstring param);

显然,如果您不编写 C++,则不需要 extern "C"

Java 签名将是:

native void method(String param);

编辑:

要获取字符串(不确定这是否 100% 正确,但它有效):

const char *cparam = env->GetStringUTFChars(param, 0);
// .. do something with it
env->ReleaseStringUTFChars(param, cparam);

如果其中有问题,欢迎提出建议。它工作正常,但可能仍然存在一些问题,请随时发表评论。

关于java - Android 上的 JNI : How to retrieve a string from Java code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9087126/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com