एंड्रॉइड ऐप को C / C ++ में क्यों नहीं लिखा जाना चाहिए क्योंकि आप "केवल C / C ++ में प्रोग्राम करना पसंद करते हैं"? [बन्द है]


86

अपडेट किया गया (स्पष्टता और अस्पष्टता कम करने के लिए):

मैं एंड्रॉइड ऐप के साथ चारों ओर छेड़छाड़ शुरू करने जा रहा हूं। मैं NDK का उपयोग करते हुए C ++ में लिखने की योजना बना रहा था (क्योंकि मेरे पास C ++ में अधिक अनुभव है और यह जावा को पसंद करता है) लेकिन Android NDK पृष्ठ पर निम्नलिखित आया :

यदि आप अपने ऐप के लिए आवश्यक हैं, तो आपको केवल NDK का उपयोग करना चाहिए- कभी नहीं क्योंकि आप केवल C / C ++ में प्रोग्राम करना पसंद करते हैं।

मैं इस धारणा के तहत था कि आप उस भाषा का उपयोग करें, जिसे आप पसंद करते हैं, जब तक कि यह काम फिट बैठता है। क्या कोई समझा सकता है कि एंड्रॉइड डेवलपमेंट के लिए C / C ++ का उपयोग न करना इतना भारी क्यों है?


मूल:

मैं मोबाइल एप्लिकेशन, विशेष रूप से एंड्रॉइड के साथ छेड़छाड़ करना शुरू करने जा रहा हूं, विशेष रूप से एंड्रॉइड जो मेरे वर्तमान फोन का ओएस है, और मैं सोच रहा था कि क्या एप्लिकेशन को C ++ (या कम से कम कोर, फिर जावा में लपेटना) एक स्वीकार्य विकल्प था।

कुछ पृष्ठभूमि, मैं एक कंप्यूटर विज्ञान प्रमुख हूं, जिसने 3 सी ++ पाठ्यक्रम (इंट्रो, इंटरमीडिएट, ओओपी, और वसंत में एसटीएल पाठ्यक्रम ले रहा है) और केवल 1 जावा पाठ्यक्रम (इंटरमीडिएट) लिया है। इस वजह से, मैं सी ++ के साथ अधिक सहज हूं और इसे जावा को पसंद करता हूं। मैं Android NDK पेज पर निम्नलिखित में आया :

एंड्रॉइड पर मूल कोड का उपयोग करने से आम तौर पर ध्यान देने योग्य प्रदर्शन में सुधार नहीं होता है, लेकिन यह हमेशा आपके ऐप की जटिलता को बढ़ाता है। सामान्य तौर पर, आपको केवल NDK का उपयोग करना चाहिए यदि यह आपके ऐप के लिए आवश्यक है- कभी नहीं क्योंकि आप केवल C / C ++ में प्रोग्राम करना पसंद करते हैं।

  • मैं इस धारणा के तहत था कि आप भाषा का उपयोग नौकरी के साथ-साथ आपके परिचित होने के साथ-साथ करें
  • मैं एप्लिकेशन को किसी अन्य मोबाइल प्लेटफ़ॉर्म पर, जैसे कि iOS, C ++ का समर्थन करता है, लेकिन जावा को पोर्ट नहीं करना चाहता
  • जबकि जावा एक उच्च स्तरीय भाषा है और इस तरह से विकास तेजी से होना चाहिए, मुझे ऐसा लगता है कि विकास धीमा होगा क्योंकि मुझे लगभग हर चीज को पुनः प्राप्त करना होगा (क्योंकि मैंने भाषा पर केवल एक वर्ग लिया है)

किसी भी सलाह बहुत सराहना की जाएगी।

पीएस: इस विषय पर कई उत्तर सालों पहले से हैं और ऐसे बहुत ही कम उत्तर हैं जो एनडीके का उल्लेख करते हैं, जो एंड्रॉइड 2.3 और नए पर पूर्ण देशी ऐप के विकास की अनुमति देता है।


