Android本机C 函数呼叫导致应用程序崩溃

Android native C++ function call cause application crash

本文关键字:应用程序 崩溃 呼叫 本机 函数 Android      更新时间:2023-10-16

我有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个论点,但是我希望这可以说明。

注意:即使此代码对我不起作用。

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

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

编辑

以前的版本显示了静态功能的签名。我已将其更新以匹配实例函数。

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

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