没有发现的Android NDK本地方法错误 [英] Android NDK Native method not found error
问题描述
我想使用原生code构建Android应用程序,所以我想测试一下NDK运行successfully.When我尝试运行我的第一个Hello World项目 登录猫说:
01-21 23:30:06.780:E / AndroidRuntime(939):致命异常:主要
01-21 23:30:06.780:E / AndroidRuntime(939):java.lang.UnsatisfiedLinkError中:
本机方法未找到:com.example.ndktesting.MainActivity.invokeNativeFunction :()Ljava /朗/字符串;
我查了一些计算器答案,但找不到我answer.Here是我的code for Java和CI正在使用的Android NDK r8d版本。
// ndktest.c
#包括< string.h中>
#包括< jni.h>
为externC
{
JNIEXPORT的jstring JNICALL Java_com_example_ndktesting_ndktest_MainActivity_invokeNativeFunction(JNIEnv的* ENV,jobject THIZ)
};
JNIEXPORT的jstring JNICALL Java_com_example_ndktesting_ndktest_MainActivity_invokeNativeFunction(JNIEnv的* ENV,jobject THIZ)
{
返回(* ENV) - > NewStringUTF(ENV,你好从本地code!);
}
下面是我的MainActivity的java code
包com.example.ndktesting;
公共类MainActivity扩展活动
{
//声明本土code函数 - 必须匹配ndktest.c
私人本地字符串invokeNativeFunction();
公共本地字符串unimplementedinvokeNativeFunction();
//加载库 - 名称相匹配的JNI / Android.mk
静止
{
的System.loadLibrary(ndktest);
}
@覆盖
保护无效的onCreate(包savedInstanceState)
{
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);
//这是我们调用本机code
字符串Hello = invokeNativeFunction();
新AlertDialog.Builder(本).setMessage(你好).show();
}
}
安卓使文件code:
LOCAL_PATH:= $(叫我-DIR)
包括$(CLEAR_VARS)
#在这里,我们给我们的模块名称和源文件(S)
LOCAL_MODULE:= ndktest
LOCAL_SRC_FILES:= ndktest.c
包括$(BUILD_SHARED_LIBRARY)
您封装/类名称不匹配。
JNIEXPORT的jstring JNICALL Java_com_example_ndktesting_ndktest_MainActivity_invokeNativeFunction(JNIEnv的* ENV,jobject THIZ)
将在类中的方法
com.example.ndktesting.ndktest.MainActivity
不过实际code
包com.example.ndktesting;
公共类MainActivity扩展活动
将导致它来寻找
com.example.ndktesting.MainActivity.invokeNativeFunction
没有ndktest
一旦你的名字匹配它要么工作,或使下一个问题。
I am trying to build android application using native code so i want to test if ndk runs successfully.When i try to run my first hello world project log cat says,
01-21 23:30:06.780: E/AndroidRuntime(939): FATAL EXCEPTION: main
01-21 23:30:06.780: E/AndroidRuntime(939): java.lang.UnsatisfiedLinkError:
Native method not found: com.example.ndktesting.MainActivity.invokeNativeFunction:()Ljava/lang/String;
I checked some stackoverflow answers but could not find my answer.Here is my code for java and c.I am using android ndk r8d version.
//ndktest.c
#include <string.h>
#include <jni.h>
extern "C"
{
JNIEXPORT jstring JNICALL Java_com_example_ndktesting_ndktest_MainActivity_invokeNativeFunction(JNIEnv* env, jobject thiz)
};
JNIEXPORT jstring JNICALL Java_com_example_ndktesting_ndktest_MainActivity_invokeNativeFunction(JNIEnv* env, jobject thiz)
{
return (*env)->NewStringUTF(env, "Hello from native code!");
}
Here is my MainActivity java code
package com.example.ndktesting;
public class MainActivity extends Activity
{
//declare the native code function - must match ndktest.c
private native String invokeNativeFunction();
public native String unimplementedinvokeNativeFunction();
// load the library - name matches jni/Android.mk
static
{
System.loadLibrary("ndktest");
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// this is where we call the native code
String hello = invokeNativeFunction();
new AlertDialog.Builder(this).setMessage(hello).show();
}
}
Android make file code:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Here we give our module name and source file(s)
LOCAL_MODULE := ndktest
LOCAL_SRC_FILES := ndktest.c
include $(BUILD_SHARED_LIBRARY)
Your package/class names do not match.
JNIEXPORT jstring JNICALL Java_com_example_ndktesting_ndktest_MainActivity_invokeNativeFunction(JNIEnv* env, jobject thiz)
Would be a method in the class
com.example.ndktesting.ndktest.MainActivity
However your actual code
package com.example.ndktesting;
public class MainActivity extends Activity
causes it to look for
com.example.ndktesting.MainActivity.invokeNativeFunction
without the "ndktest"
Once you make the names match it should either work, or expose the next issue.
这篇关于没有发现的Android NDK本地方法错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!