मैं Android NDK और NetBeans 6.8 के साथ कैसे संघर्ष करता रहा

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

समस्या 1

एनडीके संग्रह से उदाहरणों में, सूत्रों को "सी" में प्रस्तुत किया गया है। यदि आप "C ++" का उपयोग करना चाहते हैं और आप अपना कोड * .cpp / * .h में लिखेंगे - तो फॉर्म के JNIEnv ऑब्जेक्ट के फ़ंक्शन कॉल को बदलना न भूलें (*env)->GetIntArrayElements(pixels, 0) को env->GetIntArrayElements(pixels, 0) (*env)->GetIntArrayElements(pixels, 0) साथ। env->GetIntArrayElements(pixels, 0)

समस्या २

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

समस्या 3

संकलन और रनिंग एमुलेटर पर एपीके। NetBeans 6.8 एमुलेटर पर पुस्तकालयों के साथ अनुप्रयोगों को तैनात करने और चलाने में गंभीर समस्याएं हैं। मुझे केवल मैनुअल असेंबली (चींटी संकलन का मैनुअल लॉन्च) और एमुलेटर पर एप्लिकेशन के मैनुअल लोडिंग द्वारा मदद की गई थी। यह ध्यान देने योग्य है कि इस तरह से संकलित किए गए एप्लिकेशन के बाद एमुलेटर पर डाउनलोड किया जाता है, अगर कोई बदलाव (पुन: अपलोड और पुन: अपलोड) करने की आवश्यकता नहीं है, तो नेटबाइन्स इतनी लाइब्रेरी सामान्य रूप से एपीके के मुख्य भाग को संकलित करता है, इसे एमुलेटर पर डालता है और इसे डीबग और रिलीज़ मोड दोनों में लॉन्च करता है। इसलिए, एक तनावपूर्ण स्थिति पैदा होती है। यह आवश्यक है कि डिबग करें और देशी हिस्से को अलग से (बड़ी संख्या में इशारों के साथ), और फिर सामान्य भाग में जावा भाग (इंटरफ़ेस) को डीबग करें।
चींटी के माध्यम से संकलन करते समय आदेशों का क्रम निम्नानुसार है:
1. "एंड्रॉइड अपडेट प्रोजेक्ट --target --पथ पथ / से / आपके / प्रोजेक्ट /"
2. "चींटी डीबग" या "चींटी रिलीज"
3. उसके बाद, प्रोजेक्ट बिन फ़ोल्डर में एप्लिकेशन बिल्ड होंगे और आप एप्लिकेशन को "adb -e install bin / Application.apk" एमुलेटर पर डाउनलोड करना शुरू कर सकते हैं। एमुलेटर इस समय तक चलना चाहिए।

मैं आपको एक बार फिर याद दिला दूं कि इन क्रियाओं की आवश्यकता केवल तब होती है जब इंटरफ़ेस कोड के साथ संकलन करने और उसे एमुलेटर पर लोड करने के लिए देशी कोड डीबग करना होता है। उसके बाद, एप्लिकेशन के जावा-इंटरफ़ेस भाग को डीबग करने के लिए नेटबियंस से आगे जाने की आवश्यकता नहीं है। ऐसा क्यों होता है, क्या इसे किसी तरह से अलग किया जा सकता है? मुझे नहीं पता, इसलिए गुरु की टिप्पणियों को सुनना दिलचस्प होगा।

UPD: देशी कोड के साथ आवेदन का प्रदर्शन 10 गुना बढ़ गया। यदि, विभिन्न कंटेनरों के साथ प्रयोगों के माध्यम से, जावा कोड में परीक्षण समस्या की गणना ~ 100 से कम कर दी गई थी, तो इसे STL के साथ देशी कोड का उपयोग करके ~ 7s माना जाता है।

आवेदन

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

छवि
छवि
छवि
छवि
छवि
छविछवि

QRCode

Source: https://habr.com/ru/post/In120273/


All Articles