एंड्रॉइड गेम का विकास c ++ में


26

इसलिए मुख्य रूप से c / c ++ डेवलपर होने के नाते, मैंने हमेशा सोचा है कि मेरे लिए मोबाइल गेम डेवलपमेंट का एकमात्र विकल्प iOS का उपयोग करना था, जो c / c ++ (और उद्देश्य C को कम करने) की अनुमति देता है।

मैंने एक मित्र से सुना, हालांकि, एंड्रॉइड में एक देशी विकास टूलकिट है जो एंड्रॉइड पर काम करने के लिए सी ++ कोड की अनुमति देता है।

क्या किसी ने इसका उपयोग किया है, और यदि हां, तो आप इसे कैसे ढूंढते हैं? मेरा मतलब है, क्या यह "बस काम करेगा" आईओएस की तरह, या क्या अधिक विचार हैं जो कि उपलब्ध विभिन्न एंड्रॉइड डिवाइसों की विस्तृत देखभाल के कारण ध्यान रखने की आवश्यकता है?

जवाबों:


26

Android API जावा हैं। 2010 के बाद से, Google C / C ++ डेवलपर्स के लिए NDK (एक SDK) प्रदान करता है।

NDK दो तरीके प्रदान करता है:

  • Android 1.5 उपकरणों के लिए, आप एक योगिनी लाइब्रेरी को लोड कर सकते हैं और इसे JNI ब्रिज के माध्यम से जावा एप्लिकेशन से उपयोग कर सकते हैं
  • एंड्रॉइड 2.3 उपकरणों के लिए, आप फुलस्क्रीन एप्लिकेशन के लिए जावा गतिविधि कोड को बायपास करने के लिए एक NativeActivity का उपयोग कर सकते हैं।

NDK कुछ C / C ++ API प्रदान करता है:

  • एक छद्म परिवाद जिसे बायोनिक कहा जाता है: कई कार्य उपलब्ध नहीं हैं
  • एक पुस्तकालय
  • OpenGL ES 1.x (> Android 1.5) और OpenGL ES 2.x (Android 2.0)
  • OpenSL (Android 2.3 पर सीमित समर्थन)

लेकिन कई एपीआई केवल जावा (जेएनआई के माध्यम से भी उपलब्ध हैं) हैं।

NDK 5 संस्करण C ++ डेवलपर्स के लिए पहला प्रयोग करने योग्य है क्योंकि यह प्रदान करता है:

  • RTTI
  • अपवाद समर्थन करता है
  • STLport
  • बहु थ्रेडेड प्रोग्राम के लिए gdb समर्थन

सबसे दर्दनाक ऑपरेशन एंड्रॉइड डिवाइस पर डिबगिंग है। इसलिए मैं अपने खुद के मल्टी-प्लेटफॉर्म फ्रेमवर्क (ओएस एक्स, विंडोज, लिनक्स, आईओएस और एंड्रॉइड) को पहले डेस्कटॉप प्लेटफॉर्म, अगले आईओएस प्लेटफॉर्म (सिम्युलेटर) और लास्ट (एंड्रॉइड) पर डिबग करने के लिए विकसित करता हूं।

Android एमुलेटर (एक सिम्युलेटर नहीं) का प्रदर्शन खराब है और OpenGL ES 2.x का अनुकरण नहीं कर सकता है। मैं वास्तविक उपकरणों को विकसित करने की सलाह देता हूं।

आप कई उपयोगी सुझाव पा सकते हैं:


"इनपुट कोड" लिंक अब टूट गया है।
जोश

1
निश्चित: एलीस्मार्कोव को IOPixel में बदलें
एलिस

9

मैंने Android के लिए दो एसडीएल + ओपन गेम्स को पोर्ट करने के लिए एंड्रॉइड एनडीके का सफलतापूर्वक उपयोग किया है और यह आश्चर्यजनक रूप से आसान है। मेरे पास एक 200-लाइन जावा आवरण है जो जीएल संदर्भ बनाता है और उपयोगिता वर्ग जैसे इनपुट, ध्वनि और छवि लोड करने के लिए C ++ कोड को वापस कॉल करने के लिए प्रदान करता है। NDK में "सैन-एंजिल्स" नमूना कार्यक्रम एक उत्कृष्ट प्रारंभिक बिंदु है।

