प्लगइन्स के बिना NetBeans IDE में Android विकास। भाग २

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

डिबगिंग


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

विधि संख्या 1

इससे पहले कि आप कुछ करना शुरू करें, आपको मॉनीटर नामक टूल के बारे में सोचने की जरूरत है। यह <Android-SDK>/tools फ़ोल्डर में स्थित है। जैसा कि मैंने लेख के अंतिम भाग में लिखा था, यह पहले से ही पीएटीएच में होना चाहिए, इसलिए आप इसे सीधे कमांड लाइन या विंडोज में सर्च बार से चला सकते हैं, लेकिन कोई भी, ज़ाहिर है, शॉर्टकट बनाने के लिए परेशान नहीं करता है। जो लोग ग्रहण में काम करते थे, वे तुरंत इस उपकरण के सभी पैनलों को पहचान लेंगे। सबसे महत्वपूर्ण logcat और डिवाइसेस हैं।

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

एक डिबगर को संलग्न करना

पैनल में बटन हाल ही में दर्ज किए गए कॉन्फ़िगरेशन को याद करता है, इसलिए अगली बार जब आपको कुछ भी दर्ज नहीं करना है।

कॉन्फ़िगर किए गए कॉन्फ़िगरेशन

अलग-अलग, मैं इस तथ्य पर ध्यान आकर्षित करता हूं कि बंदरगाहों को देखने के लिए न केवल मॉनिटर को बुलाया जाता है। वह वर्चुअल मशीन से जुड़ने में एक मध्यस्थ के रूप में भी काम करता है, इसलिए यदि यह नहीं चल रहा है, तो यादृच्छिक से पोर्ट 8600 पर कनेक्ट हो रहा है, अफसोस, काम नहीं करेगा।

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

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

लेकिन कभी-कभी आपको प्रोग्राम शुरू होने के समय डिबगिंग शुरू करने की आवश्यकता होती है। आप उपरोक्त कॉल के लिए एक ही कॉल का उपयोग कर सकते हैं, या आप डीबगिंग शुरू करने के लिए दूसरे तरीके से नेटबीन्स को कॉन्फ़िगर कर सकते हैं।

विधि संख्या 2

दूसरी विधि उसी तरह काम करेगी जैसे ग्रहण में: हम डिबगिंग शुरू करते हैं और एप्लिकेशन स्वयं शुरू होता है। उसके बाद, यह डीबगर को कनेक्ट करने के लिए प्रतीक्षा करता है, और उसके बाद ही चलता रहता है। नेटबीन्स यहां हमारी मदद करेंगे। यदि आप डिबग ( CTRL+F5 ) करने की कोशिश करते हैं, तो नेटबाइन्स एक एंटी-फाइल बनाने की पेशकश करेगा, जो उसे बताएगा कि यह हमारे प्रोजेक्ट में कैसे होना चाहिए। जो हमें चाहिए। उसके बाद, ide-file-targets.xml , जिसकी सामग्री को निम्नलिखित के साथ बदलने की आवश्यकता है:

 <?xml version="1.0" encoding="UTF-8"?> <project basedir=".." name="KillerApp-IDE"> <import file="../build.xml"/> <target name="-load-props"> <property file="nbproject/debug.properties"/> </target> <target name="-check-props"> <fail unless="jpda.host"/> <fail unless="jpda.address"/> <fail unless="jpda.transport"/> </target> <target name="-init" depends="-load-props, -check-props"/> <target name="-launch-monitor"> <if> <condition> <not> <socket server="localhost" port="8700"/> </not> </condition> <then> <exec executable="${android.tools.dir}/monitor${bat}"/> <waitfor maxwait="20" maxwaitunit="second"> <socket server="localhost" port="8700"/> </waitfor> <sleep seconds="2"/> </then> </if> </target> <target name="-launch-debug" depends="-find-main-activity"> <exec executable="adb"> <arg line="shell am start -D"/> <arg line="${project.app.launcharg}"/> </exec> </target> <target name="debug-nb" depends="-init, -launch-monitor, -launch-debug"> <nbjpdaconnect address="${jpda.address}" host="${jpda.host}" name="${ant.project.name}" transport="${jpda.transport}" /> </target> </project> 

