2011-07-12 12 views
15

मेरे पास Android प्लेटफॉर्म पर मूल कोड में आप क्या कर सकते हैं इसकी सीमाओं के बारे में एक प्रश्न है।एंड्रॉइड एनडीके सीमाएं?

असल में मैंने देशी सी कोड में एक लाइब्रेरी विकसित की है जो एसआईपी/आरटीपी के लिए यूडीपी सॉकेट का उपयोग करती है और ऑडियो रिकॉर्डिंग/प्लेबैक के लिए ओपनएएल का उपयोग करती है - मूल रूप से पूरे एप्लिकेशन। विचार जावा कोड की बजाय देशी सी कोड में जितना संभव हो उतना है। मैं ऐसा इसलिए करना चाहता हूं क्योंकि मैं इसे अन्य प्लेटफार्मों पर भी इस्तेमाल करने जा रहा हूं।

मेरा प्रश्न तब बस है - क्या जीयूआई के लिए जावा का उपयोग करना संभव है और फिर मूल कोड में सभी प्रोसेसिंग करना संभव है? क्या होगा जब मेरा मूल कोड सॉकेट बनाने की कोशिश करता है, इसे बाध्य करता है, ऑडियो रिकॉर्ड करता है, इसे चलाता है, आदि - क्योंकि यह मूल कोड में है, क्या मुझे इसके लिए अनुमतियां सेट करने की आवश्यकता है (जैसे माइक्रोफ़ोन और व्हाट्नॉट तक पहुंचने वाला एप्लिकेशन) या क्या यह सिर्फ मूल सामग्री के बाद से इस सामान को बाईपास करेगा? क्या देशी कोड पीसी पर एंड्रॉइड पर जितना चाहें उतना कुछ कर सकता है?

क्षमा करें अगर इसका अस्पष्ट है; बस बता और मैं इसे

धन्यवाद

उत्तर

4

आप काफी कुछ भी आप मूल कोड में चाहते हो सकता है, लेकिन केवल ओएस स्तरीय बात वास्तव में समर्थित ओपन है, ओपनएसएल, और कुछ संख्या-क्रंचिंग पुस्तकालय (संपीड़न, गणित, आदि)।

हालांकि, किसी भी समय आप जावा विधि को कॉल करने के लिए जेएनआई का उपयोग करने के लिए स्वतंत्र हैं, इसलिए आप नेटवर्किंग के लिए मानक एंड्रॉइड एपीआई का उपयोग कर सकते हैं (Socket, आदि जैसे वर्ग)। जाहिर है, चूंकि कॉल जावा एपीआई के माध्यम से जा रहा है, इसलिए सभी सामान्य एंड्रॉइड अनुमतियां लागू होती हैं (जैसे android.permission.INTERNET)।

संपादित करें: टिप्पणियों में विस्तार के अनुसार, मानक पुस्तकालय जो एनडीके का हिस्सा हैं, के पास सॉकेट के लिए समर्थन है।

+0

क्या आप 'समर्थित' द्वारा अपना मतलब बता सकते हैं? उदाहरण के लिए, मुझे एनडीके पुस्तकालय सूची में सॉकेट नहीं मिल रहे हैं। क्या मैं अभी भी उनका उपयोग कर सकता हूं? आप क्या हेडर फाइलें और सामान का उपयोग करते हैं - क्या कोई sys/sockets नहीं है? – KaiserJohaan

+1

आपको यह पसंद नहीं आएगा, लेकिन ... आपको जावा के माध्यम से जाना होगा, यानी आप 'सॉकेट' पर FindClass का उपयोग करें, फिर कन्स्ट्रक्टर के लिए विधि, 'read' के लिए विधि,' लिखने के लिए विधि 'प्राप्त करें , आप अपने कोड में सॉकेट को 'जॉबजेक्ट' के रूप में संग्रहीत करते हैं, और आप 'CallVoidEnvMethod' या कुछ इसी तरह का उपयोग करते हैं। यह बिल्कुल भयानक लगता है, लेकिन आप सी और जावा के बीच अनुवाद की तुलना में एक पतली परत लिख सकते हैं और उन अनुवाद कार्यों के कुछ मुट्ठी भर के साथ समाप्त हो सकते हैं। – EboMike

+0

बीटीडब्ल्यू, जैसा कि काज़ुकी ने बताया, सॉकेट एपीआई के लिए पूर्ण समर्थन हो सकता है, लेकिन व्यक्तिगत रूप से मैंने हमेशा जावा के माध्यम से इस संकेत का उपयोग किया है। – EboMike

3

तुम अब भी अनुमतियाँ करने के लिए आपके आवेदन की जरूरत को बेहतर बनाने की कोशिश करेंगे। उदाहरण के लिए, आपके मूल सॉकेट मैनिफेस्ट में android.permission.INTERNET के बिना काम नहीं करेंगे।

<manifest xlmns:android...> 
... 
<uses-permission android:name="android.permission.INTERNET"></uses-permission> 
</manifest> 

एक और विकल्प जावा परत पर सॉकेट बनाना और इसे पास करना है। यहाँ मातृभूमि में सॉकेट के साथ बातचीत का एक उदाहरण है, विधि org_..._OpenSSLSocketImpl_connect() देखें:

http://www.netmite.com/android/mydroid/dalvik/libcore/x-net/src/main/native/org_apache_harmony_xnet_provider_jsse_OpenSSLSocketImpl.cpp

3

The Native Android API एनडीके के लिए एक अच्छा लेख है।

क्या जीयूआई के लिए जावा का उपयोग करना संभव है और फिर मूल कोड में सभी प्रोसेसिंग करना संभव है?

हां। और आपको अपने AndroidManifest में उचित अनुमतियां सेट करने की आवश्यकता है।

ऑडियो रिकॉर्ड, इसे खेलने,

आप देशी पक्ष में रिकॉर्डिंग और खेलने के लिए ऑडियो OpenSL ES एपीआई का उपयोग करने की जरूरत है। इसका मतलब है कि आपका एप्लिकेशन एंड्रॉइड 2.3 या उसके बाद के संस्करण के लिए होना चाहिए।

या, एनवीआईडीआईए एक ढांचा प्रदान करता है जो हम एंड्रॉइड इवेंट्स, सेंसर, ऑडियो और अन्य के लिए एंड्रॉइड 2.2 या इससे पहले के लिए सी ++ का उपयोग करके विकसित करने में सक्षम होने की अनुमति देता है।

Tegra Resources - Android SDK & NDK sample applications and documentation

+0

एंड्रॉइड द्वारा समर्थित ओपनएएल नहीं है? मुझे लगता है कि मैंने इसके बारे में कहीं पढ़ा है, या आप एपीके में ओपनएएल साझा लाइब्रेरी को शामिल कर सकते हैं? – KaiserJohaan

+0

[एंड्रॉइड के लिए ओपनल सॉफ्टवेयर कार्यान्वयन] (http://bit.ly/cc3Rpq)। यह एक सॉफ्टवेयर कार्यान्वयन है, इस प्रकार, ओपनएसएल ईएस इस ओपनएएल कार्यान्वयन से अधिक कुशल है। –

0

आप csipsimple जो pjsip घूंट पुस्तकालय एक जावा एंड्रॉयड आवेदन में (जो सी में लिखा है) का उपयोग कर के एक उदाहरण है की जाँच करना चाहते हो सकता है।

मैंने देखा नहीं है कि यह सॉकेट संचार कैसे करता है लेकिन यह आपको जो करने की कोशिश कर रहा है उसका एक पूर्ण उदाहरण देना चाहिए।

संबंधित मुद्दे