2011-10-28 12 views
7

J'ai une librairie partagée libfoo.so et j'ai besoin de l'utiliser dans mon application android.comment inclure des bibliothèques partagées précompilées dans apk avec eclipse

Mon premier essai était d'avoir à Android.mk:

include $(CLEAR_VARS) 
LOCAL_MODULE := test 
LOCAL_SRC_FILES := test.cpp 
LOCAL_LDLIBS := -L$(PATH_TO_FOO) -lfoo 
include $(BUILD_SHARED_LIBRARY) 

dans mon activité, j'ai:

statis 
{ 
    System.loadLibrary("foo"); 
} 

Cela construit correctement, mais je ne marche pas remarqué que apk créé comprennent libfoo. donc (aussi je vois qu'il n'est pas copié à libs/armeabi). Je suppose que pour cette raison, j'ai UnsatisfiedLinkError lors de l'exécution de mon application.

j'ai vu dans certains autres postes que je dois ajouter $ (PREBUILD_SHARED_LIBRARY), donc j'ajouter ce qui suit à mon Android.mk:

include $(CLEAR_VARS) 
LOCAL_MODULE:= foo 
LOCAL_SRC_FILES := $(FOO_PATH)/libfoo.so 
include $(PREBUILD_SHARED_LIBRARY) 

Mais maintenant, je reçois l'erreur de construction:

foo: LOCAL_SRC_FILES points to a missing file. 

Je suis sûr que le chemin est correct. Notez que libfoo.so avait originellement le numéro de version à la fin, bien que je devais le supprimer (et ne laisser que .so) puisque ndk-build se plaignait.

Qu'est-ce que je fais mal?

Répondre

5

L'inclure semble être mal orthographié:

include $(PREBUILD_SHARED_LIBRARY) 

devrait être

include $(PREBUILT_SHARED_LIBRARY) 
1

En éclipse, j'ajoute une bibliothèque statique en copiant le fichier dans le chemin projet/libs/armeabi/et reconstruire le projet après l'avoir nettoyé. Cela inclut le .so dans l'apk.

+0

Cela ne fonctionne pas pour moi (ADT22, Indigo, NDK-r9). La lib est supprimée lors de la construction. – WindRider

5

Trouvé la solution !! LOCAL_SRC_FILES ne peut pas avoir de chemins absolus ou relatifs, juste le nom de fichier. Le chemin doit être défini dans LOCAL_PATH.

Donc, dans mon cas, au lieu de:

LOCAL_SRC_FILES := $(FOO_PATH)/libfoo.so 

J'ai maintenant:

LOCAL_PATH := $(FOO_PATH) 
LOCAL_SRC_FILES := libfoo.so 

Et cela fonctionne bien.

+0

hey .. pouvez-vous mettre un peu de lumière dessus. m face au même problème. J'ai 3 fichiers .so à charger, que dois-je écrire dans le fichier .mk? –

+2

Downvote. LOCAL_SRC_FILES peut certainement contenir des chemins relatifs. –

+0

oui convenu qu'il peut avoir des chemins relatifs. – pauld

Questions connexes