3

我正在使用 C++ 代码开发一个 android 应用程序。尝试使用 JNI 但失败了。这是我的代码:来自 jni 文件夹中的 test.c:

jstring Segment_com_example_segment_BrowsePicture_test( JNIEnv* env, jobject thiz )
{
    return (*env)->NewStringUTF(env, "test");
}

我已经通过 ndk 构建并生成 libtest.so。但在我的 BrowsePicture.java(在 Segment.com.example.segment 下)我添加了

public native String  test();

但我不能叫它。消息是:

E/AndroidRuntime(16748): java.lang.UnsatisfiedLinkError: Native method not found: com.example.segment.BrowsePicture.test:()Ljava/lang/String;

那么谁能告诉我怎么了?

4

3 回答 3

2

尝试通过此更改方法名称...

jstring Java_com_example_segment_BrowsePicture_test( JNIEnv* env, jobject thiz )

而不是这个...

jstring Segment_com_example_segment_BrowsePicture_test( JNIEnv* env, jobject thiz )
于 2012-10-11T11:46:23.257 回答
1

你有没有像下面这样声明另一个类

package com.yourpackage;
public class NativeLib {

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

public static native void your_function(your_arguments);
}

然后使用从您的活动中调用此函数

NativeLib.your_function(your_arguments);
于 2012-10-11T11:32:48.027 回答
0

您是否通过以下方式加载了库:

...
public class BrowsePicture {

    static {
        // assume that libtestjni.so is your lib file
        System.loadLibrary("testjni");
    }
...
于 2012-10-11T11:37:01.317 回答