2011-08-30 80 views
4

我有一个纯粹的本机应用程序,因为我用的是android_native_app_glue和入口点到我的应用程序是findClass的找不到定制的Java类

android_main(..) 

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

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

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

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) 

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

回答

0

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

这会建议您的自定义类不在类路径中。

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