我有一个纯粹的原生应用程序,因为我使用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)
但是我不能使用它,因为我的应用程序的入口点是原生的。
答案 0 :(得分:0)
然而,这会导致myClass为空的消息。我的'env'指针应该没问题,因为当我在FindClass中传递“android / os / build”时,它会找到它,但找不到我的自定义类。
这表明您的自定义类不在类路径中。
请注意,在创建VM时,您可以传递选项,包括将类路径设置为包含当前目录(或任何您喜欢的位置)。