Unsatisfiedlinkerror dans android (eclipse)

Je suis en train de lancer un simple jni code dans Android, Mais tout ce que je suis Unsatisfiedlinkerror .

Voici mon code Java:

package com.lipcap;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {
/** Called when the activity is first created. */

TextView a;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    a=new TextView(this);

    String b; 
    MainActivity ob=new MainActivity();
    b=ob.sniff();

    a.setText(b);

    setContentView(a);
}
public native String sniff();

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


} 

Et voici Mon code C++ (en $PROJECT_PATH/jni/):

#include<iostream>
#include<string.h>
#include<jni.h>
JNIEXPORT jstring JNICALL Java_com_lipcap_MainActivity_sniff
(JNIEnv *env, jobject obj){
       return env->NewStringUTF("This is Native");
}

J'ai respecté le code java à l'aide de javac, et fait l'en-tête à l'aide de javah.

Ensuite, j'ai couru ndk-build.
Et puis j'ai couru code à partir d'eclipse.(installé l'apk sur android).

J'obtiens cette erreur:

E/AndroidRuntime(  769): FATAL EXCEPTION: main
E/AndroidRuntime(  769): java.lang.UnsatisfiedLinkError: sniff
E/AndroidRuntime(  769):    at com.lipcap.MainActivity.sniff(Native Method)
E/AndroidRuntime(  769):    at com.lipcap.MainActivity.onCreate(MainActivity.java:36)
E/AndroidRuntime(  769):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime(  769):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
E/AndroidRuntime(  769):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
E/AndroidRuntime(  769):    at android.app.ActivityThread.access$2300(ActivityThread.java:125)
E/AndroidRuntime(  769):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
E/AndroidRuntime(  769):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(  769):    at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(  769):    at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime(  769):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(  769):    at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(  769):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime(  769):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime(  769):    at dalvik.system.NativeStart.main(Native Method)

Je n'ai pas mis LD_LIBRARY_PATH.

Cependant,sans LD_LIBRARY_PATH exemple de code comme HelloJNI fournis par NDK fonctionne tout à fait bien.

S'il vous plaît dites-moi où je suis absent.

  • MainActivity ob=new MainActivity(); Pourquoi? vous êtes déjà dans une instance de MainActivity. this.sniff() doit être utilisé.
  • Oui, cette.sniff pourrait être utilisé. De toute façon, cela ne crée pas de différence dans la mesure où Unsatisfiedlinkerror est concerné.
  • Changement de code C++ à C tout fonctionne bien.. 🙂
InformationsquelleAutor d34th4ck3r | 2011-06-14