एंड्रॉइड स्टूडियो प्रोजेक्ट स्ट्रक्चर (बनाम एक्लिप्स प्रोजेक्ट स्ट्रक्चर)


109

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

उदाहरण के लिए, अगर मुझे R.java फाइल को दो अलग-अलग IDE में ढूंढना था, तो रास्ते इस तरह दिखेंगे:

ग्रहण: app \ gen \ com.example.app \ R.java

Android Studio: app \ build \ source \ r \ debug \ com.example.app \ R.java

ये रास्ते अलग क्यों हैं? मेरा R.java Android स्टूडियो में डिबग फ़ोल्डर में क्यों स्थित है? इससे कुछ त्रुटियां जल्दी होती हैं, और अगर किसी को इन मतभेदों में कोई अंतर्दृष्टि है तो मैं उनकी सराहना करूंगा।


3
मैंने इस प्रश्न में चित्र पोस्ट करने की कोशिश की, लेकिन मुझे कम से कम 10 प्रतिष्ठा की आवश्यकता है। मेरे द्वारा योग्यता प्राप्त करने के बाद मैं छवियों को शामिल करने के लिए पोस्ट को संपादित करूंगा।
जेसी

9
आप ग्रहण का उपयोग क्यों नहीं करते हैं ताकि आप केवल एंड्रॉइड की विशिष्ट समस्याओं से निपटें और न कि आईडीई सामान (विशेष रूप से एंड्रॉइड स्टूडियो शुरुआती दिनों में पूर्वावलोकन के रूप में )?
लुक्सप्रॉग

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

2
मुझे लगता है कि आप इसके बजाय IntelliJ IDEA का उपयोग कर सकते हैं, क्योंकि यह बहुत स्थिर है। इसके अतिरिक्त, एक बार जब एंड्रॉइड स्टूडियो अधिक स्थिर हो जाता है, तो यह करने के लिए कदम बहुत आसान हो जाएगा क्योंकि वे एक ही आईडीई हैं (एएस के साथ बढ़ाया एंड्रॉइड एकीकरण प्रदान करते हैं)।
free3dom

3
मुझे ग्रहण का उपयोग करते हुए एंड्रॉइड देव में 3 साल का अनुभव है और मुझे गंभीरता से A.Studio का उपयोग करना मुश्किल है। काश किसी ने सीधा जवाब दिया हो क्योंकि यह समय लोगों के लिए स्थानांतरित हो गया है; मैं स्थानांतरित हो गया हूं। मैं विकास के दौरान hunches पर काम नहीं करना चाहता।
धीरज भास्कर

जवाबों:


203

रहस्य: एंड्रॉइड स्टूडियो का प्रोजेक्ट स्ट्रक्चर और बिल्ड सिस्टम

मुझे नहीं पता कि यह ग्रैडल बिल्ड सिस्टम की वजह से है (मैं इसे दांव लगाऊंगा), लेकिन मैं आपको बताऊंगा कि मैंने अब तक क्या समझा है।

अद्यतन 4: 2014/09/11 के लिए धोखा शीट जोड़ा गया BuildTypes, Flavorsऔर Variants(मैं अंत में यह लिखने के लिए आत्मविश्वास महसूस करता हूं: डी)
अपडेट 3: 2014/09/11 तुलना कार्यस्थानों और परियोजनाओं को
अपडेट करने के लिए सटीक अपडेट 2: 2014/04/17 एएस परियोजना संरचना के लिए और अधिक विवरण जोड़ा गया
अद्यतन 1: 2013/07/29 IntelliJ परियोजना संरचना जोड़ा गया

IntelliJ की प्रोजेक्ट संरचना (अंत में दिखाई गई) Android प्लगइन के साथ IntelliJ के लिए है। हालाँकि, एंड्रॉइड स्टूडियो में एक परियोजना संरचना है, जैसे कि:

संरचना: परियोजनाएं और मॉड्यूल

एंड्रॉइड स्टूडियो में मॉड्यूल एक्लिप्स में एक परियोजना की तरह है

