Ich möchte eine vorhandene native Bibliothek aus einem anderen Android-Projekt verwenden, daher habe ich die von NDK erstellte Bibliothek ( libcalculate.so ) einfach in mein neues Android-Projekt kopiert . In meinem neuen Android-Projekt habe ich einen Ordner erstellt libs/armeabi/
und libcalculate.so dort abgelegt . Es gibt keinen jni / Ordner. Mein Testgerät verfügt über eine ARM-Architektur.
In meinem Java-Code lade ich die Bibliothek durch:
static{
System.loadLibrary("calculate");
}
Beim Ausführen meines neuen Android-Projekts wurde folgende Fehlermeldung angezeigt:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
Wie der Fehler sagt, befindet sich die kopierte native Bibliothek nicht in / verdor / lib oder / system / lib. Wie kann dieses Problem in meinem Fall behoben werden?
(Ich habe das apk-Paket entpackt, unter lib / gibt es libcalculate.so)
==== UPDATE =====
Ich habe auch versucht, einen jni / -Ordner unter dem Projektstamm zu erstellen und eine Android.mk-Datei unter jni / hinzuzufügen. Der Inhalt von Android.mk ist:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libcalculate
LOCAL_SRC_FILES := libcalculate.so
include $(PREBUILT_SHARED_LIBRARY)
Dann habe ich unter Projektstamm ndk-build ausgeführt. Danach werden die Verzeichnisse armeabi / und armeabi-v7a / von ndk-build generiert (mit libcalculate.so im Ordner).
Dann führe ich meinen Maven aus, um das Projekt erfolgreich zu erstellen. Im endgültigen apk-Paket gibt es:
lib/armeabi/libcalculate.so
lib/armeabi-v7a/libcalculate.so
Aber wenn ich meine App starte, wird der gleiche Fehler ausgelöst:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
unzip -l package.apk
oder benennen Sie die apk in .zip um und öffnen Sie sie mit einer Anwendung. Wenn es nicht vorhanden ist, stimmt etwas beim Packen nicht (hat Ihre IDE bemerkt, dass der Ordner vorhanden ist, müssen Sie das Projekt aktualisieren?).
libs/
? Sie müssen wahrscheinlich ein Unterverzeichnis pro Ziel-ABI erstellen, das Sie unterstützen möchten (armeabi, armeabi-v7a, x86, mips usw.) und die entsprechende .so-Datei in jedem Unterverzeichnis ablegen (dh die für armeabi erstellte .so-Datei wird eingegeben)libs/armeabi/
. etc).