struct android_app* app = g_platform.getAndroid();
jobject clazz = app->activity->clazz;
JavaVM* java = app->activity->vm;
JNIEnv* env;
java->AttachCurrentThread(&env, NULL);
jclass activityClass = env->FindClass("android/app/NativeActivity");
// let's find our java!
jmethodID getClassLoader = env->GetMethodID(activityClass, "getClassLoader", "()Ljava/lang/ClassLoader;");
jobject cls = env->CallObjectMethod(clazz, getClassLoader);
jclass classLoader = env->FindClass("java/lang/ClassLoader");
jmethodID findClass = env->GetMethodID(classLoader, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;");
LOGI("findClass=%p", findClass);
jstring strClassName = env->NewStringUTF("com/example/native_activity/MyAct");
jclass classIWant = (jclass)env->CallObjectMethod(cls, findClass, strClassName);
LOGI("classIWnant=%p", classIWant);
jmethodID constructor = env->GetMethodID(classIWant, "<init>","()V"); // crashing
LOGI("constructor=%p", constructor);
jobject my_obj = env->CallObjectMethod(classIWant, constructor);
/* method */
jmethodID slog = env->GetMethodID(classIWant, "simpleLog","()V");
env->CallVoidMethod(my_obj, slog);
Witam.
Mam dość poważny problem z JNI, owy kod za żadne skarby nie widzi mojej klasy MyAct. Przechodzi przez cały kod, ale otrzymuję taki oto błąd:
10-02 17:30:14.277: W/dalvikvm(30128): dvmFindClassByName rejecting 'com/example/native_activity/MyActq'
Lecz jeżeli zamienię **/MyAct na nie istniejącą klasę (np. **/MyXAct) to program zaraz wywala próbując użyć classIWant (// crashing).
W manifest oczywiście mam ustawione android:hasCode="true"
Jest ktoś kto rozumie coś z tego?