फ़ाइल debug.properties फ़ाइल से गुण लोड करके शुरू होती है, जिसे आपको निम्नलिखित सामग्री के साथ एक ही फ़ोल्डर में debug.properties आवश्यकता है:

 jpda.host=localhost jpda.address=8700 jpda.transport=dt_socket 

अब आप यह पता लगा सकते हैं कि यह फाइल क्या करती है। यहां मुख्य कार्य debug-nb , जिसे नेटबियंस शुरू करते समय डिबगिंग शुरू करता है, और यह इन -init , -init -launch-monitor और -init -launch-debug पर निर्भर करता -launch-debug । इसमें विशेष रूप से दिलचस्प कुछ भी नहीं है, यह कार्य केवल debug.properties फ़ाइल से चर को लोड और चेक करता है। लेकिन -launch-monitor पहले -launch-monitor ही अधिक सुविधाजनक है: आखिरकार, हमें मॉनीटर चलाने की जरूरत है, अगर यह पहले से ही नहीं चल रहा है, और यह कार्य सिर्फ कार्य पर है। चींटी के पास एक अच्छा काम है जो आपको यह देखने की सुविधा देता है कि कोई प्रोग्राम किसी विशिष्ट पोर्ट पर सुन रहा है या नहीं - socket । इस लक्षण से, आप केवल यह निर्धारित कर सकते हैं कि मॉनिटर काम कर रहा है या नहीं। यदि नहीं, तो आपको इसे चलाने की आवश्यकता है और प्रतीक्षा करें ( wait-for कार्य के लिए)। शुरू करने के बाद, कनेक्शन को स्वीकार करने के लिए मॉनिटर शुरू करने के लिए अभी भी दो सेकंड इंतजार करने लायक है (उपकरण के विशिष्ट कॉन्फ़िगरेशन के आधार पर मूल्य को थोड़ा समायोजित करने की आवश्यकता हो सकती है)।

उसके बाद, आप एप्लिकेशन को स्वयं चला सकते हैं। पिछले लेख में, हमने कमांड लाइन का उपयोग करके पहले ही चींटी से ऐसा कर लिया था। ऐसा करने के लिए, कमांड adb shell am start -a android.intent.action.MAIN -n < >/<> । इस बार हम कमांड का अधिक विस्तार से विश्लेषण करेंगे। adb shell एक कमांड है जो आपको एंड्रॉइड के अंदर कमांड लाइन के साथ सीधे काम करने की अनुमति देता है। एक गतिविधि प्रबंधक है जिसमें सुविधाओं की एक बहुत प्रभावशाली श्रृंखला है; आप आधिकारिक दस्तावेज में उनके बारे में पढ़ सकते हैं। हमें केवल आवश्यक गतिविधि शुरू करने के लिए start कमांड की आवश्यकता है, जिसे हम -n स्विच, और -a स्विच सेट के बाद इंगित करते हैं, क्योंकि यह संभवतः स्पष्ट हो गया है, इरादा।

custom_rules.xml फ़ाइल में पहले से ही एक कार्य है जो चलाने के लिए आवश्यक पैरामीटर प्रदान करता है: -find-main-activity । इस बार हमें एप्लिकेशन को पिछली बार की तरह ही लॉन्च करने की आवश्यकता है, लेकिन -D स्विच के साथ, ताकि एप्लिकेशन शुरू करने के बाद तुरंत काम करना जारी न रखें, लेकिन पहले डीबगर का इंतजार करता है।

इस प्रकार, इन सभी धोखाधड़ी के पूरा होने के बाद, debug-nb शुरू करने के लिए तैयार है: मॉनिटर चल रहा है, एप्लिकेशन चल रहा है और डीबगर इंतजार कर रहा है। यह केवल nbjpdaconnect जॉब का उपयोग करके इसे कनेक्ट करने के लिए बनी हुई है। जैसा कि नाम से ही स्पष्ट है, यह कार्य शुद्ध रूप से नेटबीन्स के लिए विशिष्ट है।

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

पुस्तकालय जोड़ना और पुस्तकालय परियोजनाएँ बनाना


पुस्तकालय एक पूर्वनिर्धारित जार फ़ाइल हो सकती है, या यह एक अलग एंड्रॉइड परियोजना हो सकती है जिसे परियोजना में शामिल किए जाने से पहले संकलित करने की आवश्यकता है। वे अलग-अलग तरीकों से क्रमशः जुड़े हुए हैं।

