首页 > 解决方案 > 从 Android API 级别 28 应用程序调用本机函数

问题描述

我创建了一个预构建的 Native 库 libNative.so,它有一个可以从 Android 应用程序调用的 JNI 函数。
libNative.so 位于设备中的 /system/x86_64。现在,我想从 Android 应用程序调用在我预构建的 Native 库中实现的 JNI 函数。我正在遵循以下程序。

1> 在 MainActivity 中加载 Native lib:

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__)

请帮我解决上述错误。为什么即使库的加载成功,我也会收到链接器错误。
提前致谢 !

标签: androidjava-native-interface

解决方案


我发现我正在做的错误。原生库中JNI函数的定义是错误的。我改变如下,一切都开始工作了!extern "C" JNIEXPORT jint JNICALL Java_App_PACKAGE_NAME_MainActivity_Init(JNIEnv* env, jobject callingObject){ }


推荐阅读