2016-07-20 35 views
0

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)

+0

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

+0

Ja, ich habe beide in der generierten .apk, mit Bibliotheken innerhalb @ user1056837 – N0un

+0

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

Antwort

1

Endlich löste ich mein Problem mit der Hilfe von @ user1056837.

Merkwürdig ich suchen müssen, ist, dass:

Für ABI „x86“ (? Zumindest), wenn Sie einen libmylib.so verwenden möchten, die auf anderen Bibliotheken abhängig ist, müssen Sie nur noch laden libmylib .so:

System.loadLibrary("mylib"); 

Aber für ABI "armeabi-V7A" (mindestens?), müssen Sie manuell Ihre lib laden, Abhängigkeiten Ihre lib und Ihre lib Abhängigkeit von Abhängigkeiten ...

System.loadLibrary("dep1"); 
System.loadLibrary("dep2"); 
System.loadLibrary("mylib"); 

Ich habe keine klare Erklärung für jetzt, aber ich werde es finden. Ich hoffe, es kann jemandem helfen.

EDIT: Das Problem ist nicht über die Ziel-arch, sondern über meine native Code/Bibliotheken-Kompilierung.