使用 C++ 语言从 ndk 调用方法 String java
Call method String java from ndk with languge c++
我想在 java 中调用方法并将字符串返回到 ndk,但是当我调用 java 方法时我的应用程序会崩溃。
我检查了更多的 Whosebug 站点,但是当我使用其他代码时,它不起作用。
帮我谢谢
在 ndk 代码中:
extern "C"
JNIEXPORT jstring JNICALL
Java_com_hppni_battleword_view_SplashScreen_tkk(JNIEnv *env, jclass type) {
jclass jClass = env->FindClass("com/hppni/battleword/view/SplashScreen");
if (jClass != nullptr) {
jmethodID mid2 = env->GetStaticMethodID(jClass, "encryptThisString",
"(Ljava/lang/String;)Ljava/lang/String;"); // app will crash here
if (mid2 != nullptr) {
env->CallStaticVoidMethod(jClass, mid2, (jstring) "ali"); // app will crash here
}
}
return env->NewStringUTF(getSignature(env));
}
里面 java class/Activity :
public static String encryptThisString(String input) {
Log.d("NDK", input);
return input;
}
您不能只将 char *
字符串转换为 jstring
。例如,您需要使用 NewStringUTF
等 JNI 函数创建 jstring
对象。
我想在 java 中调用方法并将字符串返回到 ndk,但是当我调用 java 方法时我的应用程序会崩溃。 我检查了更多的 Whosebug 站点,但是当我使用其他代码时,它不起作用。 帮我谢谢
在 ndk 代码中:
extern "C"
JNIEXPORT jstring JNICALL
Java_com_hppni_battleword_view_SplashScreen_tkk(JNIEnv *env, jclass type) {
jclass jClass = env->FindClass("com/hppni/battleword/view/SplashScreen");
if (jClass != nullptr) {
jmethodID mid2 = env->GetStaticMethodID(jClass, "encryptThisString",
"(Ljava/lang/String;)Ljava/lang/String;"); // app will crash here
if (mid2 != nullptr) {
env->CallStaticVoidMethod(jClass, mid2, (jstring) "ali"); // app will crash here
}
}
return env->NewStringUTF(getSignature(env));
}
里面 java class/Activity :
public static String encryptThisString(String input) {
Log.d("NDK", input);
return input;
}
您不能只将 char *
字符串转换为 jstring
。例如,您需要使用 NewStringUTF
等 JNI 函数创建 jstring
对象。