2012-02-01 5 views
8

J'ai mis en œuvre une application Android JNI. Cette application nécessite quelques 'Libs partagées' supplémentaires à inclure dans le fichier APK. En utilisant Ecplise, j'ai ajouté ces libs au dossier '/ libs/armeabi' du projet. Cependant, lors du lancement de l'application (via le débogueur intégré), les «librairies partagées» ajoutées sont supprimées du dossier «armeabi».Android JNI APK Emballage

  • Comment puis-je empêcher ces bibliothèques supplémentaires d'être supprimées?
  • Comment puis-je m'assurer que les SO supplémentaires requis sont compressés dans l'APK?

Répondre

9

Vous n'avez pas besoin de copier vous-même ces bibliothèques dans le dossier libs. Ce travail doit être effectué par le ndk-build.

Ces deux étapes devraient être assez:

  1. Créer mylibs (vous pouvez utiliser un autre nom à la place) dossier sur le niveau de la racine de votre projet. Et mettez vos bibliothèques dans ce dossier.

  2. Pour chaque bibliothèque ajouter les lignes suivantes avant l'instruction include $(CLEAR_VARS) remplacement mylib avec vous nom de la bibliothèque:

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

(Vous pourriez avoir besoin chemin légèrement différent pour LOCAL_SRC_FILES Cela dépend de votre configuration Eclipse..

+1

Ayant ce qui précède fait, c'est ce que je reçois pendant le processus de construction: ndroid NDK: jni/Android.mk: swscale: LOCAL_MODULE_FILENAME ne doit pas inclure les extensions de fichier Android NDK: ERREUR: jni/Android.mk: swscale: LOCAL_SRC_FILES doit pointer vers un fichier se terminant par ".a" – NadavRub

+1

Correction. Il devrait y avoir 'PREBUILT_SHARED_LIBRARY' au lieu de' PREBUILT_STATIC_LIBRARY'. –

1

Une note supplémentaire à ajouter dans ce contexte est que le chemin vers la SharedLib externe DOIT ÊTRE RELIÉ au répertoire jni (ou à tout ce qui est spcifié @ LOCAL_PATH), c'est-à-dire, "LOC AL_SRC_FILES: = ../../../Android/ffmpeg/libavcodec/libavcodec.so "fonctionnera là où le chemin absolu ne le fera pas.