Пытаюсь вызвать функцию из JNI, но я не получаю реализации. - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь вызвать нативную функцию с помощью ndk / jni, но получаю это исключение

java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String 
com.raya.aman.ToolModule.stringFromJNI() (tried Java_com_raya_aman_ToolModule_stringFromJNI and 
Java_com_raya_aman_ToolModule_stringFromJNI__)

это класс Java

package com.raya.aman;
public class ToolModule {
public native String stringFromJNI();
static {
    System.loadLibrary("nljnitest");
}
}

это нативный function

jstring Java_com_raya_aman_ToolModule_stringFromJNI(JNIEnv* env, jobject  obj) {
   char * hello = "Hello from Native";
  return (*env)->NewStringUTF(env, hello);
}

Android .mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE        := nljnitest
LOCAL_C_INCLUDES    += $(LOCAL_PATH)/
LOCAL_SRC_FILES     +=  FieldTest.c  log.c
LOCAL_LDLIBS        += -llog
include $(BUILD_SHARED_LIBRARY)

Application.mk

NDK_TOOLCHAIN_VERSION := 4.9
APP_ABI :=  armeabi-v7a arm64-v8a
APP_CFLAGS += -Wno-error=format-security

Я добавил это в свой gradle

sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
    }
}

это моя файловая структура

jni файлы

1 Ответ

0 голосов
/ 24 марта 2020

Является ли функция в файле .cpp / .cxx случайно?

Объявить как

extern "C" string Java_com_raya_aman_ToolModule_stringFromJNI(JNIEnv* env, jobject  obj)

В противном случае имя экспортируемой функции искажается в соответствии с правилами C ++.

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