43 votes

NDK - Comment utiliser une bibliothèque .so générée dans un autre projet

J'ai utilisé avec succès ndk pour créer et utiliser un fichier .so dans un projet. J'ai besoin d'utiliser cette bibliothèque dans un autre projet. Je préférerais ne pas copier la source ici, mais simplement utiliser la bibliothèque. Essayer de copier-coller l'intégralité de libs / armeabi / libcommon.so à la racine du projet ne fonctionne pas, car je pense que libs / armeabi est un chemin généré par Android.

Alors, quel serait le meilleur moyen de le faire?

J'utilise Eclipse-Galileo & ndk5.

44voto

gnychis Points 396

Il existe un moyen beaucoup plus simple de faire tout cela.

Disons que votre bibliothèque prédéfinie s'appelle "libprebuilt.so"

Dans le dossier de projet du nouveau projet que vous souhaitez inclure uniquement la bibliothèque prédéfinie, procédez comme suit:

 mkdir -p jni/libprebuilt
cp libprebuilt.so jni/libprebuilt
 

Ensuite, créez simplement un fichier jni / libprebuilt / Android.mk:

 LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := libprebuilt
LOCAL_SRC_FILES := libprebuilt.so
include $(PREBUILT_SHARED_LIBRARY)
 

Ensuite, lorsque vous construirez ndk-build, cette bibliothèque sera copiée dans libs / armeabi / ... c'est tout!

21voto

OceanBlue Points 2826

J'ai trouvé une façon de le faire, afin de les poster ici au cas où quelqu'un d'autre se heurte à elle.

  1. Le code à usage en commun (y compris la Java JNI wrapper, du code natif .donc, bibliothèque), devrait être dans un projet distinct. Convertissez un projet de Bibliothèque de droit-cliquez sur le nom du projet --> propriétés --> Android propriétés --> coche "Est la Bibliothèque". Ce projet ne peut pas être exécutée maintenant mais peut être référencé par d'autres projets.

  2. Dans le projet qui va utiliser l'objet partagé, ajouter une référence à la Libarray projet par un clic-droit sur le nom du projet --> propriétés --> Android propriétés --> Bibliothèque/"Ajouter". Cela devrait montrer le projet de Bibliothèque créée à l'étape précédente. Le sélectionner.

Maintenant, la .donc, peut-être visées facilement entre les différents projets.

7voto

Komi Points 210

Il y a un nom de paquet dans tous les noms de fonctions JNI (Java Native Interface) (comme JNIEXPORT void JNICALL Java_com_myapp_myclass_funct ). Donc, je suppose que vous devriez renommer ces funkcions dans la bibliothèque pour le recompiler. Ou peut-être l'utiliser comme package externe dans votre application.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X