2011-07-05 9 views
9

में बनाता है मैं एक बड़े गेम इंजन पर काम कर रहा हूं जिसे एंड्रॉइड पर पोर्ट किया जाना चाहिए। सभी कोड सी/सी ++ है, इसलिए हम एनडीके के माध्यम से पोर्टिंग कर रहे हैं। मुझे सब कुछ मिल गया है, लेकिन बहुत सारे स्कोअरिंग के बाद, मुझे अभी भी अनिश्चितता है कि हमारी .so फ़ाइल के डीबग बनाम रिलीज संस्करणों के निर्माण के लिए सबसे अच्छी विधि क्या है। हर समय हाथ से चीजें बदलना पुराना हो रहा है।डीबग बनाम रिलीज एंड्रॉइड एनडीके

क्या आपके पास प्रत्येक लक्ष्य के लिए अलग-अलग एप्लिकेशन.एमके फ़ाइलें हैं? या jni/निर्देशिका के तहत एक एंड्रॉइड.एमके फ़ाइल में एकाधिक लक्ष्यों को शामिल करने का कोई तरीका है? या शायद एक तीसरा विकल्प मानक मेकफ़ाइल लिखना हो सकता है जो पर्यावरण चर को सेट करता है जो एंड्रॉइड.एमके फ़ाइल बिल्ड प्रक्रिया को सूचित करने के लिए उपयोग करता है?

अंत में, एंड्रॉइड के बारे में एक आखिरी सवाल: डिबग करने योग्य ध्वज जिसे AndroidManifest.xml फ़ाइल में सेट किया जाना चाहिए। डिवाइस पर कॉपी किए गए जेनरेट किए गए देशी कोड पर इसका वास्तव में कोई प्रभाव क्या है?

बेस्ट और धन्यवाद,

केविन

+0

ठीक है, आप किसी भी तरह से डीबग या रिलीज कैसे चुनते हैं? एनडीके नमूने में कोई डीबग या रिलीज झंडे प्रतीत नहीं होते हैं, न ही वे एक -ऑक्स विकल्प का उपयोग करते हैं। – Qwertie

उत्तर

9

क्या आपके पास प्रत्येक लक्ष्य के लिए अलग-अलग एप्लिकेशन.एमके फ़ाइलें हैं?

नहीं अलग उपनिर्देशिकाएं, सभी अपने एंड्रॉइड.एमके (साझा और स्थिर libs) के साथ, लेकिन मेरे लिए केवल एक आवेदन.एमके।

मेरे Application.mk बस है:

APP_STL := gnustl_static 
APP_OPTIM := debug 

मैं अभी भी अनिश्चित हूँ क्या सबसे अच्छा तरीका बनाम हमारे .so फ़ाइल के रिलीज संस्करणों डिबग के निर्माण के लिए है। हर समय हाथ से चीजें बदलना पुराना हो रहा है।

यह मेरे लिए कम से कम, jni/Android.mk + application.mk लेआउट का उपयोग करके थोड़ा सा फैल गया है।

Application.mk AndroidManifest.xml के आवेदन तत्व में फिर APP_OPTIM := debug है मैं android:debuggable="true" है जब आप NDK-निर्माण के साथ निर्माण, यह अनुकूलन (जो बंद या चालू करने के लिए उपयोगी है निर्धारित करने के लिए इस प्रकट ध्वज का उपयोग करता है, बंद रूपरेखा, आदि)

(ए लिटिल ऑफ विषय) के लिए हाल ही में मैंने

भर में भाग गया

https://code.google.com/p/android-ndk-profiler/

कौन सा है, जब http://code.google.com/p/jrfonseca/wiki/Gprof2Dot

012 के साथ संयुक्त

कुछ छोटे चित्रों को उत्पन्न करता है ताकि मेरे छोटे दिमाग को समझ सकें कि फ़ोन पर चीजें कैसे चल रही हैं।

+1

हाँ मैंने उन सभी चीजों को किया है - जो मैंने समाप्त किया है, उसके पास प्रत्येक लक्ष्य (रिलीज/डीबग) के लिए एक अलग एप्लिकेशन.एमके है। फिर प्रत्येक फ़ाइल में (release.mk/Debug.mk) मैं APP_CFLAGS के माध्यम से वैश्विक सी झंडे निर्दिष्ट करता हूं और मानक मेकफ़ाइल से रिलीज़.एमके या डीबग.एमके निर्दिष्ट करता हूं, ndk-build को कॉल करता हूं। –

+0

मैं खुद को डिबगिंग से अधिक प्रोफाइलिंग कर रहा हूं, और प्रति-सबप्रोजेक्ट आधार पर सेट/फ़िल्टर करने के लिए कुछ और झंडे हैं (-फॉमिट-फ्रेम-पॉइंटर और -जीजी उदाहरण के लिए असंगत हैं), इसलिए यह थोड़ा और शामिल है मेरे मामले में क्योंकि मैं नहीं चाहता कि मेरी पूरी lib श्रृंखला -pg हो। – dwerner

1

आप अपने .so के निर्माण करने के लिए Android.mk प्रणाली का उपयोग करने की आवश्यकता नहीं कर रहे हैं। व्यक्तिगत रूप से, मैं अपने स्वयं के मेकफ़ाइल का उपयोग उन लक्ष्यों के साथ करता हूं जिनकी मुझे आवश्यकता है और यह बहुत मानक डीबग बनाम रिलीज बिल्ड विनिर्देश के लिए अनुमति देता है।

+0

क्या एंड्रॉइड.एमके फाइलें एक ही फाइल में एकाधिक लक्ष्यों का समर्थन करती हैं?मुझे उम्मीद है कि उनके सिस्टम का उपयोग करके इसे बचाने का एक तरीका है। –

+0

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

0

मैं अलग-अलग लक्ष्यों के लिए लाइब्रेरी बनाने के लिए एक फ़ाइल का उपयोग करता हूं। एप्लिकेशन.एमके में यह "APP_ABI: = armeabi armeabi-v7a" जोड़ें, यह मेरे लिए काम करता है।