从Android API级别28应用程序调用本机函数

时间:2018-06-22 01:50:03

标签: android java-native-interface nativelibrary

我创建了一个预构建的本机库libNative.so,该库具有要从Android应用程序调用的JNI函数。
libNative.so位于设备中的/ system / x86_64。 现在,我想从Android应用程序调用在我的预建本机库中实现的JNI函数。我在下面的程序。

1>在MainActivity中加载本机库:

static    {    System.loadLibrary("Native");    }

2>声明本机方法为:

 public native int Init();

3>共享库中的函数定义为:

JNIEXPORT jint Java_App_PACKAGE_NAME_MainActivity_Init(JNIEnv* env, jobject callingObject){  
return 0;  
}

4>我在onCreate中调用本机函数:

int i = Init();

现在,如果我构建并运行该应用程序。我得到的错误是:

AndroidRuntime: java.lang.UnsatisfiedLinkError: No implementation found for int App_PACKAGE_NAME_MainActivity.Init() (tried Java_App_PACKAGE_NAME_MainActivity_Init and Java_App_PACKAGE_NAME_MainActivity_Init__)

请帮助我解决以上错误。 为什么即使加载库成功也出现链接器错误。
提前致谢 !

1 个答案:

答案 0 :(得分:1)

我发现我正在做的错误。本机库中JNI函数的定义是错误的。我进行了如下更改,一切开始正常! extern“ C” JNIEXPORT jint JNICALL Java_App_PACKAGE_NAME_MainActivity_Init(JNIEnv * env,jobject callObject){ }

相关问题