JNI 回调中出错



我正在研究 JNI 回调

  • 我需要从 cpp 调用 Java

我在 cpp 中的示例代码如下

JNIEXPORT jstring JNICALL
Java_com_example_arjunh_myapplication_MainActivity_getJniString(JNIEnv *env, jobject instance) {
jstring jstr = env->NewStringUTF("This string comes from JNI");
jclass clazz = env->FindClass("MainActivity");  // Error at this line
jmethodID messageMe = env->GetMethodID(clazz, "messageMe", "(Ljava/lang/String;)V");

jobject result = env->CallObjectMethod(instance, messageMe, jstr);
const char* str = env->GetStringUTFChars((jstring) result, NULL);
printf("%sn", str);
env->ReleaseStringUTFChars(jstr, str);

return env->NewStringUTF("Hello from JNI!");
}

我的Java类如下(主活动(

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btnAdd = (Button) findViewById(R.id.btnAdd);
tv = (TextView) findViewById(R.id.sample_text);
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getJniString();
}
});
}

public void messageMe(String text) {
tv.setText(text);
}

错误是

ClassNotFoundException: Didn't find class "MainActivity" on path: DexPathList[[zip file "/data/app/com.example.arjunh.myapplication-1/base.apk"],nativeLibraryDirectories=[/data/app/com.example.arjunh.myapplication-1/lib/arm64, /data/app/com.example.arjunh.myapplication-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]

如何推荐课程

jclass clazz = env->FindClass("MainActivity"(;

我认为您应该按照文档的建议指定包名称:

name:完全限定的类名(即包名,分隔 由"/",后跟类名(。如果名称以"["开头( 数组签名字符(,它返回一个数组类。字符串是 以修改后的 UTF-8 编码。

jclass clazz = env->FindClass("your/package/name/MainActivity")

最新更新