Android परियोजनाओं में संसाधन निर्माण - RegisterGeneratedResFolder
Android दुनिया में, कोड और संसाधन निर्माण की अवधारणाएँ बहुत प्रसिद्ध हैं। डैगर, रूम और अन्य पुस्तकालयों के पीछे मुख्य यांत्रिकी होने के नाते, अधिकांश परियोजनाओं में कोड जनरेशन का उपयोग किया जाता है, लेकिन संसाधनों के बारे में क्या? उदाहरण के लिए, निर्माण प्रक्रिया के दौरान, आपका google-services.jsonपार्स हो जाता है और फायरबेस पुस्तकालयों द्वारा उपयोग किए जाने वाले फ़ोल्डर values.xmlमें एक फ़ाइल में परिवर्तित हो जाता है। generatedजैसा कि यह पता चला है, अपने स्वयं के उत्पन्न संसाधनों को बनाना और उनका उपयोग करना तब तक आसान है जब तक आप जानते हैं कि आपके पास एक बार उनके साथ क्या करना है। ऐसा लगता है जैसे यह बहुत सरल है - आप आवश्यक फ़ाइलें बनाते हैं और उन्हें उत्पन्न फ़ोल्डर के अंदर रखते हैं। हालाँकि, इसके लिए बस थोड़ी और मेहनत की ज़रूरत है।
तार रूपांतरण के लिए ग्रेडल कार्य
आइए एक सरल ग्रैडल कार्य करें जो एक JSON फ़ाइल को कुछ स्ट्रिंग्स के साथ Android स्ट्रिंग्स XML फ़ाइल में परिवर्तित करता है और परिणाम को generatedफ़ोल्डर में सहेजता है। उस निर्देशिका में अन्य फ़ाइलों को देखते हुए, पथ इस प्रकार होना चाहिए:
app/build/generated/res/${generator}/${sourceSet}/values/strings.xml
यह पर्याप्त होना चाहिए, है ना? यदि आप जेनरेट की गई फ़ाइल से संसाधनों का उपयोग करके ऐप बनाने का प्रयास करते हैं, तो यह काम नहीं करेगा। प्रोजेक्ट के हिस्से के रूप में न तो एंड्रॉइड स्टूडियो और न ही ग्रैडल आपकी फ़ाइल को पहचानने में सक्षम होंगे। उन्हें ऐसा करने का एक तरीका है।
RegisterGeneratedResFolderबचाव के लिए
BaseVariantएंड्रॉइड बिल्ड सिस्टम के इंटरफ़ेस में एक जादुई तरीका है registerGeneratedResFolderजो ठीक यही करता है।
इसके लिए एक FileCollectionऑब्जेक्ट की आवश्यकता होती है जो हमारे फ़ोल्डर को इंगित करता है और उस कार्य को निर्दिष्ट करता है जो इसे उत्पन्न करता है।
ऊपर दी गई टिप्पणी हमें बताती है कि ग्रेडल द्वारा कार्य को निर्माण प्रक्रिया में शामिल किया जाएगा, इसलिए हमें केवल फ़ोल्डर को पंजीकृत करना है। यहां यह ध्यान दिया जाना चाहिए कि इसके लिए उपयोग किया जाने वाला पथ वास्तव में जेनरेट की गई फ़ाइल को संग्रहीत करने के पथ से अलग है।
app/build/generated/res/${generator}/${sourceSet}
generateStringsFileटास्क पहले चलाया जाएगा mergeResources, जिससे अगले बिल्ड चरणों के लिए और Android स्टूडियो में सभी नए संसाधन उपलब्ध होंगे। आप आवश्यक फ़ाइलें बनाने के लिए इसे मैन्युअल रूप से भी चला सकते हैं, ताकि आपके काम करने के दौरान कोई "संसाधन नहीं मिला" त्रुटियाँ न हों।
आगे क्या होगा?
जबकि उपरोक्त उदाहरण सरल मामलों के लिए पर्याप्त है, इसमें एक बड़ी खामी है - कार्य वृद्धिशील नहीं है। दूसरे शब्दों में, यह हर बार परियोजना के निर्माण के लिए चलाया जाएगा, अनिवार्य रूप से निर्माण समय में वृद्धि होगी। साथ ही, वर्तमान में उन फ़ाइलों को निर्दिष्ट करने का कोई तरीका नहीं है जिनका उपयोग इनपुट के रूप में और परिणाम को संग्रहीत करने के लिए फ़ोल्डर के रूप में किया जाना चाहिए। हम कार्य को ही वृद्धिशील बनाकर पहली समस्या को हल कर सकते हैं। दूसरा कार्य इनपुट जोड़कर और संभावित रूप से इसे प्लगइन में लपेटकर हल किया जाता है। एक कस्टम प्लगइन बनाना इस लेख के दायरे से बाहर है, लेकिन आप मेरे GitHub रेपो में कोड पा सकते हैं ।
ग्रैडल और एंड्रॉइड बिल्ड सिस्टम में यह मेरा पहला गहरा गोता था, और मुझे आशा है कि यह आपको अपनी चुनौतियों से निपटने में मदद करेगा। हैप्पी कोडिंग!

![क्या एक लिंक्ड सूची है, वैसे भी? [भाग 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































