2012-02-01 18 views
8

He implementado una aplicación de Android JNI. Esta aplicación requiere que se empaqueten algunas 'Libs compartidas' como parte del APK. Usando Ecplise, he agregado estas librerías a la carpeta '/ libs/armeabi' del proyecto.Android JNI APK Embalaje

Sin embargo, al iniciar la aplicación (a través del depurador integrado), mis "Libras compartidas" agregadas se eliminan de la carpeta 'armeabi'.

  • ¿Cómo puedo evitar que estas bibliotecas adicionales se eliminen?
  • ¿Cómo puedo asegurarme de que los SO adicionales requeridos estén empaquetados en el APK?

Respuesta

9

No necesita copiar estas bibliotecas a la carpeta libs usted mismo. Este trabajo debe hacerse por el ndk-build.

Estos dos pasos deberían ser suficientes:

  1. Crear mylibs (se puede utilizar cualquier otro nombre en su lugar) carpeta en el directorio raíz del proyecto. Y ponga sus bibliotecas en esta carpeta.

  2. Para cada biblioteca de añadir las siguientes líneas antes de la declaración include $(CLEAR_VARS) sustituyendo mylib contigo nombre de la biblioteca:

    include $(CLEAR_VARS) 
    LOCAL_MODULE:=mylib 
    LOCAL_SRC_FILES:=../mylibs/libmylib.so 
    include $(PREBUILT_SHARED_LIBRARY) 
    

(Es posible que necesite un poco diferente camino para LOCAL_SRC_FILES Depende de su configuración de Eclipse..)

+1

vez hecho lo anterior, esto es lo que me pasa durante el proceso de construcción: ndroid NDK: JNI/Android.mk: swscale: LOCAL_MODULE_FILENAME no debe incluir extensiones de archivo Android NDK: ERROR: JNI/Android.mk: swscale: LOCAL_SRC_FILES debe señalar a un archivo que termina con ".a" – NadavRub

+1

Fixed. Debería haber 'PREBUILT_SHARED_LIBRARY' en lugar de' PREBUILT_STATIC_LIBRARY'. –

1

Una nota más para agregar en este contexto es que la ruta a la SharedLib externa DEBE SER relativa al directorio jni (o a cualquier spcified @ LOCAL_PATH), es decir, "LOC" AL_SRC_FILES: = ../../../Android/ffmpeg/libavcodec/libavcodec.so "funcionará donde la ruta absoluta no.