FindClass找不到自定义Java类

时间:2011-08-30 19:09:02

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

我有一个纯粹的原生应用程序,因为我使用android_native_app_glue并且我的应用程序的入口点是

 android_main(..)

我还有一个Java助手类型类:

 package abc.def.ghi
 public class MyJavaClass extends Activity
 {
      public void callback() 
      {
          Log.v(TAG, "In MyJavaClass");
      }
 }

我想从native调用'callback'方法。我是这样做的:

jclass myClass = env->FindClass("abc/def/ghi/MyJavaClass");
if( myClass == NULL )
    LOGI("myClass null");
jmethodID mid = m_pEnv->GetMethodID(myClass, "callback", "()V");
if( mid == NULL )
    LOGI("MID null");
m_pEnv->CallVoidMethod(myClass, mid);

然而,这会导致myClass为空的消息。我的'env'指针应该没问题,因为当我在FindClass中传递“android / os / build”时,它会找到它,但找不到我的自定义类。

在LOGCAT中,我看到:      “JNI警告:不能调用Labc / def / ghi;对Ljava / Lang / Class实例进行回调;”

我认为这意味着我的CallVoidMethod的第一个参数出错了。 我注意到在其他示例中,大多数人在具有由javah生成的签名的函数内执行其CallVoidMethod,并且他们在obj中使用CallVoidMethod参数:

  JNIEXPORT void JNICALL function(JNIEnv *env, jobject obj, jstring s)

但是我不能使用它,因为我的应用程序的入口点是原生的。

1 个答案:

答案 0 :(得分:0)

  

然而,这会导致myClass为空的消息。我的'env'指针应该没问题,因为当我在FindClass中传递“android / os / build”时,它会找到它,但找不到我的自定义类。

这表明您的自定义类不在类路径中。

请注意,在创建VM时,您可以传递选项,包括将类路径设置为包含当前目录(或任何您喜欢的位置)。

相关问题