1
"स्वीकार्य" एक अजीब शब्द है - यह निश्चित रूप से संभव है , NDK के माध्यम से ...
ildjarn

1
आप शायद बुलेट को काटने और जावा सीखने से बेहतर हैं। एंड्रॉइड टूलकिट वास्तव में जावा से उपयोग करने का इरादा है, और जिस समय आप पहले से ही जानने से बचते हैं C ++ खर्च किया जाएगा और फिर कुछ यह जानने की कोशिश करेंगे कि C ++ से सभी एंड्रॉइड सामान कैसे काम करें। इसे सीखने के अवसर के रूप में सोचें :)
जेरेमी फ्रेज़र

व्यक्तिगत रूप से मैं बुलेट को काट दूंगा जैसा कि जेरेमी ने कहा था और बस आपको जावा के साथ क्या सीखना है। यह वास्तव में यह नहीं होना चाहिए कि आप इसे तेजी से सीखें।
ओमनीऑवल

आपके पहले बिंदु के लिए, C ++ जॉब (एंड्रॉइड के लिए विकासशील) फिट नहीं है और साथ ही जावा, परिचित की परवाह किए बिना। आपके दूसरे बिंदु के लिए, एंड्रॉइड लिनक्स होने के बावजूद, एंड्रॉइड और डेस्कटॉप ऐप्स के बीच बहुत बड़ा अंतर है; जीवनचक्र अलग हैं और आपको प्रक्रियाओं के बजाय गतिविधियों से निपटना होगा, जो सामान्य डेस्कटॉप विकास की तुलना में विकसित होने का एक बिल्कुल अलग तरीका है। आपके तीसरे बिंदु के लिए, C ++ में एंड्रॉइड एसडीके सीखने से आपको जावा में इसे सीखने में पहले की तुलना में काफी अधिक समय लगेगा (जावा सीखने के बाद), और फिर सी ++ पर स्विच करें।
कॉर्नस्टॉक

1
बहुत से लोग "C / C ++" शब्द का उपयोग करते हैं जैसे कि उस नाम की एक ही भाषा थी। मुझे आशा है कि आप जानते हैं कि C और C ++ दो अलग-अलग (हालांकि निकट संबंधी) भाषाएं हैं - और यह C ++ नहीं, बल्कि C लगता है, जिसके बारे में आप पूछ रहे हैं।
कीथ थॉम्पसन

जवाबों:


107

इस पर इस तरीके से विचार करें। आपके पास जावा एसडीके का उपयोग करने की क्षमता है जो एक पूर्ण कार्य अनुप्रयोग का निर्माण करता है जो डेवलपर्स के लिए उपलब्ध 100% एपीआई का लाभ उठाता है। NDK के साथ ऐसा कुछ भी नहीं है जो SDK (API परिप्रेक्ष्य से) के साथ नहीं किया जा सकता है, NDK केवल उच्च प्रदर्शन प्रदान करता है।

अब इसे उल्टा करके देखिए। यदि आप NDK में किसी एप्लिकेशन को 100% लिखना चुनते हैं, तो आप अभी भी पूरी तरह कार्यात्मक एप्लिकेशन लिख सकते हैं, लेकिन आप फ्रेमवर्क एपीआई की संख्या में सीमित हैं, जिसे आप एक्सेस कर सकते हैं। एंड्रॉइड फ्रेमवर्क के सभी को देशी परत पर एक्सेस नहीं किया जा सकता है; अधिकांश एपीआई केवल जावा हैं। यही कारण है कि कहना है कि सभी API नहीं है आप की आवश्यकता हो सकती NDK में उपलब्ध नहीं हैं, लेकिन कहीं के पास सभी एपीआई संपर्क में हैं।

