Chcę użyć istniejącej biblioteki natywnej z innego projektu systemu Android, więc właśnie skopiowałem wbudowaną bibliotekę NDK ( libcalculate.so ) do mojego nowego projektu Androida. W moim nowym projekcie na Androida utworzyłem folder libs/armeabi/
i umieściłem tam libcalculate.so . Nie ma folderu jni /. Moje urządzenie testowe ma architekturę ARM.
W moim kodzie java ładuję bibliotekę przez:
static{
System.loadLibrary("calculate");
}
Kiedy uruchamiam nowy projekt na Androida, pojawia się błąd:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
Tak więc, jak mówi błąd, skopiowanej biblioteki natywnej nie ma w / verdor / lib ani / system / lib, jak rozwiązać ten problem w moim przypadku?
(Rozpakowałem pakiet apk, pod lib / jest libcalculate.so)
==== UPDATE =====
Próbowałem również utworzyć folder jni / w katalogu głównym projektu i dodać plik Android.mk w katalogu jni /. Zawartość Android.mk to:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libcalculate
LOCAL_SRC_FILES := libcalculate.so
include $(PREBUILT_SHARED_LIBRARY)
Następnie w katalogu głównym projektu wykonałem ndk-build. Następnie katalogi armeabi / i armeabi-v7a / są generowane przez ndk-build (z libcalculate.so w folderze).
Następnie pomyślnie uruchomiłem mojego mavena, aby zbudować projekt. W ostatecznym pakiecie apk znajdują się:
lib/armeabi/libcalculate.so
lib/armeabi-v7a/libcalculate.so
Ale kiedy uruchamiam moją aplikację, ten sam błąd:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
libs/
? Prawdopodobnie musisz utworzyć jeden podkatalog dla każdego docelowego ABI, który chcesz obsługiwać (armeabi, armeabi-v7a, x86, mips, itp.) I umieścić odpowiedni plik .so w każdym podkatalogu (tj. Plik .so zbudowany dla armeabi trafialibs/armeabi/
, itp).