我正在为我的 android 项目设置 NDK。我有一个带有文本视图的 android 项目,该项目输出到模拟器“Output =”我有一个名为的本机函数somefunc()
,我将其添加到此字符串中,它会引发错误说明。
E/AndroidRuntime(2242): java.lang.UnsatisfiedLinkError: Native method not found: com.ndktest.MainActivity.somefunc:()I
我有三个我认为需要的文件。 MainActivity.java、test.c 和 Android.mk。
在test.c我有
#include <string.h>
#include <jni.h>
JNIEXPORT int JNICALL
Java_com_ndktest_MainActivity_somefunc(JNIEnv * env, jobject obj)
{
return 2;
}
和Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILE := test.c
include $(BUILD_SHARED_LIBRARY)
和MainActivity.java
package com.ndktest;
import com.ndktest.R;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.widget.TextView;
public class MainActivity extends Activity {
static
{
System.loadLibrary("test");
}
public native int somefunc();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = new TextView(getBaseContext());
tv.setTextSize(30);
String s = "Ouput="+somefunc();
tv.setText(s);
this.setContentView(tv);
}
}
我从网上的各种指南中了解到拼写错误是导致此错误的最常见原因。我已尽力检查包和 c 函数代码中的拼写错误,但到目前为止我没有看到它。我还可以在 makefile 上运行“ndk-build”,它编译时没有错误。它产生libtest,我加载库。我已经尝试过尝试捕获它,并且尝试通过了系统加载库。所以我假设我命名我的 c 函数时存在拼写错误或错误。我已经读过应该在 Java_[包用下划线而不是点] [java 类]中调用 c 函数[函数名称]。我想我正在遵守这一点。我很抱歉,我的前半部分问题看起来像是一个刻板的“为我解决这个问题”的问题。我只是想要那里的代码,所以它显示了包的名称和 make 的样子。谢谢