एंड्रॉइड स्टूडियो में परियोजना ग्रहण में एक कार्यक्षेत्र की तरह है (सटीक होने के लिए, अन्योन्याश्रित परियोजनाओं के साथ एक कार्यक्षेत्र)

से प्रलेखन (एंड्रॉयड स्टूडियो IntelliJ विचार पर आधारित है):

आप इंटेलीज आईडीईए में जो कुछ भी करते हैं, आप एक परियोजना के संदर्भ में करते हैं। एक परियोजना एक संगठनात्मक इकाई है जो एक पूर्ण सॉफ्टवेयर समाधान का प्रतिनिधित्व करती है।

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

Android के लिए, इसका अर्थ है प्रति ऐप एक प्रोजेक्ट, और एक मॉड्यूल प्रति लाइब्रेरी और प्रति परीक्षण ऐप।

यदि आप एक ही प्रोजेक्ट में कई ऐप्स बनाने का प्रयास करते हैं तो कई समस्याएँ हैं। यह संभव है, लेकिन अगर आप कोशिश करते हैं (जैसे मैंने किया), तो आप देखेंगे कि लगभग हर चीज को एक प्रति ऐप के साथ काम करने के लिए डिज़ाइन किया गया है।

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

संरचना: फ़ोल्डर संरचना

Android स्टूडियो प्रोजेक्ट संरचना

शीर्ष स्तर के फ़ोल्डर

1. मुख्य परियोजना

यह संपूर्ण परियोजना संदर्भ होगा ( ग्रहण भूमि: अपने कार्यक्षेत्र की तरह लेकिन जो आपकी परियोजना के लिए प्रासंगिक है) तक सीमित है। Ex: HelloWorldProjectयदि आपके द्वारा दिया गया आवेदन का नाम थाHelloWorld

2. .आदि

यह जहाँ प्रोजेक्ट विशिष्ट मेटाडेटा Android Studio (AS) द्वारा संग्रहीत किया जाता है। ( ग्रहण भूमि: project.properties फ़ाइल)

3. प्रोजेक्ट मॉड्यूल

यह वास्तविक परियोजना है। पूर्व: HelloWorldयदि आपके द्वारा दिया गया आपका आवेदन नाम HelloWorld है

4. प्रवृत्त

यह वह जगह है जहां ग्रेडेल बिल्ड सिस्टम के जार रैपर यानी यह जार है कि कैसे विंडोज (मेरे मामले में ओएस) में स्थापित ग्रेडल के साथ संचार होता है।

5. बाहरी पुस्तकालय

यह वास्तव में एक फोल्डर नहीं है, लेकिन एक ऐसी जगह है जहाँ रेफरेंस लाइब्रेरी ( ग्रहण भूमि: रेफरेंस लाइब्रेरी) दिखाई जाती हैं। यहाँ पर लक्षित प्लेटफ़ॉर्म आदि दिखाया गया है।

[ साइड नोट: यह वह जगह है जहां ग्रहण भूमि में हम में से कई ने संदर्भित त्रुटियों को ठीक करने के लिए संदर्भित पुस्तकालयों और फिक्स प्रोजेक्ट गुणों को हटाने के लिए उपयोग किया था, याद है?]

प्रोजेक्ट फोल्डर विस्तार से

यह उपरोक्त सूची में # 3 नंबर है। निम्नलिखित उप dirs है

1. निर्माण

इस प्रक्रिया के सभी पूर्ण उत्पादन हैं makeअर्थात classes.dex, संकलित कक्षाएं और संसाधन, आदि।

Android Studio GUI में, केवल कुछ फ़ोल्डर्स दिखाए जाते हैं। महत्वपूर्ण हिस्सा यह है कि आपका R.java यहाँ पाया जाता हैbuild/source/<flavor>/r/<build type(optional)>/<package>/R.java

2. काम

यह मानक लिबास फ़ोल्डर है जिसे आप ग्रहण भूमि में भी देखते हैं

3. src

