我正在尝试使用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");
}
}
这是本机函数
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']
}
}
答案 0 :(得分:0)
.cpp / .cxx文件中的功能是否偶然?
声明为
extern "C" string Java_com_raya_aman_ToolModule_stringFromJNI(JNIEnv* env, jobject obj)
否则,将根据C ++规则对导出的函数名称进行修饰。