java.lang.UnsatisfiedLinkError : Native method not found: com. ziqitza.murgency.activities.FibLib.getTestString:()Ljava/lang/String;

标签 java android android-ndk

我正在开发 android-ndk 应用程序,我正在使用 native String 方法返回字符串值。库编译没有任何错误,但在运行时它给了我一个异常:

java.lang.UnsatisfiedLinkError: Native method not found: com.ziqitza.murgency.activities.FibLib.getTestString:()Ljava/lang/String;

我的 C 代码和头文件以及类文件如下。

com_testing_ndk_FibLib.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_ziqitza_murgency_activities_FibLib */

#ifndef _Included_com_ziqitza_murgency_activities_FibLib
#define _Included_com_ziqitza_murgency_activities_FibLib
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_ziqitza_murgency_activities_FibLib
 * Method:    fibNR
 * Signature: (J)J
 */
JNIEXPORT jlong JNICALL Java_com_ziqitza_murgency_activities_FibLib_fibNR
  (JNIEnv *, jclass, jlong);

/*
 * Class:     com_ziqitza_murgency_activities_FibLib
 * Method:    fibNI
 * Signature: (J)J
 */
JNIEXPORT jlong JNICALL Java_com_ziqitza_murgency_activities_FibLib_fibNI
  (JNIEnv *, jclass, jlong);

/*
 * Class:     com_ziqitza_murgency_activities_FibLib
 * Method:    getTestString
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_ziqitza_murgency_activities_FibLib_getTestString
  (JNIEnv *, jclass, jstring);

#ifdef __cplusplus
}
#endif
#endif

斐波那契

public class FibLib {

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

    public static long fibJR(long n){
        return n<=0 ? 0 : n==1 ? 1: fibJR(n - 1) + fibJR(n - 2);
    }
    public native static long fibNR(long n);


    public static long fibJI(long n){
        long previous = -1;
        long result = 1;
        for (long i=0;i<n;i++){
            long sum = result + previous;
            previous = result;
            result = sum;
        }
        return result;
    }
       public native static long fibNI(long n);

       public native static String getTestString(String abc);

        // Test Driver
        public static void main(String[] args) {
        }

}

C 代码

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <com_testing_ndk_FibLib.h>

static jlong fib(jlong n){
        return n<=0 ? 0 : n==1 ? 1: fib(n - 1) + fib(n - 2);
    }

JNIEXPORT jlong JNICALL Java_com_testing_ndk_FibLib_fibNR
  (JNIEnv *env, jclass clazz, jlong n)
{
        return fib(n);
}
/*
 * Class:     com_testing_ndk_FibLib
 * Method:    fibNI
 * Signature: (J)J
 */
JNIEXPORT jlong JNICALL Java_com_testing_ndk_FibLib_fibNI
(JNIEnv *env, jclass clazz, jlong n)
{

    jlong previous = -1;
    jlong result = 1;
    jlong i;
    for (i=0;i<n;i++){
        jlong sum = result + previous;
        previous = result;
        result = sum;
    }
    return result;

}

JNIEXPORT jstring JNICALL Java_com_testing_ndk_FibLib_getTestString(JNIEnv* env, jclass jclazz) {
    jstring str = (*env)->NewStringUTF(env, "Hello from native code!");
    return str;
}

最佳答案

我不是很熟悉 NDK,但看起来你的 C 代码和相关的头文件没有使用相同的包名称。一个是 com_testing_ndk_FibLib,另一个是 com_ziqitza_murgency_activities_FibLib

关于java.lang.UnsatisfiedLinkError : Native method not found: com. ziqitza.murgency.activities.FibLib.getTestString:()Ljava/lang/String;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30152520/

相关文章:

Android 布局限定符不起作用?

android - c++ android ndk 使用数组

Java CEF - 是否可以访问 DOM 文档和加载页面的元素?

java - android.view.InflateException : Binary XML file line #9: Error inflating class com. jjoe64.graphview.helper.GraphViewXML

Android 目标 SDK 与构建 SDK

android - 在安卓设备上运行 native adobe XMP

android-ndk - android - ndk 不将预构建库复制到我的 apk

java - 有没有办法从 EJB 模块访问 HttpSession?

java - 继承:对象创建

java - Jenkins 中的 Jetty/winstone 连接器配置