I am trying to run simple jni code in Android, but all I get is Unsatisfiedlinkerror.
Here is my Java code:
package com.lipcap; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends Activity { 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"); } }
And here is my C ++ code (in $ 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"); }
I executed java code using javac and made a header using javah.
Then I launched ndk-build. And then I ran the code from eclipse (installed apk in android).
I get this error:
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)
I did not set LD_LIBRARY_PATH.
However, without setting the LD_LIBRARY_PATH sample code, such as HelloJNI provided by the NDK, it is absolutely normal.
Please tell me where I am absent.
source share