अगर मैं आपकी समस्या को सही ढंग से समझ, आप जो एक-दूसरे से मिलते-जुलते कई Android एप्लिकेशन को बनाना चाहते हैं, (यानी एक ही स्रोत कोड का एक बहुत कुछ है,), लेकिन जो विशेष रूप से (मामूली) मायनों में अलग हैं , और आप इन ऐप्स में से प्रत्येक को एक अलग पैकेज रखना चाहते हैं, ताकि इसे Google Play जैसे ऐप स्टोर पर अलग से अपलोड और वितरित किया जा सके। एक परियोजना पुस्तकालय उन लक्ष्यों को पूरा करने के लिए एक उत्कृष्ट सुविधा है।
मुझे लगता है कि आपके विभिन्न संस्करणों के बीच अंतर नाबालिग हैं, संसाधनों और ऐप नाम और पैकेज जैसी चीजें शामिल हैं, और एक स्विच जो एक मुक्त संस्करण के लिए उन्हें छोड़कर भुगतान संस्करण के लिए कुछ विशेषताओं को चालू करता है।
यहां तक कि यदि यह मामला नहीं है, तो नीचे वर्णित तरीकों में बहुरूपता का उपयोग करके, आपके विभिन्न ऐप्स महत्वपूर्ण तरीकों से भिन्न हो सकते हैं और फिर भी एक सामान्य परियोजना लाइब्रेरी साझा कर सकते हैं।
किसी प्रोजेक्ट लाइब्रेरी को ग्रहण में परिभाषित किया जा सकता है जैसा कि किसी भी एंड्रॉइड प्रोजेक्ट को परिभाषित किया जा सकता है, लेकिन इसे प्रोजेक्ट लाइब्रेरी के रूप में चिह्नित किया गया है (एंड्रॉइड पेज के नीचे "लाइब्रेरी" बॉक्स को चेक करके पुस्तकालय की परियोजना गुण संवाद) और संकलित नहीं किया जा सकता है और अपने आप चलाया जा सकता है। इसके बजाए, यह एक या अधिक अन्य परियोजनाओं में संदर्भ द्वारा शामिल किया जाना है जो वास्तविक ऐप्स हैं (इस तरह के प्रत्येक ऐप के प्रोजेक्ट प्रॉपर्टी डायलॉग के एंड्रॉइड पेज पर इसका संदर्भ जोड़कर)। ये ऐप्स प्रोजेक्ट लाइब्रेरी का उपयोग करेंगे, और इस प्रकार इसके कोड और क्षमताओं को साझा करेंगे।
प्रत्येक ऐसे रेफरेंसिंग ऐप की अपनी प्रकट फ़ाइल होगी (जहां उनके संबंधित, अलग-अलग पैकेज घोषित किए जा सकते हैं), और वे अपनी कक्षाएं भी परिभाषित कर सकते हैं (गतिविधि लाइब्रेरी के गतिविधि और/या अनुप्रयोग कक्षाओं से प्राप्त कक्षाओं सहित), ताकि ये कक्षाएं प्रत्येक ऐप के लिए पॉलिमॉर्फिक रूप से विशिष्ट हो सकें जो प्रोजेक्ट लाइब्रेरी का उपयोग करती है (उदाहरण के लिए, विधियों को ओवरराइड करके या प्रोजेक्ट लाइब्रेरी की गतिविधि- या एप्लिकेशन-व्युत्पन्न कक्षाओं के भीतर सार के रूप में परिभाषित विधियों के लिए परिभाषाएं प्रदान करके), हालांकि आप पुस्तकालय का उपयोग करने वाले प्रत्येक ऐप के मैनिफेस्ट फ़ाइल (जैसे, गतिविधि या एप्लिकेशन टैग में) के संदर्भ में उन्हें संदर्भित किए बिना उन लाइब्रेरी कक्षाओं को संशोधित किए बिना (बशर्ते कि वे अमूर्त नहीं हैं) का उपयोग कर सकें, जैसे आप गतिविधि या एप्लिकेशन का संदर्भ लेंगे - ऐप के भीतर परिभाषित कक्षाएं।
यदि आपने इस दृष्टिकोण का उपयोग करने का निर्णय लिया है, तो आप अपनी मुख्य स्रोत फ़ाइलों को प्रोजेक्ट लाइब्रेरी में डाल देंगे, और प्रत्येक ऐप के लिए एक अलग परियोजना तैयार करेंगे, जिसमें से प्रत्येक परियोजना लाइब्रेरी का संदर्भ देगा। प्रोजेक्ट लाइब्रेरी की मेनिफेस्ट फाइल को उस लाइब्रेरी का उपयोग करके जो भी प्रोजेक्ट बनाया जा रहा है, उसके प्रकट होने से पहले ओवरराइड किया जाएगा (असल में, मुझे लगता है कि प्रोजेक्ट लाइब्रेरी का अपना मैनिफेस्ट पूरी तरह से अनदेखा नहीं है, न कि सिर्फ ओवरराइड किया गया है, लेकिन फिर भी यह एक मैनिफेस्ट बनाने के लिए उपयोगी है लाइब्रेरी के लिए, ताकि आप मैन्युअल रूप से टेम्पलेट कर सकें - कॉपी और संपादित करें - प्रत्येक प्रोजेक्ट का मैनिफेस्ट जो लाइब्रेरी के अपने मैनिफेस्ट से इसका उपयोग करता है)।
मैंने कई एंड्रॉइड ऐप्स बनाने के लिए इस दृष्टिकोण का उपयोग किया है जो कुछ क्षमताओं को साझा करता है, और यह मेरे लिए बहुत अच्छा काम करता है।
पैकेज नामकरण के बारे में, किसी भी पुराने पैकेज का नाम होगा एक पुस्तकालय परियोजना के लिए काम, लेकिन निश्चित रूप से यह समझ में लाइब्रेरी प्रोजेक्ट के पैकेज के लिए एक ही उपसर्ग का उपयोग करने के रूप में आप अपने विभिन्न व्यक्तिगत (जैसे, मुक्त बनाम के लिए उपयोग में आता है भुगतान किया गया) ऐप्स जो इसका उपयोग करते हैं, ".library" जैसे नाम के आखिरी हिस्से के रूप में, जबकि विभिन्न ऐप्स के पास ".myappfree" और ".myapppaid" जैसे अंत हो सकते हैं। स्वाभाविक रूप से, आप विवादों को रोकने के लिए लाइब्रेरी के पैकेज उपसर्ग के लिए अपने रिवर्स डोमेन नाम सम्मेलन का उपयोग करना चाहेंगे, जैसा कि आप एक रिलीज़ ऐप के पैकेज नाम के लिए करेंगे।
http://winmerge.org/
अगर मैं अपने स्थिति में थे,,, हालांकि मैं केवल इस उपकरण का उपयोग मैन्युअल अंतर की पहचान करने के लिए होगा:
Windows में, एक अच्छा, मुक्त स्रोत कोड ठिकानों की तुलना के लिए उपकरण WinMerge है और लाइब्रेरी प्रोजेक्ट में आपके कोड के रिफैक्टरिंग को स्वचालित करने के लिए इसका उपयोग करने का प्रयास नहीं करेगा। यह आपके अपने (मैनुअल) नियंत्रण के तहत सबसे अच्छा किया जाएगा।
आखिरकार, एक विकल्प के रूप में, आप एक ऐप का उपयोग करने पर विचार कर सकते हैं जो निःशुल्क है और इसमें आपकी पूर्ण ऐप की क्षमताओं को डिफ़ॉल्ट रूप से अपग्रेड करने का विकल्प है, जिसमें आपकी पूर्ण ऐप की क्षमताओं (उसी एपीके के भीतर वितरित) में अपग्रेड करने का विकल्प है अलग-अलग निःशुल्क और भुगतान किए गए ऐप्स रखने के बजाय भुगतान करें। इन-एप भुगतानों ने पिछले कई महीनों में (आईएबी के संस्करण 3 के रिलीज के साथ) में एक बड़ा सौदा किया है, और यद्यपि अभी भी कुछ ग्लिच हैं, फिर भी वे मुफ्त/पूर्ण डिचोटोमी के लिए अधिक व्यावहारिक विकल्प बन गए हैं प्रथम।
कूल!यह वास्तव में एक नियमित dif-tool का उपयोग कर विलय कर काफी दर्द रहित था। केवल उन्हीं चीज़ों में जो मैं वास्तव में आया था, वह था कि मैंने पैकेज नामों को हार्डकोड किया, और लाइब्रेरी प्रोजेक्ट्स में काम नहीं कर रहे के साथ ज्ञात समस्या; दोनों आसानी से सुलभ। –
MrJre