यहाँ, आप केवल देखने javaऔर resकरने के लिए फ़ोल्डर जो अनुरूप srcफ़ोल्डर और resफ़ोल्डर ग्रहण भूमि । यह बहुत स्वागत सरलीकरण IMHO है।

मॉड्यूल पर ध्यान दें:

मॉड्यूल ग्रहण भूमि परियोजनाओं की तरह हैं । यहां यह विचार है कि आपके पास एक आवेदन परियोजना है (ऊपर की सूची में मॉड्यूल # 3) और कई पुस्तकालय परियोजनाएं (जैसा कि वैश्विक परियोजना फ़ोल्डर के तहत अलग मॉड्यूल है (उपरोक्त सूची में # 1)) जो आवेदन परियोजना पर निर्भर करती है। इन पुस्तकालय परियोजनाओं को अन्य अनुप्रयोगों में फिर से कैसे इस्तेमाल किया जा सकता है, मुझे अभी भी पता नहीं चला है।

[ साइड नोट: पूरे पुन: संगठन में कुछ लाभ हैं जैसे कि src फ़ोल्डर में सरलीकरण, लेकिन इतनी जटिलताएं। जटिलताएं मुख्य रूप से इस नए परियोजना लेआउट पर बहुत पतले प्रलेखन के कारण हैं ।]

नई बिल्ड सिस्टम

नए बिल्ड सिस्टम के लिए उपयोगकर्ता गाइड

स्वाद और बिल्डटेप्स, आदि का स्पष्टीकरण - हुलाबालू के बारे में क्या है?

जायके और buildTypes के लिए चीटशीट

BuildType: debug और सभी प्रोजेक्ट्स पर डिफ़ॉल्ट रूप से उपलब्ध releaseहैं buildTypes। वे विभिन्न APK बनाने के लिए SAME CODE का निर्माण / संकलन करने के लिए हैं। उदाहरणों के लिए, releaseAPK पर आप (रक्षा के लिए) गार्ड को चलाना चाहते हैं, इसे अपनी कुंजी (डिबग कुंजी के विपरीत) के साथ साइन इन करें, ऑप्टिमाइज़ेशन चलाएं (हो सकता है कि proguard या अन्य उपकरण के माध्यम से), थोड़ा अलग packageNamesउपयोग करें (हम इसके com.company.productलिए releaseऔर इसके com.company.product.debugलिए उपयोग करें debug) आदि हम भी डिबग BuildConfig.DEBUGलॉग को चालू करने के लिए डिबग फ्लैग ( ) का उपयोग करते हैं (क्योंकि यह ऐप को धीमा कर देता है) releaseबिल्ड पर । यह debugविकास के दौरान तेजी से निर्माण के लिए बनाता है, लेकिन releaseप्ले स्टोर पर रखने के लिए एक अनुकूलित निर्माण भी है ।

उत्पाद स्वाद: कोई डिफ़ॉल्ट स्वाद उपलब्ध नहीं हैं (या सटीक होने के लिए, डिफ़ॉल्ट स्वाद रिक्त / नामहीन है)। नि: शुल्क संस्करण या सशुल्क संस्करणFlavors हो सकता है जहां उनके पास अलग-अलग कोड हैं । वे कुछ स्रोत कोड फ़ाइलों या संसाधनों के समान कोड लेकिन अलग-अलग संस्करण (या कोई संस्करण) साझा नहीं करते हैं।Main

बिल्डविरिएंट: एक buildVariantवह है जो एक उत्पन्न APK वास्तव में से मेल खाती है। इन्हें (क्रम में) Product Flavor+ Build Type=Build Variant नाम दिया गया है ।
उदाहरण 1: यदि आपके पास freeऔर paidदो स्वादों के रूप में है। बिल्ड वेरिएंट आपको मिलेंगे:
फ्री - डिबग
फ्री - रिलीज
पेड - डिबग
पेड - रिलीज
ताकि 4 संभव एपीके कॉन्फ़िगरेशन हो। कुछ विन्यास एक विशेष परियोजना में कोई मतलब नहीं है, लेकिन वे कर रहे हैं उपलब्ध।

उदाहरण 2: आप 2 (नई परियोजनाओं / कोई जायके के लिए) buildVariantsके बाद से डिफ़ॉल्ट स्वाद बेनाम / खाली है, या APK के उपलब्ध:
डिबग
रिहाई

अगर यह मदद करता है तो Intellij के प्रोजेक्ट स्ट्रक्चर के साथ इसकी तुलना करें :

इंटेलीज प्रोजेक्ट स्ट्रक्चर स्नैपशॉट

.Idea (1) फ़ोल्डर में मुख्य रूप से आंतरिक IntelliJ IDEA जानकारी के साथ कई सबफ़ोल्डर्स होते हैं।

Src (2) फ़ोल्डर में MyActivity.java (3) फ़ाइल स्रोत कोड है जो आपके एप्लिकेशन की कार्यक्षमता को लागू करता है। फ़ाइल com.example पैकेज की है।

रेस (4) फ़ोल्डर में विभिन्न दृश्य संसाधन हैं।

लेआउट / main.xml फ़ाइल (5) विभिन्न प्रकारों के संसाधनों के गठित आवेदन की उपस्थिति को परिभाषित करती है।

मान फ़ोल्डर (6) को विभिन्न प्रकार के संसाधनों का वर्णन करने वाली .xml फ़ाइलों को संग्रहीत करने के लिए अभिप्रेत है। वर्तमान में, फ़ोल्डर में स्ट्रिंग स्ट्रिंग। Xml फ़ाइल होती है जिसमें स्ट्रिंग संसाधन परिभाषाएँ होती हैं। जैसा कि आप Add a Color सेक्शन से देखेंगे, लेआउट फ़ोल्डर में भी हो सकता है, उदाहरण के लिए, रंगों का एक डिस्क्रिप्टर।

ड्रा करने योग्य फ़ोल्डर (7) में चित्र शामिल हैं।

जीन (8) फ़ोल्डर में R.java (9) फ़ाइल होती है जो दृश्य संसाधनों और जावा स्रोत कोड को जोड़ती है। जैसा कि आप नीचे दिए गए अनुभागों से देखेंगे, IntelliJ IDEA स्थिर संसाधनों और R.java के बीच कड़े एकीकरण का समर्थन करता है। जैसे ही कोई संसाधन जोड़ा या हटाया जाता है, R.java में संबंधित वर्ग और वर्ग फ़ील्ड स्वचालित रूप से तदनुसार उत्पन्न या हटा दिए जाते हैं। R.java फाइल भी com.example पैकेज की है।


3
ग्रहण और एंड्रॉइड स्टूडियो प्रोजेक्ट संरचनाओं की तुलना करने के लिए बहुत बहुत धन्यवाद! और हाँ इस परियोजना संरचना पर प्रलेखन और रोजमर्रा के विकास में इसका उपयोग कैसे किया जा सकता है, यह गैर-मौजूद है।
kpsfoo

1
2. "src यहाँ, आप केवल जावा और Res फ़ोल्डर देखते हैं ..." अधिक सटीक होने के लिए, javaऔर resनीचे हैं src/main
कोड-अपरेंटिस

एंड्रॉइड स्टूडियो फ़ोल्डर संरचना के बारे में कुछ दस्तावेज यहां दिए गए हैं: developer.android.com/sdk/installing/studio-build.html
डेविड डी ई फ्रीटास

31

Android Studio: app \ build \ source \ r \ debug \ com.example.app \ R.java

ये रास्ते अलग क्यों हैं? मेरा R.java Android स्टूडियो में डिबग फ़ोल्डर में क्यों स्थित है? इससे कुछ त्रुटियां जल्दी होती हैं, और अगर किसी को इन मतभेदों में कोई अंतर्दृष्टि है तो मैं उनकी सराहना करूंगा।

सीधे शब्दों में कहें, एंड्रॉइड स्टूडियो आपके सिस्टम पर डिबग बिल्ड टाइप बनाने के लिए कॉन्फ़िगर किया गया है।

एक्लिप्स / एडीटी को एक बार में एक ही बिल्ड का समर्थन करने के लिए डिज़ाइन किया गया है (जो मैं बता सकता हूं)। नई बिल्ड सिस्टम के प्राथमिक लक्ष्यों में से एक ( उपयोगकर्ता गाइड से ):

Make it easy to create several variants of an application, 
either for multi-apk distribution or for different flavors of an application

इसलिए जहां ग्रहण / एडीटी एक R.javaफ़ाइल उत्पन्न कर सकता है , वहीं एंड्रॉइड स्टूडियो कई का समर्थन करता है। उत्पन्न फ़ोल्डर R.javaमें स्थित है debugक्योंकि डिफ़ॉल्ट रूप से नया बिल्ड सिस्टम समर्थन करता है debugऔर releaseबल्ले से प्रकार का निर्माण करता है । यदि आपने अपना बिल्ड वैरिएंट (बटन, निचले बाएं हाथ का कोना) बदल दिया है तो एएस जारी करने के R.javaलिए releaseनिर्देशिका में उत्पन्न होगा ।

यह सरल परियोजनाओं के लिए कुछ भी मतलब नहीं हो सकता है, लेकिन बिल्ड वेरिएंट के समर्थन का अर्थ है कि मैं जिस परियोजना पर काम कर रहा हूं, सहित कई डेवलपर्स के लिए निर्माण प्रक्रिया का कठोर सरलीकरण।

हमारी परियोजना कुल 8 अलग-अलग एपीके संयोजनों का समर्थन करने के लिए 2 बिल्ड प्रकार (डिबग और रिलीज़) के साथ 4 स्वादों का समर्थन करती है। और उन संयोजनों में से प्रत्येक में थोड़ा अलग कॉन्फ़िगरेशन है, इसलिए यह निर्माण प्रणाली वास्तव में हमारे लिए काम करती है। मेरा एंड्रॉइड स्टूडियो एक अलग मशीन पर स्थापित है, लेकिन अगर मेमोरी मेरी सही ढंग से सेवा करती है तो R.javaफ़ाइल मौजूद है build/source/<flavor>/r/<build type>/package/R.java। जब हमारा CI सर्वर एपीके फाइलों का निर्माण करता है, तो यह इन R.javaफाइलों में से प्रत्येक का उपयोग अलग-अलग पैकेज बनाने के लिए करता है।


0

Google हमारी घोषणा के अनुसार, ग्रहण में Android डेवलपर टूल (ADT) के लिए समर्थन बंद कर रहा है । आपको अपने ऐप डेवलपमेंट प्रोजेक्ट्स को जल्द से जल्द Android Studio में भेजना चाहिए। एंड्रॉइड स्टूडियो में संक्रमण के बारे में अधिक जानकारी के लिए, एंड्रॉइड स्टूडियो में माइग्रेट करना देखें।

तो एंड्रॉइड स्टूडियो के लिए एंड्रॉइड डेवलपमेंट टूल के लिए सबसे अच्छा है केवल भविष्य के सभी एंड्रॉइड एम के लिए ---


Android डेवलपर के लिए ग्रहण - eclipse.org/downloads/packages/...
Yousha Aleayoub

-2

एंड्रॉइड स्टूडियो 3.0.1 के लिए और सभी सुविधाओं को चुना:

  • Android O नवीनतम
  • Android Auto
  • Android चीजें
  • Android पहनें
  • एंड्रॉइड टीवी
  • C ++ सपोर्ट
  • कोटलिन का समर्थन

संस्करण 3.0.1 में संरचना अन्य सभी उत्तरों की तरह नहीं दिखती है।

हाल की संरचना 2018 में प्रदर्शित है, Android Studio 3.0.1 01/2018।

नौसिखिया थोड़े पाया सुविधा उप फ़ोल्डर में प्रयोग करने योग्य कुछ:

अपने Android Studio 3.0.1 01_2018 को अपडेट करें:

टूलटिप:

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