Android JNI:无法在非Activity类中调用函数

时间:2012-12-27 15:07:54

标签: android android-ndk java-native-interface

我正在使用jni,我可以在c ++类的常规活动中调用java函数,但是当我尝试在非活动类中调用java函数时,我的代码不起作用。

我的意思是

 jclass activityclass = env->FindClass("com/example/test/MyActivity);
 jmethodID methodID = env->GetMethodID(activityclass,"FunctionName","()V");
 env ->CallVoidMethod(obj,methodID);

这很有效。 当我尝试从非活动的常规java类调用相同的函数(具有相同的名称)时,它不起作用。

 jclass regularclass = env->FindClass("com/example/test/MyRegularClass);
 jmethodID methodID = env->GetMethodID(regularclass ,"FunctionName","()V");
 env ->CallVoidMethod(obj,methodID);

为什么我不能在非活动类中调用函数?我的错是什么?

我的MyRegularClass

public class MyRegularClass{

  public static void FunctionName(){
 Log.i("Java Worked","Java Worked");
 }
}

我的活动课程

 public class MyActivity{

 system.load.library("mylib");

 @Override
 public void onCreate(Bundle savedInstanceState){
 ....
 ....
 testJNI();
 }

  public static void FunctionName(){
 Log.i("Activity Worked","Activity  Worked");
 }

 public native void testJNI();
 }

1 个答案:

答案 0 :(得分:0)

您需要将GetStaticMethodID()CallStaticVoidMethod()用于静态方法。这与活动中的方法无关。