Я хочу использовать существующую собственную библиотеку из другого проекта Android, поэтому я просто скопировал встроенную библиотеку NDK ( libcalculate.so ) в свой новый проект Android. В моем новом проекте Android я создал папку libs/armeabi/
и поместил туда libcalculate.so . Там нет нет JNI / папки. У моего тестового устройства архитектура ARM.
В моем java-коде я загружаю библиотеку:
static{
System.loadLibrary("calculate");
}
Когда я запускаю свой новый проект Android, у меня появляется ошибка:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
Итак, как говорится в ошибке, скопированная собственная библиотека не находится в / verdor / lib или / system / lib, как решить эту проблему в моем случае?
(Я распаковал apk-пакет, в lib / есть libcalculate.so)
==== ОБНОВЛЕНИЕ =====
Я также попытался создать папку jni / в корне проекта и добавить файл Android.mk в папку jni /. Содержимое Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libcalculate
LOCAL_SRC_FILES := libcalculate.so
include $(PREBUILT_SHARED_LIBRARY)
Затем в корне проекта я выполнил ndk-build. После этого каталоги armeabi / и armeabi-v7a / создаются с помощью ndk-build (с libcalculate.so внутри папки).
Затем я запускаю свой maven и успешно создаю проект. В финальном пакете apk есть:
lib/armeabi/libcalculate.so
lib/armeabi-v7a/libcalculate.so
Но когда я запускаю свое приложение, возникает та же ошибка:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
libs/
? Вероятно, вам нужно создать один подкаталог для каждого целевого ABI, который вы хотите поддерживать (armeabi, armeabi-v7a, x86, mips и т. Д.), И поместить соответствующий файл .so в каждый подкаталог (т. Е. Файл .so, созданный для armeabi, входитlibs/armeabi/
, так далее).