इसके अलावा, NDK प्लेटफ़ॉर्म-विशिष्ट कोड प्रस्तुत करता है जो आपके वितरण के आकार को विस्तृत करता है। आपके द्वारा समर्थित प्रत्येक डिवाइस आर्किटेक्चर के लिए, आपका मूल कोड .so फ़ाइलों (armv5, armv7 और x86 के लिए एक) में बनाया जाना चाहिए, सभी एक ही एपीके में पैक किए गए हैं। निष्पादन योग्य कोड का यह दोहराव आपके एप्लिकेशन को आकार (यानी एक "वसा बाइनरी") को 3x तब तक बनाता है जब तक कि आप एप्लिकेशन को वितरित करते समय प्रत्येक आर्किटेक्चर के लिए अलग-अलग एपीके के निर्माण का कार्य नहीं लेते। यदि आप अपनी एपीके को आकार में काफी बढ़ाना नहीं चाहते हैं तो तैनाती प्रक्रिया थोड़ी अधिक काम की हो जाती है।

फिर से, जबकि इनमें से कोई भी आपको ऐसा करने से रोकता है जो आप चुनते हैं, यह बताता है कि Google आपके कोड के बहुमत के लिए जावा को "पसंदीदा" विधि और कम से कम प्रतिरोध का रास्ता क्यों बताता है। मुझे आशा है कि यह इस बात पर कुछ प्रकाश डालती है कि दस्तावेज़ीकरण को इस तरह से क्यों कहा जाता है।


1
आपका बहुत बहुत धन्यवाद! परिप्रेक्ष्य में परिवर्तन मैं गायब था बड़ा हिस्सा था। मुझे पता नहीं था कि NDK में कुछ API की कमी है। मैं वितरण के आकार के बारे में भी नहीं सोच रहा था; लेकिन यह अब बहुत मायने रखता है कि आप इसे ध्यान में लाए हैं (विशेष रूप से क्योंकि सी ++ में सभी मानक पुस्तकालयों को शामिल करना चाहिए, जबकि जावा के मानक पुस्तकालय पहले से ही उपकरणों पर हैं)। क्या आप .soफाइलों के बारे में थोड़ा समझा सकते हैं ? मुझे पता है कि समर्थित प्रत्येक हार्डवेयर आर्किटेक्चर के लिए मूल कोड का एक अलग संकलन होने की आवश्यकता है, इसलिए प्रत्येक .soफ़ाइलों में एक अलग संकलन है?
लोगन बेसेकर

43
एनडीके का प्रतिबंध वास्तव में अफ़सोस की बात है। मैं मोबाइल प्लेटफार्मों के लिए उच्च-प्रदर्शन कोड लिखना पसंद करूंगा, मुख्य रूप से बैटरी जीवन के कारणों के कारण। मोबाइल प्लेटफॉर्म पर मूल बातें । इसका बेहतर समर्थन क्यों नहीं? # #
कोनराड रूडोल्फ

2
@LoganBesecker NDK टूलकिन आपके कोड को .soआपके द्वारा समर्थित प्रत्येक आर्किटेक्चर के लिए क्रॉस-कंपाइल करेगा (इसे आपके मेकफाइल्स द्वारा नियंत्रित किया जाता है), और सभी फाइलों को आपके एपीके के लिबास / डायरेक्टरी में रखा जाएगा। जब एपीके इंस्टॉल किया जाता है, तो केवल उपयुक्त .soका चयन किया जाएगा, लेकिन उन्हें अभी भी प्रारंभिक एपीके में रहना होगा।
१०

1
@KonradRudolph आप अपने ऐप्स के कुछ हिस्सों को ndk के साथ लिख सकते हैं, Google Android के महत्वपूर्ण भागों के प्रदर्शन के लिए ऐसा करता है। बहुत विशिष्ट मामलों को छोड़कर, c ++ बनाम java Android विकास में अप्रासंगिक है, विशेष रूप से अब जब कि ART आ रहा है। एपीआई का सही उपयोग, विशेषकर जो बैटरी (जीपीएस, नेटवर्क) का उपभोग करते हैं, वहां आपको सावधान रहने की जरूरत है।
तेवोल्ड

