Başka bir Android projesinden mevcut bir yerel kitaplığı kullanmak istiyorum , bu nedenle NDK yerleşik kitaplığını ( libcalculate.so ) yeni Android projeme kopyaladım . Yeni Android projemde bir klasör oluşturdum libs/armeabi/
ve libcalculate.so dosyasını oraya koydum . Orada hiçbir jni / klasör. Test cihazım ARM mimarisine sahip.
Java kodumda kitaplığı şu şekilde yüklüyorum:
static{
System.loadLibrary("calculate");
}
Yeni android projemi çalıştırdığımda hata alıyorum:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
Öyleyse, hatanın dediği gibi, kopyalanan yerel kitaplık / verdor / lib veya / system / lib içinde değil, benim durumumda bu sorunu nasıl çözebilirim?
(Apk paketini lib altında açtım / libcalculate.so var)
==== GÜNCELLEME =====
Ayrıca proje kökü altında bir jni / klasörü oluşturmaya ve jni / altına bir Android.mk dosyası eklemeye çalıştım. Android.mk'nin içeriği:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libcalculate
LOCAL_SRC_FILES := libcalculate.so
include $(PREBUILT_SHARED_LIBRARY)
Ardından, proje kökü altında ndk-build çalıştırdım. Bundan sonra, armeabi / ve armeabi-v7a / dizinleri ndk-build tarafından oluşturulur (klasörün içinde libcalculate.so ile).
Daha sonra projemi başarıyla inşa ettim. Son apk paketinde şunlar bulunur:
lib/armeabi/libcalculate.so
lib/armeabi-v7a/libcalculate.so
Ancak uygulamamı çalıştırdığımda aynı hata oluşuyor:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
libs/
mı koydunuz ? Muhtemelen desteklemek istediğiniz hedef ABI başına bir alt dizin oluşturmanız (armeabi, armeabi-v7a, x86, mips, vb.) Ve her alt dizine uygun .so dosyasını yerleştirmeniz gerekir (yani armeabi için oluşturulmuş .so dosyası girilirlibs/armeabi/
, vb).