2013-01-21 52 views
14

我試圖使用本機代碼來構建Android應用程序,所以我想測試是否NDK運行successfully.When我嘗試運行我的第一個Hello World項目 日誌貓說,的Android NDK本地方法未找到錯誤

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; 

我檢查了一些stackoverflow的答案,但無法找到我的答案。這裏是我的代碼爲java和c我使用android ndk r8d版本。

//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!"); 
} 

這裏是我的MainActivity Java代碼

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文件代碼:

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) 
+0

請注意,這個問題涉及一個特定的原因(不匹配的軟件包名稱),這是一個更常見的錯誤消息,可能有無數的原因。沒有與名稱不匹配的讀者不會在這裏找到解決方案 - 他們有一個根本不同的未知問題。 –

回答

35

你的包/類名稱不匹配。

JNIEXPORT jstring JNICALL Java_com_example_ndktesting_ndktest_MainActivity_invokeNativeFunction(JNIEnv* env, jobject thiz) 

將在類中的方法

com.example.ndktesting.ndktest.MainActivity 

然而實際代碼

package com.example.ndktesting; 

public class MainActivity extends Activity 

導致它尋找

com.example.ndktesting.MainActivity.invokeNativeFunction 

沒有 「ndktest」

一旦你使名稱匹配,它應該工作,或暴露下一個問題。

+0

是的,我嘗試沒有「ndktest」,但我引發同樣的錯誤。請幫助我。 –

+1

瞧我固定。謝謝克里斯。 –

+3

問題是什麼?編輯:我發現我的代碼的問題是缺少extern「C」{} –

相關問題