2016-05-27 12 views
0

Guten Tag. Ich habe eine Bibliothek .so das funktioniert gut auf x86 Android. Wie verwende ich diese Bibliothek in Java?Verwenden Sie Android .so in Java-Code

System.getProperty("sun.arch.data.model").equals("32"); 

true

static 
    { 
     System.loadLibrary("full/path/to/library/liblibrary.so"); 
    } 

Exception in thread "main" java.lang.UnsatisfiedLinkError: no full/path/to/library/liblibrary.so in java.library.path

Vielleicht eine Bibliothek von Android NDK es verwenden?

+1

Wenn Sie den vollständigen Pfad haben, könnten Sie ' '' System.load''' anstelle von '' loadLibrary'''. Die Zeichenfolge, die Sie in '' 'loadLibrary''' eingeben, wird einem plattformspezifischen Bibliotheksnamen zugeordnet. Sie können das Ergebnis sehen, indem Sie '' 'System.mapLibraryName''' aufrufen. Iirc, auf Linux, "Bibliothek" würde "liblibrary.so" zugeordnet werden. –

+0

Thx. System.load - arbeiten. Aber jetzt ein neuer Fehler: Ausnahme im Thread "Haupt" java.lang.UnsatisfiedLinkError: library.so: Kann nicht geladen werden. DLL (Maschinencode = 0x34) auf einer AMD 64-Bit-Plattform Ich versuche auch x86 JVM Ausnahme im Thread "main" java.lang.UnsatisfiedLinkError: library.so: Kann diese .dll (Maschinencode = 0x34) auf einer IA 32-Bit-Plattform nicht laden – user3504724

+0

Ich kann nicht helfen ... sorry. –

Antwort

0

Das Argument für System.loadLibrary ist ein Bibliotheksname, der vom Programmierer willkürlich ausgewählt wird. Das System folgt einem standardmäßigen, aber plattformspezifischen Ansatz, um den Bibliotheksnamen in einen nativen Bibliotheksnamen umzuwandeln. Zum Beispiel wandelt ein Solaris-System den Namen pkg_Cls zu libpkg_Cls.so, während ein Win32-System die gleiche pkg_Cls Namen pkg_Cls.dll konvertiert

Mehr von hier at Oracle's JNI documentation