Quiero usar una biblioteca nativa existente de otro proyecto de Android, así que simplemente copié la biblioteca construida del NDK ( libcalculate.so ) a mi nuevo proyecto de Android. En mi nuevo proyecto de Android, creé una carpeta libs/armeabi/
y puse libcalculate.so allí. No hay carpeta jni /. Mi dispositivo de prueba tiene arquitectura ARM.
En mi código java, cargo la biblioteca por:
static{
System.loadLibrary("calculate");
}
Cuando ejecuto mi nuevo proyecto de Android, recibí el error:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
Entonces, como dice el error, la biblioteca nativa copiada no está en / verdor / lib o / system / lib, ¿cómo resolver este problema en mi caso?
(Descomprimí el paquete apk, en lib / hay libcalculate.so)
==== ACTUALIZAR =====
También intenté crear una carpeta jni / en la raíz del proyecto y agregar un archivo Android.mk en jni /. El contenido de Android.mk es:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libcalculate
LOCAL_SRC_FILES := libcalculate.so
include $(PREBUILT_SHARED_LIBRARY)
Luego, en la raíz del proyecto, ejecuté ndk-build. Después de eso, los directorios armeabi / y armeabi-v7a / son generados por ndk-build (con libcalculate.so dentro de la carpeta).
Luego ejecuto mi maven construyendo el proyecto con éxito. En el paquete apk final, hay:
lib/armeabi/libcalculate.so
lib/armeabi-v7a/libcalculate.so
Pero cuando ejecuto mi aplicación, aparece el mismo error:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
libs/
? Probablemente necesite crear un subdirectorio por ABI de destino que desee admitir (armeabi, armeabi-v7a, x86, mips, etc.) y colocar el archivo .so apropiado en cada subdirectorio (es decir, el archivo .so creado para armeabi entralibs/armeabi/
, etc).