मैं एंड्रॉइड में एक साधारण जेनी कोड चलाने की कोशिश कर रहा हूं, लेकिन मुझे सभी को असंतुष्ट लिंक मिल रहा है।एंड्रॉइड में असंतुष्टलिंकिंकर (ग्रहण)
यहाँ मेरी जावा कोड है: यहाँ
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");
}
}
और मेरे सी ++ कोड ($ 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");
}
मैं javac का उपयोग कर जावा कोड का पालन किया है, और बना दिया जावा का उपयोग कर हेडर।
तब मैं ndk-build चला गया। और फिर मैंने ग्रहण से कोड चलाया। (एंड्रॉइड में स्थापित एपीके)।
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)
मैं LD_LIBRARY_PATH सेट नहीं किया है:
मैं इस त्रुटि मिलती है।
हालांकि, एनडीके द्वारा प्रदान की गई हैलोजेएनआई जैसे एलडी_LIBRARY_PATH नमूना कोड को सेट किए बिना बिल्कुल ठीक है।
कृपया मुझे बताएं कि मुझे कहां याद आ रही है।
'MainActivity ओब = नई मुख्य गतिविधि(); क्यों? आप पहले से ही मुख्य क्रियाकलाप के उदाहरण में हैं। 'this.sniff()' का उपयोग किया जाना चाहिए। –
हाँ, this.sniff का उपयोग किया जा सकता है। वैसे भी, इससे कोई फर्क नहीं पड़ता है जहां तक असंतुष्टलिंक आतंक का संबंध है। – d34th4ck3r
सी ++ से सी में कोड बदलना सब ठीक काम करता है .. :) – d34th4ck3r