Я хочу використати існуючу рідну бібліотеку з іншого проекту 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/
, тощо).