Android NDK: llamando al método java de clase JNI C
Tengo el método de JNI donde estoy intentando llamar el método de Java. Aquí está mi código JNI
void DummySink::afterGettingFrame(unsigned frameSize, unsigned numTruncatedBytes, struct timeval presentationTime, unsigned /*durationInMicroseconds*/) { __android_log_print(ANDROID_LOG_VERBOSE, "RTSP", "Frame: %c", propRec->sPropBytes); jmethodID mid; jclass handlerClass = env9->FindClass("ob/android/Stream"); if (handlerClass == NULL) { __android_log_print(ANDROID_LOG_VERBOSE, "RTSP-Error", "Class"); } mid = env9->GetMethodID(handlerClass, "onResponse", "([B)V"); if (mid == NULL) { __android_log_print(ANDROID_LOG_VERBOSE, "RTSP-Error", "Method"); } jbyteArray jbArray = env9->NewByteArray((int)propRec->sPropLength); env9->SetByteArrayRegion(jbArray, 0, (int)propRec->sPropLength, (jbyte*)propRec->sPropBytes); //jobject theClass = env9->FindClass("ob/android/Stream"); env9->CallVoidMethod(handlerClass, mid, jbArray); }
Aquí está el código Java que tengo
- Uso de Android NDK
- Cómo utilizar el compilador arm-linux-androideabi
- No se pudo cargar (encontrar) la biblioteca j2v8_android_x86
- Integración NDK en el estudio Android
- Obtención de punto flotante de hardware con android NDK
public void onResponse(byte[] str) { Log.v("Response", "Java"); }
Estoy recibiendo después de un accidente
03-08 16:01:05.915: W/dalvikvm(17552): JNI WARNING: can't call Lob/android/Stream;.onResponse on instance of Ljava/lang/Class; 03-08 16:01:05.915: W/dalvikvm(17552): in Lob/android/Stream;.stream:()V (CallVoidMethodV)
Después de aplicar la respuesta de Mah, aquí está la excepción que estoy recibiendo
03-08 16:40:20.646: W/dalvikvm(4076): JNI WARNING: JNI method called with exception pending 03-08 16:40:20.646: W/dalvikvm(4076): in Lob/android/Stream;.stream:()V (NewByteArray) 03-08 16:40:20.646: W/dalvikvm(4076): Pending exception is: 03-08 16:40:20.646: I/dalvikvm(4076): java.lang.NoSuchMethodError: no method with name='onResponse' signature='([B)V' in class Lob/android/Stream; 03-08 16:40:20.646: I/dalvikvm(4076): at ob.android.Stream.stream(Native Method) 03-08 16:40:20.646: I/dalvikvm(4076): at ob.android.Stream.<init>(Stream.java:28) 03-08 16:40:20.654: I/dalvikvm(4076): at ob.android.MainActivity.startRecording(MainActivity.java:203)
Ahora el método onResponse es estático.
- ¿Cómo implementar mbtowc para android? (O, idealmente, ¿cómo no hacerlo?)
- Errores del indexador de Eclipse al usar STL con Android NDK
- Opencv Android: java.lang.UnsatisfiedLinkError: dlopen falló: no se pudo cargar la librería "libopencv_java.so"
- Android ndk: Problema para la llamada del método Java desde c ++ con jni
- Cómo utilizar los archivos de encabezado precompilados en Android NDK
- ¿Los binarios construidos para ARM funcionarán con procesadores Intel?
- Cómo obtener la ruta de la carpeta temporal de código nativo en Android?
- Cómo utilizar OpenSSL Library en la aplicación ANDROID
Su método Java es un método de instancia (no estático), pero su código nativo no se refiere a ninguna instancia específica de ob.android.Stream
para llamar a onResponse()
para.
Cuando llama a CallVoidMethod()
, el primer parámetro es ser la instancia (objeto) que está ejecutando el método en contra, no la clase en sí. La clase en sí se usaría si estuviera usando CallStaticVoidMethod()
.
- ¿View.removeAllViews () libera memoria?
- Establecer el ancho y la altura de ImageView de forma programática en un widget