2012-03-07 16 views
5

Actualmente en mi sistema Android, he desarrollado una biblioteca nativa para comunicar con un dispositivo de medios conectado a través del controlador de Linux y estamos accediendo desde una aplicación apk a través de la interfaz nativa de Java. Esto ha estado funcionando bien hasta el ahora.Comparte una biblioteca nativa en dos aplicaciones

Pero también tenemos otra aplicación que necesita acceder a la misma biblioteca nativa en paralelo con la primera aplicación. Como era de esperar, debido a la diferente sección de datos para la biblioteca nativa enlazada en la nueva aplicación, este enfoque no está funcionando en .

Para subvertir esto, pensamos en escribir un nuevo servicio/aplicación que se vinculará con la biblioteca nativa y otras aplicaciones acceden a las API usando llamadas de enlazador al este nuevo servicio/aplicación.

Mi pregunta es:

  1. Es este nuevo enfoque viable? ¿Alguien puede ayudarme con un mejor enfoque?
  2. En caso afirmativo, también debemos devolver los almacenamientos intermedios en la API y algunas de las API son devoluciones de llamada . ¿Se pueden manejar estos tipos de funciones usando la interfaz de encuadernación?

Gracias, Ashutosh

Respuesta

0

Construir una biblioteca externa en un frasco que proporciona el más alto nivel de API que a su vez tiene acceso a la biblioteca nativa. A continuación, utilice esta biblioteca jar como cualquier otra lib. Es posible que deba verificar cómo colocar el archivo .so en el archivo jar para tener un solo archivo de biblioteca.

+0

¿Se puede compartir el archivo .so entre más de dos aplicaciones? Por ejemplo, ¿cómo hago que cualquier número de aplicaciones comparta un archivo .so común sin usar almacenamiento externo? ¿Puedes proporcionar más detalles en tu respuesta? – trusktr

+0

Esto vale una nueva pregunta. ¡Publícalo! Por ahora: no, no solo poniendo el archivo .so en la carpeta de datos de la aplicación en el dispositivo. – Bondax

0

Creo que el enfoque del servicio es exactamente cómo lo logra opencv ... específicamente, OpenCV tiene un administrador en la tienda de aplicaciones thr. Puede desarrollar una aplicación que implemente BaseLoaderCallback, que obtiene la biblioteca .so de este administrador. Detrás de escena, esto utiliza un servicio, conexión Servive y ayuda para obtener la biblioteca ... si la memoria me sirve.

actualización ...

Ahora que lo pienso, creo que OpenCV gerente podría simplemente estar pasando la ruta de acceso a la biblioteca, que luego puede ser cargado con el comando System.load, que acepta la ruta de biblioteca .

Cuestiones relacionadas