android - 从 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__)
请帮我解决上述错误。为什么即使库的加载成功,我也会收到链接器错误。
提前致谢 !
解决方案
我发现我正在做的错误。原生库中JNI函数的定义是错误的。我改变如下,一切都开始工作了!extern "C" JNIEXPORT jint JNICALL Java_App_PACKAGE_NAME_MainActivity_Init(JNIEnv* env, jobject callingObject){ }