1
जावा धीमा है। जेवीएम को लोड करने की आवश्यकता है, प्लस बाइट कोड बहुत कुशल है, लेकिन यह "देशी" नहीं है, और इसलिए इसमें एक छोटा जुर्माना है - आवेदन के आधार पर यह ध्यान देने योग्य हो सकता है। जैसा कि उन्होंने जावा का चयन क्यों किया, विशेष रूप से क्योंकि यह एक दुभाषिया में चलता है: कचरा संग्रहकर्ता स्मृति समस्याओं को कम करता है और क्रॉस-ऐप प्रभावों को कम करता है। इसके अतिरिक्त, जावा भाषा (जबकि क्रिया) डेवलपर की कई प्रस्तुतियाँ निकालती है C ++ की त्रुटियां।
डैनियल

25

यदि आप अपने जीवन में केवल एक ऐप विकसित करने जा रहे हैं, तो NDK का उपयोग करें।

यदि आप अपने जीवनकाल के दौरान एक से अधिक एप्लिकेशन विकसित करने के इरादे से एंड्रॉइड डेवलपमेंट सीखने का लक्ष्य बना रहे हैं - और आप उन सभी का ठीक से समर्थन करने में सक्षम होना चाहते हैं - यदि आप जावा सीखते हैं तो आप लंबे समय में बेहतर कर पाएंगे। इसके बजाय एंड्रॉइड के जावा एसडीके का उपयोग करें।


यह तर्क बहुत व्यावहारिक समझ में आता है।
ववरामन v

8

राजा के प्रोग्रामर अपने खेल तर्क के लिए C ++ का उपयोग करते हैं। और वे अपने टर्नओवर के हिसाब से बढ़िया जजमेंट करते दिखते हैं।

मेरे अनुभव में, सी ++ समस्या हल करने वालों के लिए है और जावा समस्या से बचने वालों के लिए है। मुझे या तो भाषा बहुत पसंद है, लेकिन जब आप अच्छा कोड लिखते हैं तो C ++ काफी फायदेमंद होता है। हालाँकि, वहां पहुंचने के लिए बस कुछ ही समय के लिए विजार्ड्री लग सकती है।

आप डेटा वैज्ञानिकों के लिए भी C ++ की सिफारिश कर सकते हैं, जो सामान्य रूप से अपना काम पूरा कर लेंगे, कहते हैं, पायथन या आर। सी। + अच्छा प्रदर्शन नहीं कर सकता है या बेहतर प्रदर्शन नहीं कर सकता है, लेकिन यह सिर्फ भाषा में एक प्रतिभा है। यही कारण है कि मैं कभी भी C ++ की सिफारिश नहीं करूंगा कि जो वह करना चाहता है - मैं सिर्फ उस इलाज के लिए एक सिर दूंगा जो वे इसके लिए हैं।


1
किसी भी समय आप C ++ के लिए अद्वितीय समस्याओं को हल करने में समय बिताते हैं जो आपके ऐप की वास्तविक कार्यक्षमता के निर्माण में खर्च हो सकता है।
user45623

4

मुझे यह दिलचस्प लेख मिला: http://betanews.com/2014/07/22/why-c-is-the-perfect-choice-for-modern-app-development/

