Quero usar uma biblioteca nativa existente de outro projeto Android, então apenas copiei a biblioteca construída do NDK ( libcalculate.so ) para meu novo projeto Android. No meu novo projeto Android, criei uma pasta libs/armeabi/
e coloquei libcalculate.so lá. Não há jni / pasta. Meu dispositivo de teste tem arquitetura ARM.
No meu código java, carrego a biblioteca:
static{
System.loadLibrary("calculate");
}
Quando executo meu novo projeto android, recebo o erro:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
Então, como diz o erro, a biblioteca nativa copiada não está em / verdor / lib ou / system / lib, como resolver esse problema no meu caso?
(Descompactei o pacote apk, em lib / há libcalculate.so)
==== ATUALIZAÇÃO =====
Também tentei criar uma pasta jni / na raiz do projeto e adicionar um arquivo Android.mk em jni /. O conteúdo do Android.mk é:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libcalculate
LOCAL_SRC_FILES := libcalculate.so
include $(PREBUILT_SHARED_LIBRARY)
Então, na raiz do projeto, executei o ndk-build. Depois disso, os diretórios armeabi / e armeabi-v7a / são gerados pelo ndk-build (com libcalculate.so dentro da pasta).
Então eu executo meu maven para construir o projeto com sucesso. No pacote apk final, existem:
lib/armeabi/libcalculate.so
lib/armeabi-v7a/libcalculate.so
Mas quando executo meu aplicativo, o mesmo erro ocorre:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
libs/
? Você provavelmente precisa criar um subdiretório por ABI de destino que deseja oferecer suporte (armeabi, armeabi-v7a, x86, mips, etc) e colocar o arquivo .so apropriado em cada subdiretório (ou seja, o arquivo .so construído para armeabi entralibs/armeabi/
, etc).