Um mein Problem einzuführen, habe ich eine Anwendung mit NDK kompiliert nur für "armeabi-v7a" und "x86" ABIs. So Kompilierung gibt mir:Warum die "x86" -Bibliothek auf einem "armea-v7a" -Emulator anstelle der "armea-v7a" -Bibliothek installiert ist?
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
Mein Problem wird möglicherweise durch diese Warnung angezeigt? (Dies ist nicht die gleiche ffmpeg Version der Bibliothek auf den beiden Zielen ABIs aber ich glaube nicht, dass das Problem ist)
Dann erstelle ich einen Emulator mit CPU/ABI = (ARM) armeabi-V7A und meinem lib wurde nicht geladen, als die Anwendung gestartet wurde (aber mit einem "x86" basierten Gerät, "x86" lib ist geladen und funktioniert). Als ich es (der Emulator) mit einer Schale erkunden, das kann ich sehen:
lrwxrwxrwx install 2016-07-20 10:06 lib -> /data/app/com.**********/lib/x86
Only "x86" lib installiert ist ... Erläuterungen bitte?
(ich habe das gleiche Problem Testen auf einem Samsung Galaxy S3, sollte die CPU ein ARM Cortex-A9 sein und diese CPU implementiert ARMv7-A-Architektur. Aber meine Bibliothek ist entweder ... nicht finden)
& & & & & & & & & & & & & &, nachdem einige MANIP I FEHLER IN ANDROID.MK FIX & & & & & & & & & & & &
Wenn Sie mit Ausnahme interessiert sind dann erzeugt, wenn ich System.loadLibrary() aufrufen, dies folgt:
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)
...
Aber wenn Ich schaue in /data/app-lib/com.**********, ich finde meine "armeabi-v7a" libs !!
[email protected]:/data/app-lib/com.********** # ls
gdbserver
libNativeFFMPEG.so
libavcodec-56.so
libavutil-54.so
libswscale-3.so
Aber es ist immer noch die Ausnahme! Wenn ich versuche, swscale wie zu laden System.loadLibrary ("swscale-3"); Ich habe folgende Ausnahme bekommt:
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
Und wenn ich das gleiche versuchen zu laden avutil-54, ich habe die gleiche Ausnahme von "NativeFFMPEG" (aber mit libavutil-54.so)
Was ist in deiner endgültigen apk-Datei? Haben Sie sowohl ** x86 ** als auch ** armeabi-v7a ** Verzeichnisse mit den notwendigen Bibliotheken? Wenn nicht - schauen Sie sich ABI-Filter im Java-Modul an. – user1056837
Ja, ich habe beide in der generierten .apk, mit Bibliotheken innerhalb @ user1056837 – N0un
Ich kann vorschlagen, Java-Funktion 'System.loadLibrary()' beim Start der Anwendung zu verwenden und seine Ausnahme zu fangen. In der Ausnahmebedingungsnachricht gibt es Informationen, wo das System versucht, Ihre Bibliothek zu finden. Es könnte nützlich sein. – user1056837