Я пытаюсь использовать Android NDK. В качестве первого шага я пытаюсь сделать то же самое, что и hello-jni из образцов Android. Я создал jni папку по проекту и поместил hello-jni.c, Android.mk, Application.mk. Я построил файл c, используя ndk-build. Он создавал и помещал файлы .so в каталог libs и пару файлов arm *. Но когда я использовалfindLibrary возвращается null Android NDK
static {
System.loadLibrary("hello-jni");
}
в рамках моей деятельности, я получаю
10-22 22:58:12.248 2291-2291/? E/AndroidRuntime: java.lang.UnsatisfiedLinkError: Couldn't load hello-jni from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.clinicloud.app.ndktestapp-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.clinicloud.app.ndktestapp-1, /system/lib]]]: findLibrary returned null
10-22 22:58:12.248 2291-2291/? E/AndroidRuntime: at java.lang.Runtime.loadLibrary(Runtime.java:355)
10-22 22:58:12.248 2291-2291/? E/AndroidRuntime: at java.lang.System.loadLibrary(System.java:525)
10-22 22:58:12.248 2291-2291/? E/AndroidRuntime: at com.clinicloud.app.ndktestapp.MainActivity.<clinit>(MainActivity.java:56)
10-22 22:58:12.248 2291-2291/? E/AndroidRuntime: at java.lang.Class.newInstanceImpl(Native Method)
Мои Android.mk Файл
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
Мой Application.mk файл включает в себя,
APP_ABI := all
. Файлы .so называются libhello-jni.so
Может кто-нибудь помочь мне исправить это? Благодарю.
UPDATE
Я исправил эту проблему, поместив ниже код в моем build.gradle.
sourceSets.main {
jniLibs.srcDir 'libs'
}
Убедитесь, что libhello-jni.so скомпилирован и помещен под/libs/[ARCH] в ваш проект. Вы также можете распаковать свой apk и посмотреть, есть ли библиотека – Krypton
Спасибо @krypton. Я мог обнаружить, что библиотека не была включена в файл apk. Затем я исправил проблему с конфигурацией каталога gradle libs. – User
Нет проблем, тогда я переведу комментарий. – Krypton