別の 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 /フォルダーを作成し、jni /の下にAndroid.mkファイルを追加しようとしました。Android.mkの内容は次のとおりです。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libcalculate
LOCAL_SRC_FILES := libcalculate.so
include $(PREBUILT_SHARED_LIBRARY)
次に、プロジェクトルートの下でndk-buildを実行しました。その後、ndk-buildによってarmeabi /およびarmeabi-v7a /ディレクトリが生成されます(フォルダー内に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など)ごとに1つのサブディレクトリを作成し、適切な.soファイルを各サブディレクトリに配置する必要があります(つまり、armeabi用に構築された.soファイルはlibs/armeabi/
、等)。