FindClass找不到自定义Java类

los*_*110 5 java-native-interface android android-ndk

我有一个纯本机应用程序,因为我使用android_native_app_glue,因此我应用程序的入口是

 android_main(..)
Run Code Online (Sandbox Code Playgroud)

我也有一个Java helper类型类:

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

我想从本地调用“回调”方法。我这样做是:

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);
Run Code Online (Sandbox Code Playgroud)

但是,这导致一条消息,提示myClass为null。我的“ 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)
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*enG 0

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

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

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