एक precompiled फ़ाइल के मामले में , बहुत कम चरण हैं:

  1. आपको फ़ाइल को मुख्य प्रोजेक्ट फ़ोल्डर के libs फ़ोल्डर में छोड़ने की आवश्यकता है।
  2. जावा स्रोत Classpath टैब पर प्रोजेक्ट गुणों में, आपको फ़ाइल में पथ जोड़ना होगा। दरअसल, आपको ऐसा करने की जरूरत नहीं है, लेकिन तब आईडीई हमें इस लाइब्रेरी से कोड नहीं बताएगा, जो आईडीई का उपयोग करने के लाभों को नकारता है।

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

android update project -p < > -l < >


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

android update project -p KillerApp -l ../AndroidCompatibilityPackage-v7-appcompat


वह सब है! आप पहले से ही प्रोजेक्ट संकलित कर सकते हैं। यदि हम project.properties फ़ाइल को देखते हैं, तो हमें इस कॉन्फ़िगरेशन फ़ाइल में रेखा मिल जाती है

android.library.reference.1=../AndroidCompatibilityPackage-v7-appcompat


दरअसल, वह सब जो उस टीम ने किया था। ठीक उसी तरह, आप बिना किसी आदेश के नए पुस्तकालयों को जोड़ सकते हैं, मुख्य बात यह नहीं है कि पुस्तकालय संख्या को एक से बढ़ाना न भूलें: android.library.reference.2 , android.library.reference.3 और इसी तरह।

बेशक, जैसा कि पहले से तय की गई फ़ाइल के साथ है, आपको प्रोजेक्ट में उल्लिखित लाइब्रेरी प्रोजेक्ट के सोर्स फोल्डर को जावा सोर्स क्लासपाथ में, साथ ही साथ इस्तेमाल होने वाले पुस्तकालयों (अगर हम उनका उपयोग भी करते हैं) को याद रखना होगा। यही है, आपको लाइब्रेरी प्रोजेक्ट के libs फ़ोल्डर में src , gen और jar files फ़ोल्डरों को जोड़ना चाहिए।

क्या होगा अगर हम अपना खुद का प्रोजेक्ट बनाना चाहते हैं? लाइब्रेरी प्रोजेक्ट बनाना बिल्कुल वैसा ही है जैसा कि अपवाद के साथ एक नियमित प्रोजेक्ट बनाना, जिसके लिए आपको थोड़ी अलग कमांड की आवश्यकता होती है:

android create lib-project -n < > -t android-< API> -p < > -k < >


मुख्य अंतर यह है कि lib-project बजाय lib-project पेश की जाती project । इसके अलावा, आपको मुख्य गतिविधि का नाम निर्दिष्ट करने की आवश्यकता नहीं है, क्योंकि लाइब्रेरी को सीधे लॉन्च करने की आवश्यकता नहीं है। इसके अलावा, परियोजना का निर्माण एक नियमित परियोजना के लिए जारी है।

परीक्षण के लिए परियोजनाओं का निर्माण


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

android create test-project -p < > -n < > -m < >


परीक्षणों के लिए परियोजनाएं आमतौर पर मुख्य परियोजना के एक सबफ़ोल्डर में बनाई जाती हैं, इसलिए हम मुख्य परियोजना के फ़ोल्डर से ऐसी परियोजना बनाएंगे:

android create test-project -p tests -n KillerAppTest -m ..


इसके अलावा, आप NetBeans में उसी तरह से एक नई परियोजना बनाना जारी रख सकते हैं जिस तरह से एक नियमित परियोजना के मामले में। लेकिन इस बार, हम तीसरे चरण में test आइटम को छोड़ सकते हैं, जब हम विभिन्न मेनू आइटमों को चींटी की नौकरी देते हैं। लेकिन Run Project से अब Run Project launch को हटाने और केवल debug install छोड़ने के लायक है, क्योंकि हमारे पास अभी भी यहां लॉन्च करने के लिए कुछ भी नहीं है।

टेस्ट प्रोजेक्ट टीम

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

