Je souhaite utiliser une bibliothèque native existante à partir d' un autre projet Android, je viens donc de copier la bibliothèque intégrée NDK ( libcalculate.so ) dans mon nouveau projet Android. Dans mon nouveau projet Android, j'ai créé un dossier libs/armeabi/
et mis libcalculate.so là-bas. Il n'y a pas de dossier jni /. Mon appareil de test a une architecture ARM.
Dans mon code java, je charge la bibliothèque par:
static{
System.loadLibrary("calculate");
}
Lorsque je lance mon nouveau projet Android, j'ai une erreur:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
Donc, comme le dit l'erreur, la bibliothèque native copiée n'est pas dans / verdor / lib ou / system / lib, comment résoudre ce problème dans mon cas?
(J'ai décompressé le paquet apk, sous lib / il y a libcalculate.so)
==== MISE À JOUR =====
J'ai également essayé de créer un dossier jni / sous la racine du projet et d'ajouter un fichier Android.mk sous jni /. Le contenu d'Android.mk est:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libcalculate
LOCAL_SRC_FILES := libcalculate.so
include $(PREBUILT_SHARED_LIBRARY)
Ensuite, sous la racine du projet, j'ai exécuté ndk-build. Après cela, les répertoires armeabi / et armeabi-v7a / sont générés par ndk-build (avec libcalculate.so dans le dossier).
Ensuite, je lance mon maven construire le projet avec succès. Dans le package apk final, il y a:
lib/armeabi/libcalculate.so
lib/armeabi-v7a/libcalculate.so
Mais lorsque j'exécute mon application, la même erreur renvoie:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
libs/
? Vous devez probablement créer un sous-répertoire par ABI cible que vous souhaitez prendre en charge (armeabi, armeabi-v7a, x86, mips, etc.) et placer le fichier .so approprié dans chaque sous-répertoire (c'est-à-dire que le fichier .so construit pour armeabi entrelibs/armeabi/
, etc).