Android - 'impossible de charger le Foo: findLibrary retourné null'
Je sais qu'il existe déjà des posts à propos de cette erreur autour de débordement de pile, mais de ce que j'ai trouvé ici sur soi et sur Google ne sont pas alignées avec mon problème.
Je suis en train de lancer mon application, mais à chaque fois qu'une fonction native est appelé mon programme se bloque, et j'ai le LogCat
...
08-01 09:15:57.448: E/AndroidRuntime(16966): FATAL EXCEPTION: main
08-01 09:15:57.448: E/AndroidRuntime(16966): java.lang.ExceptionInInitializerError
08-01 09:15:57.448: E/AndroidRuntime(16966): at my.eti.commander.MainMenu.initMain(MainMenu.java:241)
08-01 09:15:57.448: E/AndroidRuntime(16966): at my.eti.commander.MainMenu.onCreate(MainMenu.java:81)
08-01 09:15:57.448: E/AndroidRuntime(16966): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-01 09:15:57.448: E/AndroidRuntime(16966): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
08-01 09:15:57.448: E/AndroidRuntime(16966): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
08-01 09:15:57.448: E/AndroidRuntime(16966): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
08-01 09:15:57.448: E/AndroidRuntime(16966): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
08-01 09:15:57.448: E/AndroidRuntime(16966): at android.os.Handler.dispatchMessage(Handler.java:99)
08-01 09:15:57.448: E/AndroidRuntime(16966): at android.os.Looper.loop(Looper.java:130)
08-01 09:15:57.448: E/AndroidRuntime(16966): at android.app.ActivityThread.main(ActivityThread.java:3683)
08-01 09:15:57.448: E/AndroidRuntime(16966): at java.lang.reflect.Method.invokeNative(Native Method)
08-01 09:15:57.448: E/AndroidRuntime(16966): at java.lang.reflect.Method.invoke(Method.java:507)
08-01 09:15:57.448: E/AndroidRuntime(16966): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-01 09:15:57.448: E/AndroidRuntime(16966): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-01 09:15:57.448: E/AndroidRuntime(16966): at dalvik.system.NativeStart.main(Native Method)
08-01 09:15:57.448: E/AndroidRuntime(16966): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load RelayAPI: findLibrary returned null
08-01 09:15:57.448: E/AndroidRuntime(16966): at java.lang.Runtime.loadLibrary(Runtime.java:429)
08-01 09:15:57.448: E/AndroidRuntime(16966): at java.lang.System.loadLibrary(System.java:554)
08-01 09:15:57.448: E/AndroidRuntime(16966): at my.eti.commander.RelayAPIModel$NativeCalls.<clinit>(RelayAPIModel.java:432)
08-01 09:15:57.448: E/AndroidRuntime(16966): ... 15 more
Voici mon Android.mk
fichier:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
EXTRA_CFLAGS := -DANDROID
LOCAL_MODULE := RelayAPI
LOCAL_SRC_FILES := RelayAPI.c
include $(BUILD_EXECUTABLE)
Voici une photo de mon jni dossier...Seulement RelayAPI sera utilisé, stringstuff est un fichier supplémentaire qui n'est pas utilisée.
Je stocke tous mes fonctions natives dans une catégorie distincte de sorte qu'ils puissent être appelée de façon statique. Ce n'est pas le problème, parce que j'ai été de les déplacer un peu, mais j'ai décidé que ce serait la meilleure façon pour moi de le faire.
public static class NativeCalls {
static {
System.loadLibrary( "RelayAPI");
}
public native static byte InitRelayJava();
public native static void FreeRelayJava();
}
que signifie...?
Construire une bibliothèque partagée. Je pense que c'est peut-être parce que vous êtes la construction comme un exécutable. Je ne pense pas que le Système.loadLibrary pouvez charger des fichiers exécutables
Où avez-vous copié votre jar/ ou d'autres fichiers de la Bibliothèque dans votre projet??
Je n'ai vraiment aucune idée de ce que les fichiers que vous êtes en train de parler, désolé. Quel est le but des fichiers? Je ne l'ai modifier mon .c/.h/.mk fichiers dans la jni dossier et les fichiers Java dans mon répertoire /src
OriginalL'auteur JuiCe | 2012-08-01
Vous devez vous connecter pour publier un commentaire.
ne doivent pas inclure de $(BUILD_SHARED_LIBRARY) être utilisé à la place de $(BUILD_EXECUTABLE)?
OriginalL'auteur skj
Bien, j'ai obtenu passé à l'erreur. J'avais posé une autre question le mois dernier, et tout en essayant de résoudre ce problème, cette erreur a disparu. Cela avait à voir avec la configuration de mon
environment PATH variable
pour le NDK emplacement de dossier. C'est un lien vers un plus en profondeur réponse.OriginalL'auteur JuiCe
Assurez-vous de construire votre bibliothèque avant l'exécution de votre application (qui utilisent la bibliothèque) avec
ndk-build
OriginalL'auteur Ashkan
BUILD_EXECUTABLE
est mal, ce qui va générer un fichier exécutable (indice, indice..) au lieu d'une bibliothèque partagée. Lorsque vous utilisezSystem.loadLibrary(..)
vous devez utiliserBUILD_SHARED_LIBRARY
. Si ça ne fonctionne toujours pas, il pourrait y avoir une autre erreur, mais à l'aide deBUILD_EXECUTABLE
pour quelque chose destiné à être utilisé comme une bibliothèque partagée est mal, même si elle "peut" travailler dans certaines circonstances.OriginalL'auteur chrulri
J'ai eu ce problème aussi, mais pour ma situation,
Vous devez ajouter du processeur en fonction de bibliothèque à votre projet dossier libs.
Si vous utilisez eclipse.
OriginalL'auteur Nihal Pandya