Android原生C ++函数调用导致应用程序崩溃

时间:2017-10-02 14:47:57

标签: android c++ java-native-interface

我有Android应用,我需要使用C ++代码。但我意识到,我有调用C ++函数的问题。我已经读过一些关于它的东西,并尝试写一些东西,我认为它可以工作。这是我的代码:

private native int test(int a);
private void process() {
    int ret=test(5);
    Toast.makeText(this, String.valueOf(ret), Toast.LENGTH_LONG).show();
}

我的C ++代码是:

#include <jni.h>
extern "C"
JNIEXPORT jint JNICALL
Java_com_example_woodem_woodem_1opencvgrains_Main_test(JNIEnv *env, jint a) 
{
    return a*a;
}

当然,我的真正功能要复杂得多,我需要传递大约6个参数,但我希望,这可以说明。

注意:即使这段代码对我也不起作用。

我的应用程序在调用process()后立即崩溃。你能告诉我,我做错了什么?编译器什么也没告诉我,我不知道问题在哪里。

2 个答案:

答案 0 :(得分:1)

你忘记了第二个论点。例如,方法void test()将具有JNI签名JNIEXPORT void JNICALL Java..._test(JNIEnv *env, jobject thiz)。在您的情况下,请将签名编辑为(JNIEnv *env. jobject thiz, jint a)

修改

之前的版本显示了静态功能的签名。我已经更新它以匹配实例功能。

对于静态签名是(JNIEnv *env, jclass clazz)

答案 1 :(得分:0)

您已将您的本机函数声明为private native int test();,并将整数参数传递给它。 它应该是private native int test(int num);