सबसे पहले आपको NetBeans में अतिरिक्त नौकरियों के लिए एक फ़ाइल जेनरेट करनी होगी। हम व्यक्तिगत फ़ाइलों को चलाने और व्यक्तिगत फ़ाइलों को डीबग करने में रुचि रखते हैं। इन सभी क्रियाओं को CTRL+F6 , CTRL+F5 और CTRL+SHIFT+F5 दबाकर उत्पन्न किया जा सकता है। उसके बाद, आपको फ़ाइलों को फिर से nbproject फ़ोल्डर में अपलोड करने की आवश्यकता है, क्योंकि डिबगिंग को दूसरे तरीके से एक नियमित प्रोजेक्ट में जोड़ते समय, केवल ide-file-targets.xml थोड़ी अलग होगी। फ़ाइल की शुरुआत एक नियमित प्रोजेक्ट को डीबग करने के मामले में ही है, इसलिए मैं पूरी फ़ाइल की प्रतिलिपि नहीं बनाता। दिलचस्पी रखने वाले इसे बिटकॉइन पर देख सकते हैं। लेकिन फिर हमारे पास अन्य कार्य हैं:

 <target depends="-setup" name="run-selected-file-in-src"> <fail unless="run.class">Must set property 'run.class'</fail> <echo level="info">Running tests in ${run.class}...</echo> <run-tests-helper> <extra-instrument-args> <arg value="-e"/> <arg value="class"/> <arg value="${run.class}"/> </extra-instrument-args> </run-tests-helper> </target> <macrodef name="launch-debug-and-connect"> <element name="debugged-class" optional="yes"/> <sequential> <parallel> <run-tests-helper> <extra-instrument-args> <debugged-class/> <arg value="-e"/> <arg value="debug"/> <arg value="true"/> </extra-instrument-args> </run-tests-helper> <sequential> <sleep seconds="5"/> <nbjpdaconnect address="${jpda.address}" host="${jpda.host}" name="${ant.project.name}" transport="${jpda.transport}" /> </sequential> </parallel> </sequential> </macrodef> <target depends="-setup, -init, -launch-monitor" name="debug-selected-file-in-src"> <fail unless="debug.class">Must set property 'debug.class'</fail> <echo level="info">Debugging tests in ${debug.class}...</echo> <launch-debug-and-connect> <debugged-class> <arg value="-e"/> <arg value="class"/> <arg value="${debug.class}"/> </debugged-class> </launch-debug-and-connect> </target> <target depends="-setup, -init, -launch-monitor" name="debug-nb"> <launch-debug-and-connect/> </target> > <target depends="-setup" name="run-selected-file-in-src"> <fail unless="run.class">Must set property 'run.class'</fail> <echo level="info">Running tests in ${run.class}...</echo> <run-tests-helper> <extra-instrument-args> <arg value="-e"/> <arg value="class"/> <arg value="${run.class}"/> </extra-instrument-args> </run-tests-helper> </target> <macrodef name="launch-debug-and-connect"> <element name="debugged-class" optional="yes"/> <sequential> <parallel> <run-tests-helper> <extra-instrument-args> <debugged-class/> <arg value="-e"/> <arg value="debug"/> <arg value="true"/> </extra-instrument-args> </run-tests-helper> <sequential> <sleep seconds="5"/> <nbjpdaconnect address="${jpda.address}" host="${jpda.host}" name="${ant.project.name}" transport="${jpda.transport}" /> </sequential> </parallel> </sequential> </macrodef> <target depends="-setup, -init, -launch-monitor" name="debug-selected-file-in-src"> <fail unless="debug.class">Must set property 'debug.class'</fail> <echo level="info">Debugging tests in ${debug.class}...</echo> <launch-debug-and-connect> <debugged-class> <arg value="-e"/> <arg value="class"/> <arg value="${debug.class}"/> </debugged-class> </launch-debug-and-connect> </target> <target depends="-setup, -init, -launch-monitor" name="debug-nb"> <launch-debug-and-connect/> </target> कनेक्ट> <target depends="-setup" name="run-selected-file-in-src"> <fail unless="run.class">Must set property 'run.class'</fail> <echo level="info">Running tests in ${run.class}...</echo> <run-tests-helper> <extra-instrument-args> <arg value="-e"/> <arg value="class"/> <arg value="${run.class}"/> </extra-instrument-args> </run-tests-helper> </target> <macrodef name="launch-debug-and-connect"> <element name="debugged-class" optional="yes"/> <sequential> <parallel> <run-tests-helper> <extra-instrument-args> <debugged-class/> <arg value="-e"/> <arg value="debug"/> <arg value="true"/> </extra-instrument-args> </run-tests-helper> <sequential> <sleep seconds="5"/> <nbjpdaconnect address="${jpda.address}" host="${jpda.host}" name="${ant.project.name}" transport="${jpda.transport}" /> </sequential> </parallel> </sequential> </macrodef> <target depends="-setup, -init, -launch-monitor" name="debug-selected-file-in-src"> <fail unless="debug.class">Must set property 'debug.class'</fail> <echo level="info">Debugging tests in ${debug.class}...</echo> <launch-debug-and-connect> <debugged-class> <arg value="-e"/> <arg value="class"/> <arg value="${debug.class}"/> </debugged-class> </launch-debug-and-connect> </target> <target depends="-setup, -init, -launch-monitor" name="debug-nb"> <launch-debug-and-connect/> </target> 

