Saya ingin menggunakan library native yang sudah ada dari project Android lain , jadi saya baru saja menyalin library yang dibuat NDK ( libcalculate.so ) ke project Android baru saya. Dalam proyek Android baru saya, saya membuat folder libs/armeabi/
dan meletakkan libcalculate.so di sana. Tidak ada jni / folder. Perangkat pengujian saya memiliki arsitektur ARM.
Dalam kode java saya, saya memuat perpustakaan dengan:
static{
System.loadLibrary("calculate");
}
Ketika saya menjalankan proyek android baru saya, saya mendapat kesalahan:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
Jadi, seperti yang dikatakan kesalahan, pustaka asli yang disalin tidak ada di / verdor / lib atau / system / lib, bagaimana cara mengatasi masalah ini dalam kasus saya?
(Saya mengekstrak paket apk, di bawah lib / ada libcalculate.so)
==== UPDATE =====
Saya juga mencoba membuat folder jni / di bawah root proyek, dan menambahkan file Android.mk di bawah jni /. Konten Android.mk adalah:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libcalculate
LOCAL_SRC_FILES := libcalculate.so
include $(PREBUILT_SHARED_LIBRARY)
Kemudian, di bawah project root, saya menjalankan ndk-build. Setelah itu, direktori armeabi / dan armeabi-v7a / dibuat oleh ndk-build (dengan libcalculate.so di dalam folder).
Kemudian saya menjalankan proyek maven saya dengan sukses. Dalam paket apk terakhir, ada:
lib/armeabi/libcalculate.so
lib/armeabi-v7a/libcalculate.so
Tetapi ketika saya menjalankan aplikasi saya, kesalahan yang sama muncul:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
libs/
? Anda mungkin perlu membuat satu subdirektori per target ABI yang ingin Anda dukung (armeabi, armeabi-v7a, x86, mips, dll) dan menempatkan file .so yang sesuai di setiap subdirektori (yaitu file .so yang dibuat untuk armeabi masuklibs/armeabi/
, dll).