【问题标题】:Calling native function from the Android API level 28 Application从 Android API 级别 28 应用程序调用本机函数
【发布时间】:2018-06-22 01:50:03
【问题描述】:

我创建了一个预构建的 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__)

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

【问题讨论】:

    标签: android java-native-interface


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      • 2018-02-25
      • 2012-02-17
      • 2020-04-06
      • 1970-01-01
      • 2019-11-22
      相关资源
      最近更新 更多