वैसे, जावा की एक पंक्ति के बिना सी / सी ++ प्रोग्राम बनाना संभव है, लेकिन मुझे समय-समय पर जेवीएम को वापस बुलाकर कुछ ओएस-स्तर के तरीकों का उपयोग करना सुविधाजनक लगता है।

मुझे लगता है कि यदि आपका गेम पहले से ही लिनक्स पर संकलित है, तो आप घर पर महसूस करेंगे। मेरी वर्तमान परियोजना में 100+ फ़ाइलों में से केवल 4 में एक #ifdef ANDROID_NDKनिर्देश है (छवि और ध्वनि संबंधित कक्षाएं)।

वास्तव में खेल को पोर्ट करने में बिताया जाने वाला अधिकांश समय एक ज्ञात एमुलेटर बग के कारण था जिसकी मुझे जानकारी नहीं थी।


इससे पहले अतीत में मैं (कुंठित) मुद्दों को एंड्रॉइड एमुलेटर पर अपने ओपेंगल गेम का संकलन / निर्माण / तैनात करने की सरल पाइपलाइन प्राप्त करने की कोशिश कर रहा हूं। क्या आप मुझे किसी संसाधन या ऐसी किसी चीज़ की ओर संकेत कर सकते हैं जिसका मैं उपयोग कर सकता हूँ? (मुझे नहीं पता कि आपके पास वे उपयोगिता वर्ग खुले स्रोत हैं, लेकिन यदि आप करते हैं, तो मुझे उन्हें देखने में दिलचस्पी होगी।) धन्यवाद
brainydexter

1
@brainydexter: मैं एक कमांडलाइन आदमी हूं, जो ऑटोटूलस का आनंद लेता है, इसलिए मुझे यकीन नहीं है कि मैं आपके लिए बहुत मददगार होऊंगा, लेकिन मेरी पाइपलाइन इस प्रकार है: सुनिश्चित करें ANDROID_NDK_ROOTकि यह $PATH(साथ [sdk_location]/toolsऔर साथ [sdl_location]/platform-tools) में सेट है; परियोजना निर्देशिका में जाएं; एनडीके कोड का उपयोग करके संकलित करें ndk-build; जावा कोड संकलित करें और पैकेज का उपयोग करके निर्माण करें ant compile; एमुलेटर या कनेक्टेड डिवाइस का उपयोग करके अपलोड करें ant install। इंजन को खोलने के लिए, मैंने अभी तक फैसला नहीं किया है, लेकिन मैं पहले से ही ब्लॉग
sam hocevar

लिंक के लिए धन्यवाद! मैं आपके ब्लॉग पर नज़र रखूँगा।
7:27 पर ब्रेनडेक्सटर

4

एंड्रॉइड ने एंड्रॉइड NDK के माध्यम से संस्करण 1.5 के बाद से देशी अनुप्रयोगों का समर्थन किया है , जो आपके लक्षित दर्शकों को बहुत अच्छी तरह से कवर करना चाहिए। आपको अभी भी एक सरल एंड्रॉइड जावा एप्लिकेशन की आवश्यकता है जो जेएनआई के माध्यम से आपके आवेदन के मूल पक्ष को लोड करता है और उदाहरण के लिए इनपुट और रेंडर कॉल को आगे बढ़ाता है।

NDK के कई संस्करण हो चुके हैं, लेकिन आप नवीनतम NDK का उपयोग कर सकते हैं और उस लक्ष्य एपीआई का चयन कर सकते हैं जिसका आप समर्थन करना चाहते हैं। एंड्रॉइड संस्करण 2.3 के बाद से आप देशी पक्ष पर बहुत कुछ कर सकते हैं और कम जावा कोड की आवश्यकता होती है, लेकिन 2.3 के लिए डिवाइस का समर्थन वर्तमान में बहुत सीमित है।

नेटिव एंड्रॉइड C / C ++ डेवलपमेंट कम से कम फुलस्क्रीन गेम्स के लिए एक कार्यशील समाधान है और मौजूदा C / C ++ ओपनजीएल ES अनुप्रयोगों को पोर्ट करने के लिए आवश्यक प्रयास काफी छोटा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.