ฉันต้องการใช้ไลบรารีเนทีฟที่มีอยู่จากโปรเจ็กต์ 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/
, ฯลฯ )