में एक थ्रेड में जावावीएम * साझा करना मैं एक सीपीपी फ़ाइल से जावा क्लास विधियों को कॉल करना चाहता हूं जो किसी अन्य निष्पादन योग्य से कॉल बैक प्राप्त करता है।एंड्रॉइड एनडीके
इस लक्ष्य को हासिल करने के लिए, मैं एंड्रॉयड :: AndroidRuntime :: getJavaVM() .cpp फ़ाइल कि सीधे JNI विधि कॉल प्राप्त में विधि का उपयोग कर एक JavaVM सूचक लिया गया है। मैं अंतिम .cpp फ़ाइल के रूप में निम्नानुसार है जहाँ मैं जावा तरीकों की आवश्यकता कॉल करने के लिए निर्माता के माध्यम से इस JavaVM सूचक साझा कर रहा हूँ:
/* All the required objects(JNIEnv*,jclass,jmethodID,etc) are appropriately declared. */
**JNIEnv* env;
jvm->AttachCurrentThread(&env, NULL);
clazz = env->FindClass("com/skype/ref/NativeCodeCaller");
readFromAudioRecord = env->GetStaticMethodID(clazz, "readFromAudioRecord", "([B)I");
writeToAudioTrack = env->GetStaticMethodID(clazz, "writeToAudioTrack", "([B)I");**
हालांकि, मैं एक SIGSEGV गलती इस कोड को चलाने के। http://java.sun.com/docs/books/jni/html/other.html#26206
इस संबंध में किसी भी मदद की सराहना की जाएगी:
JNI प्रलेखन के अनुसार इस आर्बिटरी संदर्भों में JNIEnv प्राप्त करने के लिए उचित तरीके से हो रहा है।
सादर, नीरज
एंड्रॉइड :: AndroidRuntime :: getJavaVM क्या है? यह एनडीके सार्वजनिक एपीआई समारोह नहीं है। आप कुछ अनियंत्रित उपयोग कर रहे हैं। एनडीके में जावावीएम * प्राप्त करने के लिए आपको जेएनआई_ऑनलोड वैश्विक फ़ंक्शन को लागू करना होगा जिसे आपकी साझा लाइब्रेरी लोड होने पर स्वचालित रूप से कॉल किया जाता है। –
आपकी प्रतिक्रिया के लिए धन्यवाद .. http://android.wooyd.org/JNIExample/#NWD1sCYeT-J - यह दस्तावेज़ JNI_OnLoad को बहुत अच्छा परिचय देता है, जहां एंड्रॉइड :: AndroidRuntime :: registerNativeMethods() का उपयोग किया जाता है। क्या आप निश्चित हैं एंड्रॉइड :: AndroidRuntime गैर दस्तावेज नहीं है? – Neeraj
हां, यह सामान्य उपयोगकर्ता एनडीके कोड में अनियंत्रित सुविधा है। जेएनआई दस्तावेज (सूर्य से) पढ़ें और अन्य कानूनी और दस्तावेज एपीआई के लिए अपने एनडीके फ़ोल्डर में दस्तावेज़/STABLE-APIS.html फ़ाइल देखें। –