रहस्य: एंड्रॉइड स्टूडियो का प्रोजेक्ट स्ट्रक्चर और बिल्ड सिस्टम
मुझे नहीं पता कि यह ग्रैडल बिल्ड सिस्टम की वजह से है (मैं इसे दांव लगाऊंगा), लेकिन मैं आपको बताऊंगा कि मैंने अब तक क्या समझा है।
अद्यतन 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 के लिए, इसका अर्थ है प्रति ऐप एक प्रोजेक्ट, और एक मॉड्यूल प्रति लाइब्रेरी और प्रति परीक्षण ऐप।
यदि आप एक ही प्रोजेक्ट में कई ऐप्स बनाने का प्रयास करते हैं तो कई समस्याएँ हैं। यह संभव है, लेकिन अगर आप कोशिश करते हैं (जैसे मैंने किया), तो आप देखेंगे कि लगभग हर चीज को एक प्रति ऐप के साथ काम करने के लिए डिज़ाइन किया गया है।
उदाहरण के लिए, "प्रोजेक्ट का पुनर्निर्माण" करने का एक विकल्प है, जो कई ऐप के साथ कोई मतलब नहीं रखता है, कई अन्य प्रोजेक्ट सेटिंग्स बेकार होंगी, और जब आपके पास कई रिपॉजिटरी हैं, तो अंतर्निहित वीसीएस प्रणाली महान नहीं है।
संरचना: फ़ोल्डर संरचना
शीर्ष स्तर के फ़ोल्डर
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 का निर्माण / संकलन करने के लिए हैं। उदाहरणों के लिए, release
APK पर आप (रक्षा के लिए) गार्ड को चलाना चाहते हैं, इसे अपनी कुंजी (डिबग कुंजी के विपरीत) के साथ साइन इन करें, ऑप्टिमाइज़ेशन चलाएं (हो सकता है कि 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 के उपलब्ध:
डिबग
रिहाई
.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 पैकेज की है।