2012-01-19 16 views
16

में लिखें, क्या जावा/स्टार्टर "क्लास के बिना हैलो-जेनी नमूना प्रोजेक्ट (HelloJni.java) में सी/सी ++ के साथ एक संपूर्ण एनडीके ऐप लिखने का कोई संभावित तरीका है - किसी भी तरह से HelloJni.c जो वही करेगा?एंड्रॉइड एनडीके - केवल सी/सी ++

+1

यह आपकी मदद कर सकता है http://stackoverflow.com/q/1002164/775964 –

उत्तर

15

एंड्रॉइड 2.3 (एपीआई लेवल 9) के बाद से नेटिव एक्टिविटी है जो किसी को केवल एंड्रॉइड ऐप को सी ++ में कोड करने की अनुमति देती है। एनडीके पैकेज में इसके लिए एक उदाहरण भी है।

NDK Overview से एक उद्धरण:

जब मूल कोड में विकसित करने के

NDK सबसे अनुप्रयोगों लाभ नहीं होगा। एक डेवलपर के रूप में, आपको इसकी कमी के खिलाफ अपने लाभों को संतुलित करने के लिए की आवश्यकता है; विशेष रूप से, मूल कोड का उपयोग स्वचालित प्रदर्शन में का परिणाम नहीं होता है, लेकिन हमेशा एप्लिकेशन जटिलता बढ़ाता है। आम तौर पर, आपको केवल मूल कोड का उपयोग करना चाहिए यदि यह आपके आवेदन के लिए आवश्यक है, न केवल आप सी/सी ++ में प्रोग्राम करना पसंद करते हैं।

NDK के लिए विशिष्ट अच्छा उम्मीदवारों आत्म निहित, कर रहे हैं CPU- सघन संचालन कि इस तरह के सिग्नल प्रोसेसिंग, भौतिकी सिमुलेशन, और इतने पर के रूप में ज्यादा स्मृति को आबंटित नहीं है। सी में चलाने के लिए बस एक विधि को दोबारा कोड करने के परिणामस्वरूप आमतौर पर बड़े प्रदर्शन में नहीं होता है। जब यह जांच कर रहा है कि आपको मूल कोड में विकसित करना चाहिए या नहीं, तो अपनी आवश्यकताओं के बारे में सोचें और देखें कि एंड्रॉइड फ्रेमवर्क एपीआई आपको आवश्यक कार्यक्षमता प्रदान करता है या नहीं। एनडीके, हालांकि, मौजूदा सी/सी ++ कोड के बड़े कॉर्पस का पुन: उपयोग करने का प्रभावी तरीका हो सकता है।

  • एंड्रॉयड ढांचे का उपयोग कर अपने आवेदन लिखें और एंड्रॉयड NDK द्वारा प्रदान की API एक्सेस करने JNI का उपयोग करें:

    एंड्रॉयड ढांचे मूल कोड का उपयोग करने के दो तरीके प्रदान करता है। एंड्रॉइड फ्रेमवर्क की सुविधा का लाभ उठाने के लिए यह तकनीक आपको की अनुमति देती है, लेकिन आपको आवश्यक होने पर भी मूल कोड लिखने की अनुमति देती है। आप एप्लिकेशन इंस्टॉल कर सकते हैं जो JNI के माध्यम से देशी कोड का उपयोग एंड्रॉइड 1.5 या बाद में चलाते हैं।

  • एक मूल गतिविधि लिखें, जो आपको देशी कोड में जीवन चक्र कॉलबैक को लागू करने की अनुमति देता है। एंड्रॉयड एसडीके NativeActivity वर्ग है, जो एक सुविधा वर्ग कि किसी भी गतिविधि की जीवन चक्र कॉलबैक अपने मूल कोड को सूचित करता है प्रदान करता है (OnCreate(), onPause(), onResume(), आदि)। इन घटनाओं को होने पर इन्हें अपने मूल कोड में कॉलबैक लागू कर सकते हैं। आवेदन जो देशी गतिविधियों का उपयोग करते हैं एंड्रॉइड 2.3 (एपीआई लेवल 9) या बाद में चलाना चाहिए।

आप ऐसी सेवाओं और सामग्री प्रदाताओं देशी रूप के रूप में सुविधाओं का उपयोग नहीं कर सकते हैं, ताकि आप उन्हें या किसी अन्य ढांचे एपीआई का उपयोग करना चाहते हैं, आप अभी भी ऐसा करने के लिए JNI कोड लिख सकते हैं।

मैं कोड पोर्ट करते समय सी/सी ++ लेता हूं और संभवतः क्रॉस प्लेटफ़ॉर्म गेम विकसित करते समय।

+0

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

1

चूंकि सभी यूआई, ग्राफिक्स और अन्य रोचक वर्ग जावा में हैं, इसलिए आपको जावा एक तरफ या अन्य का उपयोग करना होगा।

द्वारा मेरा मतलब जेएनआई के माध्यम से सभी जावा कक्षाओं के साथ इंटरफेसिंग करना है। इसके लिए एक पुस्तकालय है: https://github.com/DmitrySkiba/itoa-jnippHelloJNIpp नमूना जांचें - यह दिखाता है कि सी ++ में पूरी तरह से एंड्रॉइड ऐप्स लिखना संभव है, केवल एक ही पकड़ यह है कि आपको पहले सभी आवश्यक रैपर लागू करने की आवश्यकता होगी (कुछ samples/common फ़ोल्डर में हैं)।

हालांकि, मैं जावा का उपयोग करने की सलाह देता हूं। इसकी सरल और सुरुचिपूर्ण, महान पुस्तकालयों और औजारों में है।

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