2013-02-17 3 views
1

Я начинаю изучать NDK. Я загрузил последние инструменты NDK и плагин eclipse. Я следовал базовому руководству и попытался запустить. Я получаю его работу без затмения плагина (Calling вручную ndk-build), но с плагин я получаю эту excepsion:Получение исключения из первого приложения NDK

02-17 17:49:01.477: E/AndroidRuntime(9746): java.lang.UnsatisfiedLinkError: performOperation

Вот мой код:

package com.helloworld; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 

public class HelloWorld extends Activity { 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_hello_world); 

    NativeLibrary nativeobject = new NativeLibrary(); 
    nativeobject.result(this); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.hello_world, menu); 
     return true; 
    } 

} 

и:

package com.helloworld; 


import android.content.Context; 
import android.widget.Toast; 

public class NativeLibrary { 


    /* * 
    * performOperation is defined in native library 
    */ 
    public native String performOperation(); 


    /* * 
    * loads the library shared object 
    */ 
    static { 
     System.loadLibrary("NativeLibrary"); 
    } 

    /* * 
    * Computes the result 
    */ 
    public void result(Context ctx) { 
     Toast.makeText(ctx, performOperation(), Toast.LENGTH_SHORT).show(); 
    } 
} 

каст:

#include <jni.h> 

JNIEXPORT jstring JNICALL Java_com_helloworld_NativeLibrary_performOperation(
     JNIEnv* env, jobject o) { 
    return env -> NewStringUTF("this is NativeLibrary"); 
} 

Android.mk:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := NativeLibrary 
LOCAL_SRC_FILES := NativeLibrary.cpp 

include $(BUILD_SHARED_LIBRARY) 
+0

Сообщения манифеста. Вы изменили имя пакета? – 323go

+0

имя пакета правильно. – SnapDragon

+0

Ответ такой же, как здесь: http://stackoverflow.com/questions/11704920/android-ndk-java-lang-unsatisfiedlinkerror – SnapDragon

ответ

0

В файле CPP, добавьте extern "C"{} вокруг функции:

extern "C" { 
JNIEXPORT jstring JNICALL Java_com_helloworld_NativeLibrary_performOperation(
     JNIEnv* env, jobject o) { 
    return env -> NewStringUTF("this is NativeLibrary"); 
} 

} 
Смежные вопросы