调用java代码在NDK不工作

Call java code in NDK not working

本文关键字:工作 NDK java 代码 调用      更新时间:2023-10-16

我需要调用java方法。

Projekt.cpp:
jclass cls = env->GetObjectClass(obj);
jmethodID mid = env->GetMethodID(cls, "Vypocet", "(III)I");
int vysledek = env->CallIntMethod(cls, mid, nahodne_cislo, d, n);

Main.java
public Integer Vypocet(int a, int b, int c)
    {
...........other code......
...........................
         return vysl;   
    }

我不知道现在是什么?(

误差

LogCat写: Fatal signal 11 (SIGSEGV) at 0xdeadd00d

在Java代码中,声明了一个返回类型为Integer的方法(它是一个类,全名为Java .lang. integer)。

但是在你的c++代码中,你寻找一个签名为(III)I的方法,这意味着三个int参数并返回一个int值。然后使用CallIntMethod,它也期望返回int返回类型的方法。

你可以通过修改java代码来解决这个问题:

public int Vypocet(int a, int b, int c) {
    //  your code 
    return vysl;   
}

另一个解决方案是改变你的c++代码来反映Integer返回类型,像这样:

// call your java method
jclass cls = env->GetObjectClass(obj);
jmethodID mid = env->GetMethodID(cls, "Vypocet", "(III)Ljava/lang/Integer;");
jobject intObj = env->CallIntMethod(cls, mid, nahodne_cislo, d, n);
// call the Integer.getValue() to get a native int value
jclass integercls = env->GetObjectClass(intObj);
jmethodID getVal = env->GetMethodID(cls, "intValue", "()I");
int value = jenv->CallIntMethod(integervalue, getVal);