FindClass no puede encontrar la clase Java personalizada
Tengo una aplicación puramente nativa, ya que uso el android_native_app_glue y el punto de entrada a mi aplicación es
android_main(..)
También tengo una clase de Java tipo auxiliar:
- Cómo especificar el archivo de encabezado c en el archivo android.mk
- Android cómo mantener la biblioteca nativa cuando la aplicación se detuvo
- ¿Cómo puedo depurar eficazmente el código C que está envuelto con JNI en Eclipse? (Android Dev)
- UnsatisfiedLinkError: Método nativo no encontrado - Android
- El proceso de alojamiento del servicio de cámara ha muerto inesperadamente
package abc.def.ghi public class MyJavaClass extends Activity { public void callback() { Log.v(TAG, "In MyJavaClass"); } }
Quiero llamar al método 'callback' desde nativo. Lo hago por:
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);
Sin embargo esto da como resultado un mensaje que myClass es null. Mi puntero 'env' debería estar bien porque cuando paso "android / os / build" en FindClass, lo encuentra, pero no puedo encontrar mi clase personalizada.
En el LOGCAT, veo: "Advertencia de JNI: No se puede llamar a Labc / def / ghi; callback en instancia de Ljava / Lang / Class;"
Creo que esto significa que algo está mal con el primer parámetro de mi CallVoidMethod. Noté en los otros ejemplos que la mayoría de la gente realiza su CallVoidMethod dentro de una función con una firma que es generada por javah, y utilizan el parámetro obj
en su CallVoidMethod
:
JNIEXPORT void JNICALL function(JNIEnv *env, jobject obj, jstring s)
Sin embargo no puedo usar esto porque el punto de entrada de mi aplicación es en nativo.
- Cambiar Actividad con JNI Llamar o usar Openfeint provoca App-Crash
- C ++ y JNI - Cómo pasar una matriz en un jfloatArray
- NewGlobalRef para jmethodID
- Acceso a datos sin procesar en ARGB_8888 Android Bitmap
- Defragment H264 NAL corriente (originalmente 1722 avb paquetes)
- Javah: Error: no se puede acceder a android.support.v7.app.ActionBarActivity
- Env-> FindClass función devuelve null
- java.lang.UnsatisfiedLinkError: Método nativo no encontrado
Sin embargo esto da como resultado un mensaje que myClass es null. Mi puntero 'env' debería estar bien porque cuando paso "android / os / build" en FindClass, lo encuentra, pero no puedo encontrar mi clase personalizada.
Esto sugeriría que sus clases personalizadas no están en el classpath.
Tenga en cuenta que al crear una máquina virtual puede pasar opciones, incluida la configuración de classpath para incluir el directorio actual (o donde lo desee).
- Android Market dice que mi aplicación "no está en el grupo de destino" o que "no se puede instalar en este dispositivo"
- Android adb velocidad usb