C ++ को विशेष रूप से प्लेटफॉर्म की स्वतंत्रता के लिए बनाया गया था और जैसा कि अस्तित्व में हर एक ऑपरेटिंग सिस्टम पर पाया जाता है। आपके विशिष्ट मोबाइल उपयोगकर्ता को पता हो सकता है कि एंड्रॉइड ऐप्स को उद्देश्य-सी में जावा और आईओएस ऐप लिखे गए हैं, लेकिन जो कुछ नहीं जानते हैं वह यह है कि आपके डिवाइस पर मेमोरी में कुछ और की तुलना में अधिक सी / सी ++ कोड है। C / C ++ छोटे उपकरणों (जैसे कर्नेल, जो हार्डवेयर के साथ-साथ विशिष्ट रन टाइम लाइब्रेरी) को इंटरैक्ट करता है और इन उपकरणों को सक्षम करने वाले दूरसंचार नेटवर्क की बहुत अधिक ड्राइव करता है। एक विकास टीम के लिए अधिक महत्वपूर्ण बात यह है कि किसी भी डिवाइस और प्लेटफॉर्म पर आपके लिए कुछ भी करने की आवश्यकता के लिए C / C ++ इंटरफेस और लाइब्रेरी हैं। Android NDK टूलसेट फुल C / C ++ सपोर्ट का एक बेहतरीन उदाहरण है जो गेम डेवलपमेंट टीमों के लिए मूल रूप से जोड़ा गया था ताकि वे जावा और एंड्रॉइड जावा रनटाइम Dalvik से बचकर डिवाइस से सर्वश्रेष्ठ संभव प्रदर्शन प्राप्त कर सकें, जिस पर वर्चुअल मशीन एंड्रॉइड जावा कोड को निष्पादित किया जाता है। हर Android सेवा को सक्षम करने के लिए इसे नियमित रूप से बेहतर बनाया गया है।


3

मैं कहूंगा कि मुख्य ऐप के लिए जावा का उपयोग करें। लेकिन अगर आपके पास कुछ सी ++ कोड हैं, तो आपको पोर्ट या कुछ लाइब्रेरी की आवश्यकता है जो आपको कुशलतापूर्वक c ++ में कार्यान्वित की जाती हैं, तो अपने बिट के लिए ndt का उपयोग करें


4
उसे जावा का उपयोग क्यों करना चाहिए?
व्लादिस्लाव रैस्ट्रुसनी

3

मुझे सामान्य Android विकास के लिए C ++ का उपयोग नहीं करने का कोई कारण नहीं दिखता है, यदि आपके पास C ++ में काम करने और विंडो या किसी भी अन्य जैसे जटिल OS के साथ व्यापक अनुभव है, तो आप Android को जल्दी से समझ सकते हैं और उतना जटिल नहीं है अन्य OS हैं। जावा सीखने या सीखने के बिना काम करते समय यह अधिक निराशाजनक और जटिल होगा!


3

सबसे महत्वपूर्ण विचार यह है कि संकलित जावा कोड अपरिवर्तित सभी एंड्रॉइड डिवाइसों पर चलेगा, जबकि देशी कोड को सभी लक्ष्य प्लेटफार्मों के लिए संकलित करने की आवश्यकता होगी।

जावा और एंड्रॉइड दोनों के लिए सामान्य अभिप्राय यह है कि आप बहुमत को लिखते हैं यदि आपका सभी ऐप जावा में नहीं है और केवल तभी कोई अन्य विकल्प नहीं है, तो मूल चीजों का उपयोग करें ... इसलिए ऐप लिखने के बारे में सब कुछ जावा में ऐसा करने के लिए खुद को उधार देगा।

आप अपने आप को जावा में लिखकर देशी और जावा दुनिया के बीच की खाई को पाट सकते हैं।

साथ ही, यदि आप डुबकी लेते हैं और जावा सीखते हैं, तो आप खुद को एक बड़ा एहसान करेंगे। न केवल आपका एंड्रॉइड ऐप इसके लिए बेहतर होगा, बल्कि आप अपने आप को OO के लिए एक अलग दृष्टिकोण के लिए उजागर करेंगे और आप इसके लिए एक बेहतर प्रोग्रामर होंगे।

इस तथ्य को जोड़ें कि आप जावा में लिखकर सुरक्षा जोखिमों के एक पूरे समूह को साइड-स्टेप करेंगे।

मेरे दिमाग में, यह एक नो-ब्रेनर है - जावा का उपयोग करें।


2
"... और कोई अन्य विकल्प न होने पर ही मूल चीजों का उपयोग करें"। दूसरा कोई विकल्प कब नहीं हो सकता है? Android पर सब कुछ जावा के माध्यम से प्राप्त किया जा सकता है!
CinCout
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.