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

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

我正在开发 android-ndk 应用程序,在该应用程序中,我正在使用本机字符串方法将 return 我的字符串值。库编译没有任何错误,但在 运行 时间它给了我一个例外:

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

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

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

FibLib

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.