У меня чисто нативное приложение, так как я использую android_native_app_glue и точка входа в мое приложение
android_main(..)
У меня также есть класс типа помощника Java:
package abc.def.ghi
public class MyJavaClass extends Activity
{
public void callback()
{
Log.v(TAG, "In MyJavaClass");
}
}
Iхочу вызвать метод обратного вызова из native.Я делаю так:
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 имеет значение null.Мой указатель 'env' должен быть в порядке, потому что когда я передаю "android / os / build" в FindClass, он находит его, но не может найти свой пользовательский класс.
В LOGCAT я вижу: "Предупреждение JNI:Невозможно вызвать Labc / def / ghi; обратный вызов для экземпляра Ljava / Lang / Class; "
Я думаю, это означает, что что-то не так с первым параметром моего CallVoidMethod.В других примерах я заметил, что большинство людей выполняют свой CallVoidMethod в функции с сигнатурой, сгенерированной javah, и они используют параметр obj
в своих CallVoidMethod
:
JNIEXPORT void JNICALL function(JNIEnv *env, jobject obj, jstring s)
Однако я не могуиспользуйте это, потому что точка входа моего приложения в нативном.