व्यक्तिगत परीक्षण चलाने के लिए run-selected-file-in-src कार्य की आवश्यकता है। यह run-tests-helper मैक्रो का उपयोग करता है, जिसे अतिरिक्त मापदंडों के साथ एंड्रॉइड बिल्ड सिस्टम में परिभाषित किया गया है। वास्तव में, यह सब जो मैक्रो करता है वह प्रोग्राम के परीक्षण के लिए मापदंडों के साथ adb shell am instrument कमांड को चलाता है (हाँ, यह फिर से गतिविधि है)। हम कमांड लॉन्च के लिए तर्कों -e class < > को जोड़ते हैं, ताकि डिवाइस सभी परीक्षणों को अंधाधुंध रूप से नहीं चलाएगा, लेकिन एक विशिष्ट फ़ाइल पर ध्यान केंद्रित करेगा।

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

परिणाम


अब हम संक्षेप में बता सकते हैं कि हमने क्या किया है। कुल मिलाकर, बहुत अच्छी संभावनाएँ प्राप्त हुईं:


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


XML फ़ाइलों का संपादन इतना महत्वपूर्ण नहीं है, लेकिन, बेशक, WYSIWYG संपादक के बिना, इंटरफ़ेस को संपादित करना बहुत दुखद है। इसलिए, मैं व्यक्तिगत रूप से परियोजना को ग्रहण में आयात करता हूं और आवश्यकता पड़ने पर इंटरफ़ेस संपादित करता हूं।

मैं ऐसे उपकरणों की प्रयोज्यता के बारे में कुछ शब्द कहना चाहता हूं। पिछले लेख की टिप्पणियों में, इसी तरह के सवाल उठे, इसलिए एक बार फिर मैं आपको याद दिलाता हूं: यह एक प्रयोग है। यदि चींटी के माध्यम से एक आधिकारिक निर्माण प्रणाली है जो आईडीई से स्वतंत्र है, तो मेरे लिए विरोध करना मुश्किल था और एक उपकरण स्थापित करने के लिए इसका उपयोग करने की कोशिश नहीं की, जो मूल रूप से एंड्रॉइड के साथ काम करने के लिए डिज़ाइन नहीं किया गया था।

इसके अलावा, वास्तव में, इस प्रणाली का उपयोग करने के लिए नेटबीन्स का उपयोग करना आवश्यक नहीं है। प्रोजेक्ट को स्थापित करने के बाद, आप कमांड लाइन में टाइप कर सकते हैं, उदाहरण के लिए, प्रोजेक्ट को बनाने और चलाने के लिए ant debug install launch । और, स्व-निर्मित स्क्रिप्ट असेंबली के विपरीत, यह एक पूर्ण असेंबली होगी - ठीक उसी प्रकार जैसे कि ADT के साथ ग्रहण करता है: AIDL, BuildConfig, RenderScript, zipalign, ProGardard और बाकी सभी से इंटरफेस की पीढ़ी के साथ। NetBeans में प्रोग्राम करने के लिए इसका उपयोग करने के लिए, यह, ज़ाहिर है, पहले से ही एक शौकिया है। लेकिन, किसी भी मामले में, मैं व्यक्तिगत रूप से इस प्रयोग को करने में बहुत दिलचस्पी रखता था और मुझे उम्मीद है कि अन्य लोग इसके बारे में पढ़ने में रुचि रखते थे।

लिंक की जोड़ी


  1. BitBucket पर सभी फाइलें
  2. प्लगइन्स के बिना NetBeans IDE में Android विकास। भाग 1

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


All Articles