Pour présenter mon problème, j'ai une application utilisant NDK compilé uniquement pour les ABI "armeabi-v7a" et "x86". Donc la compilation me donne:Pourquoi la bibliothèque "x86" est-elle installée sur un émulateur "armeabi-v7a" au lieu de la bibliothèque "armeabi-v7a"?
Android NDK: WARNING: APP_PLATFORM android-17 is larger than android:minSdkVersion 10 in /home/**********/AndroidManifest.xml
[armeabi-v7a] Gdbserver : [arm-linux-androideabi-4.9] libs/armeabi-v7a/gdbserver
[armeabi-v7a] Gdbsetup : libs/armeabi-v7a/gdb.setup
[x86] Gdbserver : [x86-4.9] libs/x86/gdbserver
[x86] Gdbsetup : libs/x86/gdb.setup
[armeabi-v7a] Install : libNativeFFMPEG.so => libs/armeabi-v7a/libNativeFFMPEG.so
[armeabi-v7a] Install : libavcodec-56.so => libs/armeabi-v7a/libavcodec-56.so
[armeabi-v7a] Install : libavutil-54.so => libs/armeabi-v7a/libavutil-54.so
[armeabi-v7a] Install : libswscale-3.so => libs/armeabi-v7a/libswscale-3.so
[x86] Install : libNativeFFMPEG.so => libs/x86/libNativeFFMPEG.so
[x86] Install : libavcodec-57.so => libs/x86/libavcodec-57.so
[x86] Install : libavutil-55.so => libs/x86/libavutil-55.so
[x86] Install : libswscale-4.so => libs/x86/libswscale-4.so
Mon problème est peut-être indiqué par cet avertissement? (Ce n'est pas la même version de la bibliothèque ffmpeg sur les deux ABIs cibles mais je ne pense pas que ce soit le problème)
Ensuite, je crée un émulateur avec CPU/ABI = (ARM) armeabi-V7A et mon lib n'est pas chargée lorsque l'application a démarré (mais avec un périphérique basé sur "x86", la librairie "x86" est chargée et fonctionne). Quand je l'explore (l'émulateur) avec une coquille, je peux voir que:
lrwxrwxrwx install 2016-07-20 10:06 lib -> /data/app/com.**********/lib/x86
uniquement lib « x86 » est installé ... Explications s'il vous plaît?
(j'ai le même problème sur un test Samsung Galaxy S3, la CPU doit être A9 Cortex-ARM et que cette CPU implémente ARMv7-A l'architecture. Mais ma bibliothèque trouve pas non plus ...)
& & & & & & & & & & & & & & APRÈS QUELQUES MANIP I FIX eRREUR DANS ANDROID.MK & & & & & & & & & & & & & &
Si vous êtes intéressé par exception générée quand je l'appelle System.loadLibrary(), ce suit:
07-20 12:31:23.360: D/dalvikvm(3671): Trying to load lib /data/app-lib/com.**********/libNativeFFMPEG.so 0x40cdc118
07-20 12:31:23.370: W/System.err(3671): java.lang.UnsatisfiedLinkError: Cannot load library: soinfo_link_image(linker.cpp:1635): could not load library "libswscale-3.so" needed by "libNativeFFMPEG.so"; caused by load_library(linker.cpp:745): library "libswscale-3.so" not found
07-20 12:31:23.370: W/System.err(3671): at java.lang.Runtime.loadLibrary(Runtime.java:371)
...
Mais quand Je regarde dans /data/app-lib/com.**********, je trouve mon "armeabi-v7a" libs !!
[email protected]:/data/app-lib/com.********** # ls
gdbserver
libNativeFFMPEG.so
libavcodec-56.so
libavutil-54.so
libswscale-3.so
Mais c'est toujours l'exception! Lorsque j'essaie de charger swscale comme System.loadLibrary ("swscale-3"); J'ai une exception près:
07-20 12:56:36.351: E/dalvikvm(4174): dlopen("/data/app-lib/com.**********/libswscale-3.so") failed: Cannot load library: soinfo_link_image(linker.cpp:1635): could not load library "libavutil-54.so" needed by "libswscale-3.so"; caused by load_library(linker.cpp:745): library "libavutil-54.so" not found
07-20 12:56:36.361: W/System.err(4174): java.lang.UnsatisfiedLinkError: Cannot load library: soinfo_link_image(linker.cpp:1635): could not load library "libavutil-54.so" needed by "libswscale-3.so"; caused by load_library(linker.cpp:745): library "libavutil-54.so" not found
07-20 12:56:36.361: W/System.err(4174): java.lang.UnsatisfiedLinkError: Cannot load library: soinfo_link_image(linker.cpp:1635): could not load library "libavutil-54.so" needed by "libswscale-3.so"; caused by load_library(linker.cpp:745): library "libavutil-54.so" not found
Et quand je tente la même chose pour charger avutil-54, j'ai la même exception de "NativeFFMPEG" (mais avec libavutil-54.so)
Qu'est-ce qu'il y a dans votre fichier apk final? Avez-vous les deux répertoires ** x86 ** et ** armeabi-v7a ** avec les bibliothèques nécessaires? Si non - regardez les filtres ABI dans le module Java. – user1056837
Oui, j'ai les deux dans le .apk généré, avec les bibliothèques à l'intérieur @ user1056837 – N0un
Je peux suggérer d'utiliser la fonction java 'System.loadLibrary()' au démarrage de l'application et d'attraper son exception. Dans le message d'exception il y aurait des informations, où le système essaie de trouver votre bibliothèque. Cela pourrait être utile. – user1056837