私はオンラインでたくさんの投稿を見つけましたが、それらのどれも私がそれを正しくするのを助けてくれなかったようです。
私の問題は、ndkc++部分からandroidjava関数を呼び出したいことです。
私がクラスを取得するとき:
jclass icls = jenv->GetObjectClass(obj);
このエラーが発生します: E / AndroidRuntime(27397):java.lang.NoSuchMethodError:クラスLjava / lang/Classにname='setValues'signature='()V'のメソッドがありません。 => jmid == 0
以下のように「FindClass」で呼び出すと、次のエラーが発生します。A / libc(26692):0x00000004(code = 1)の致命的なシグナル11(SIGSEGV)、スレッド26743(Thread-8302)
findclassとメソッドは機能しているようです(!= 0)ので、 objに問題がある可能性がありますか?
誰?事前にThx..
JAVA-メインクラス:
package com.new.test;
class Test{
public Test(Context context, AttributeSet attrs) {
super(context, attrs);
run();
}
run(){
int x = 10;
new DoStuff(x);
}
public void setValues(){
Log.e("","SET VALUES");
}
}
JAVA 2 JNI:
public class DoStuff{
public DoStuff(int x){
nativeDoStuff(x);
}
private static native long nativeDoStuff(int x);
static{
System.loadLibrary("do_stuff");
}
}
C ++:cpp
JNIEXPORT void JNICALL Java_com_new_test_DoStuff_nativeDoStuff (JNIEnv * jenv, jobject obj, jint x){
jclass icls = jenv->FindClass("com/new/test/Test");
//jclass icls = jenv->GetObjectClass(obj);
jmethodID jmid = jenv->GetMethodID(icls, "setValues","()V");
jenv->CallVoidMethod(obj,jmid);
}
C ++:h
JNIEXPORT void JNICALL Java_com_new_test_DoStuff_nativeDoStuff (JNIEnv *, jobject, jint);