Tôi muốn sử dụng thư viện gốc hiện có từ một dự án Android khác , vì vậy tôi vừa sao chép thư viện được xây dựng NDK ( libcalculate.so ) vào dự án Android mới của mình. Trong dự án Android mới của mình, tôi đã tạo một thư mục libs/armeabi/
và đặt libcalculate.so ở đó. Không có jni / thư mục. Thiết bị thử nghiệm của tôi có kiến trúc ARM.
Trong mã java của tôi, tôi tải thư viện bằng cách:
static{
System.loadLibrary("calculate");
}
Khi tôi chạy dự án Android mới của mình, tôi gặp lỗi:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
Vì vậy, như lỗi đã nói, thư viện gốc được sao chép không nằm trong / verdor / lib hoặc / system / lib, làm thế nào để giải quyết vấn đề này trong trường hợp của tôi?
(Tôi đã giải nén gói apk, dưới lib / có libcalculate.so)
==== CẬP NHẬT =====
Tôi cũng đã cố gắng tạo thư mục jni / dưới gốc dự án và thêm tệp Android.mk trong jni /. Nội dung của Android.mk là:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libcalculate
LOCAL_SRC_FILES := libcalculate.so
include $(PREBUILT_SHARED_LIBRARY)
Sau đó, dưới gốc dự án, tôi thực thi ndk-build. Sau đó, thư mục armeabi / và armeabi-v7a / được tạo bởi ndk-build (với libcalculate.so bên trong thư mục).
Sau đó tôi chạy maven xây dựng dự án thành công. Trong gói apk cuối cùng, có:
lib/armeabi/libcalculate.so
lib/armeabi-v7a/libcalculate.so
Nhưng khi tôi chạy ứng dụng của mình, cùng một lỗi:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
libs/
? Bạn có thể cần tạo một thư mục con cho mỗi ABI mục tiêu mà bạn muốn hỗ trợ (armeabi, armeabi-v7a, x86, mips, v.v.) và đặt tệp .so thích hợp trong mỗi thư mục con (tức là tệp .so được xây dựng cho armeabi đi kèmlibs/armeabi/
, Vân vân).