¿Cómo llamo el código C / C ++ de Android usando JNA?

Estoy tratando de integrar esta biblioteca específica a mi proyecto de Android, y la biblioteca está escrita en C / C ++. ndk-build para darme el archivo .so necesario.

Sin embargo, mirándolo, hay una muestra en el proyecto, y usan un misterioso .jar con los enlaces API de los .c / c++ .

Como yo tampoco

  • crear este archivo .jar especial que tiene la API, basado en el .so ?

O

  • ¿Agregar directamente un método al archivo c++ principal y luego llamarlo desde Java?

He intentado volver a envolver las cosas usando JNI, pero definitivamente no parece funcionar. UnsatisfiedLinkError recibiendo UnsatisfiedLinkError .

Mucha de la documentación en línea utiliza jni como tutorial. Estoy contento con solo algunos enlaces a tutoriales sobre JNA.

JNA proporciona una biblioteca nativa de código auxiliar, libjnidispatch.so para una variedad de plataformas. Puede crear esta biblioteca usted mismo o extraer uno de los archivos binarios predefinidos de los paquetes lib/native/.jar .

libjnidispatch.so en tu proyecto de Android como lo harías con cualquier otra biblioteca JNI. Esto es requerido; no puede confiar en JNA para descomprimir dinámicamente y usar su biblioteca nativa automáticamente como en otras plataformas. El proyecto JNA incluye detalles para hacerlo (así como instrucciones para crear libjnidispatch.so usted mismo).

Luego, utiliza jna.jar como lo haría con cualquier otro archivo jar de Java, y escriba sus propias asignaciones (Java) para que coincidan con la biblioteca nativa a la que intenta acceder. También hay un jna-min.jar que omite todas las bibliotecas de plataformas nativas que normalmente se incluyen en jna.jar .

Vaya a las propiedades del proyecto y cree rutas y elimine JNA 4.0 y clases relacionadas. Esto funcionará!