Recopilé mis fuentes c con android-ndk luego puse el archivo .so en la carpeta libs de mi proyecto android pero cuando llamo a la función nativa tengo un error "No se encontró implementación para native" . Si trato de llamar a esta función desde adb shell todo funciona bien, así que no entiendo por qué ese error. Por favor, ayuda, AndreaNo se encontró implementación para native
Respuesta
Hay un esquema de nombres exacto relacionado con JNI que no es muy obvio. Tal vez la implementación de su función no se ajusta a eso?
Por ejemplo, si desea poder llamar a una función nativa llamada startServer desde su código JAVA, suponiendo que su paquete se llama com.example.something y su clase se llama MyClass, debe tener una función de miembro en su clase Java, así:
private native void startServer();
Y entonces su aplicación JNI debe tener este aspecto:
JNIEXPORT void Java_com_example_something_MyClass_startServer(JNIEnv *env, jobject obj) {
// Do something here...
}
De lo contrario, hay un error de vinculación.
Otra razón puede conseguir esto, es que si no estás llamando a su biblioteca en el momento que usted está haciendo una llamada a la función JNI:
static {
System.loadLibrary("myJNIFILE");
}
debe ser llamado en algún lugar antes de la referencia real a una función JNI.
¡Tienes toda la razón! Tenía una aplicación que funciona correctamente pero agregué pantallas iniciales adicionales (vistas) y bloqueos de la aplicación (tuve una advertencia de JNI quejándose de que no se podía encontrar un método "nativo"). Finalmente moví la llamada: \t estático { \t \t System.loadLibrary ("mylibrary"); \t} en la actividad responsable del lanzamiento de la aplicación. – Genar
- 1. Apache Tomcat Native library no se encontró en java.library.path?
- 2. RibbonCommand no se encontró
- 3. ld: biblioteca no se encontró para -lz
- 4. No se encontró la biblioteca para -lcommonCrypto
- 5. UIUpgradeOtherBundleIdentifier ... No se encontró documentación
- 6. MSVCR90.DLL no se encontró
- 7. org.hibernate.HibernateException: No se encontró /hibernate.cfg.xml
- 8. No se encontró JNI_OnLoad saltar init> Aplicación de apagado
- 9. Implementación eficiente de Java Native Interface Webcam Feed
- 10. No se encontró módulo denominado zlib
- 11. Evitando el "¡No se encontró EGLConfig!" Error
- 12. Tarea falló porque no se encontró al.exe,
- 13. PHP: No se encontró la clase 'Phar'
- 14. Symfony 2 No se encontró ninguna ruta para "GET /"
- 15. Android No se encontró un identificador de recursos para XLargeScreens
- 16. no se encontró ningún método adecuado para anular C#
- 17. biblioteca no se encontró para -lrt con QtCreator [Mac OS]
- 18. ld: biblioteca no se encontró para -lz.1.2.3
- 19. Causa de No se encontró el controlador adecuado para
- 20. Android AndEngine: java.lang.IllegalArgumentException: No se encontró EGLConfig
- 21. Junit ant task - JUnitTask no se encontró
- 22. No se encontró ningún punto final OpenID
- 23. java.lang.IllegalStateException: no se encontró WebApplicationContext: no se ha registrado ContextLoaderListener?
- 24. No se encontró WebApplicationContext: no se ha registrado ContextLoaderListener?
- 25. La tarea "mensaje" no se encontró
- 26. svn "no se encontró ningún elemento" error
- 27. ImageIO: ERROR - no se encontró MetadataLib.dylib
- 28. HTML Extensiones Helper no se encontró
- 29. java.util.NoSuchElementException: No se encontró ninguna línea
- 30. ¿No encontró ninguna biblioteca para Procesamiento?
mi paquete es: paquete upmt.os; y la función: public static native String upmtconf (String [] param); en la clase de Módulo. En el código c, la implementación es JNIEXPORT jstring JNICALL Java_upmt_os_Module_upmtconf (JNIEnv * env, jobject obj, jobjectArray param) –
Publique la salida de logcat para llamar a su función: tiene el nombre exacto que busca el enlazador. Si tienes algún tipo de error tipográfico, es una buena forma de atraparlo. – gby
Lo resolví. solo fue un error en el archivo MAKE con un definir. gracias de todos modos –