Как решить java.lang.UnsatisfiedLinkError в NDK в Android? - PullRequest
25 голосов
/ 16 июля 2010

Я новичок в разработке ndk в android. Я прошел файловую систему ndk android. Здесь объясняю, что я наделал. 1) я создал папку с именем "jni", затем создал 2 файла с именами Android.mk и ndkfoo.c.

В Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Here we give our module name and source file(s)
LOCAL_MODULE    := ndkfoo
LOCAL_SRC_FILES := ndkfoo.c

include $(BUILD_SHARED_LIBRARY)

и в ndkfoo.c

#include <string.h>
#include <jni.h>

jstring Java_com_mindtherobot_samples_ndkfoo_NdkFooActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) {
 return (*env)->NewStringUTF(env, "Hello from native code!");
}

Затем я создал класс NdkFooActivity, в котором я написал

// load the library - name matches jni/Android.mk
 static {
  System.loadLibrary("ndkfoo");
 }

Но теперь, когда я собираюсь из cygwin в xp, он успешно создает файл .so, тогда я запускаюсь как приложение для Android. Это дает мне java.lang.UnsatisfiedLinkError в LOGCAT.

Итак, пожалуйста, дайте мне знать, где я не прав.

Заранее спасибо,

Ответы [ 12 ]

0 голосов
/ 29 марта 2013

вот учебник, как использовать собственный код: здесь

убедитесь, что в пути проекта нет пробелов. также вы не можете использовать подчеркивание в названии вашего пакета или проекта.

0 голосов
/ 29 марта 2013

У меня также была ошибка java.lang.UnsatisfiedLinkError.Я проверил все упомянутое в ответах выше, но все еще получал ошибку.В конце концов я обнаружил, что имена методов JNI не могут иметь подчеркивания.

Пример: Java_com_example_app_NativeLib_print_out_stuff <- генерирует java.lang.UnsatisfiedLinkError: print_out_stuff </p>

Переименуйте функцию print_out_stuff во что-то без подчеркивания: Java_com_example_app_NativeLib_printOutStuff <- работает </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...