2012-04-13 15 views
6

से मैं कहना है कि मैं अंग्रेजी के साथ बहुत अच्छा नहीं कर रहा हूँ है, तो मैं माफी चाहता हूँ अगर मैं बहुत अच्छी तरह से मैं क्या मतलब है :)ग्रहण: पहली बार में ही स्रोत

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

मेरी परियोजना मानक जावा नहीं है, लेकिन एंड्रॉइड + फोनगैप है। मेरे पास एक ग्रहण प्लगइन है जो एक खाली फोनगैप प्रोजेक्ट बनाता है ... शायद मेरे मानक प्रोजेक्ट को बनाने के लिए इस प्लगइन को संशोधित करने का कोई तरीका है?

क्या यह संभव है? सबसे अच्छा यह है कि स्रोत परिवर्तन करने के लिए एक प्रणाली भी बच्चों को मुख्य परियोजना बनाती है, लेकिन यह अनिवार्य नहीं है।

फिर से मेरी अंग्रेजी के लिए क्षमा करें।

संपादित करें:

क्षमा अगर मैं फिर से इस प्रश्न को संपादित, लेकिन वास्तव में मैं अपनी समस्या के लिए एक समाधान नहीं मिल रहा।

मैं इसे एक उदाहरण के साथ एकीकृत करना चाहता हूं, शायद मैं समझ सकता हूं कि मुझे क्या चाहिए।

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

एप्लिकेशन मुख्य रूप से एचटीएमएल + jquerymobile में है, लेकिन आप गतिविधि, एंड्रॉयड प्रकट संशोधित किया है, कुछ phonegap प्लगइन्स, कुछ मीडिया संसाधन, आदि

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

लेकिन बहुत बड़ी समस्या यह है: यदि आपके कोड में केवल थोड़ा अपडेट है, तो आप इसे 10/20/50/100/1000 परियोजनाओं पर कैसे दोहरा सकते हैं?

मैंने पोस्ट में एंड्रॉइड, फोनगैप और कॉर्डोवा टैग भी अधिक विशिष्ट होने के लिए जोड़ा है।

फिर से मेरी अंग्रेजी के लिए क्षमा करें।

संपादित N ° 2

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

एंड्रॉइड libs एक समाधान नहीं है, क्योंकि यह संपत्ति फ़ाइलों को निर्यात नहीं कर सकता है।

मैं इस सवाल का एक विस्तृत जवाब के लिए तलाश के लिए एक इनाम शुरू कर दिया है ... कृपया। मदद :(

+0

शायद मैंने समाधान को हल किया है। http://stackoverflow.com/questions/8077042/building-many-similar-android-apk-files-at-the-same-time – Laphroaig

+0

आप सफलता Maven उपयोग करने के लिए आपके phonegap परियोजना में से एक का निर्माण अब तक कर रहे हैं ? – yorkw

उत्तर

0

आप एक परियोजना में अपने कोड बन सकता था और एक जार फ़ाइल बनाने के एक निर्भरता के रूप में इस परियोजना या जार जोड़ने से आपके 'cusomized संसाधन' परियोजनाओं के लिए।

+0

हां, यह एक मानक जावा परियोजना का समाधान है। लेकिन मेरा एक एंड्रॉइड/फोनगैप प्रोजेक्ट है जो एक एपीके फ़ाइल संकलित करेगा ... मैं अपनी पहली पोस्ट अपडेट करूंगा। वैसे भी धन्यवाद! – Laphroaig

3

आशा है कि आपको यह समझने पर आपका अधिकार मिल जाएगा कि आप इसे कैसे करना चाहते हैं, फिर एक सामान्य तरीका की तलाश कर रहे हैं, फिर आपको फ़ाइलों को बदलने की वास्तविक सूची। क्योंकि यह कुछ है जो आप ' शायद आप इसे अपने आप से बाहर निकालने के लिए नहीं आएंगे।(हालांकि एंड्रॉयड परियोजनाओं में अच्छी तरह से संरचित कर रहे यह सिर्फ res/, asserts/ फ़ोल्डर और android.manifest फ़ाइल बदलने के लिए पर्याप्त हो सकता है। मैं केवल मेरे Phonegap परियोजनाओं के बारे में अधिक कुछ भी इस्तेमाल किया।

तो पसंद का मेरा हथियार git किया जाएगा शाखाओं।
(Some words about git if you've not already heard about it.)

अंतिम प्रतिबद्धता को देखते हुए आपके पूर्ण आवेदन का प्रतिनिधित्व किया जाता है। यहां से आप परियोजना (जैसे वैलेंसिया सीएफ) रिलीज के लिए परियोजना को फोर्क कर सकते हैं। सुनिश्चित करें कि आप केवल संसाधनों को बदल दें लेकिन मुख्य कार्यक्रम में कुछ भी नहीं! यह महत्वपूर्ण है कि आपका मुख्य विकास शाखा सबसे विकसित संस्करण बनी हुई है!

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

यदि आपके पास एक आकर्षक गिट क्लाइंट है तो आप आसानी से उन फ़ाइलों को चुन सकते हैं जिन्हें आप बदलना चाहते हैं। यह आसान है "wtf-MOAH-pcCra $ h कंप्यूटर को" फेंकने से भिन्न होता है "यदि आपके पास विलय करने के लिए बहुत सारी व्यक्तिगत फ़ाइलें हैं लेकिन केवल बड़े फ़ोल्डरों + res/ और android.manifest जैसी कुछ फ़ाइलें नहीं हैं।

एक और संभावना cherry-pick नामक गिट फीचर का उपयोग करना होगा। मैं इसे इस्तेमाल कभी नहीं किया है, लेकिन वर्णन काफी आप क्या चाहते हैं की तरह लगता है:

एक या अधिक मौजूदा प्रतिबद्ध देखते हुए परिवर्तन हर एक प्रस्तुत किया जाने लागू होते हैं, रिकॉर्डिंग प्रत्येक के लिए एक नया करते हैं। इसके लिए आपके काम करने वाले पेड़ को साफ करने की आवश्यकता है (हेड प्रतिबद्ध से कोई संशोधन नहीं)।

आप अपने स्वच्छ काम कर पेड़ के बाद से तुम सिर्फ करने के लिए वैलेंसिया सीएफ़ डिजाइन फिर से लागू करने के लिए अपने नए संस्करण के branched है (यहाँ अमीर SO thread मैं कहाँ चुनते ही है कि यह ऊपर। है)। इसलिए HEAD साफ़ है और आप पुराने संस्करण से काम करना चुन सकते हैं जहां आपने पहले से ही डिज़ाइन लागू किया है।
शायद पुराने से नए संस्करण में कुछ बदल गया है जिसके लिए संसाधनों को अद्यतन करने की आवश्यकता है। (कुछ विचार चले गए लेकिन अन्य उदाहरण के लिए पेश किए गए)। हालांकि बस आगे बढ़ें और इसे पूरा करें, लेकिन अपने अंतिम परिणाम को सुनिश्चित करने के लिए सुनिश्चित करें क्योंकि यह प्रतिबद्धता आपके विकासशील शाखा में पहले से ही काम करने शुरू करने वाले बेहतर और बड़े संस्करण के लिए चेरी-पिक होगी।

हालांकि आपके प्रश्न से सीधे संबंधित नहीं है, तो भी आप A successful Git branching model पढ़ने की सलाह देंगे जो आपको एक और विचार देता है कि आप अपने पक्ष में शाखाओं का उपयोग कैसे कर सकते हैं।

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

7

रखरखाव परिप्रेक्ष्य से, मैं उसी कोड बेस पर 1000 परियोजनाओं के आधार को दोहराने पर विचार नहीं करता। मैं एक एकल परियोजना का उपयोग ग्राहक-विशिष्ट संसाधनों का प्रबंधन करता हूं और परियोजना निर्माण चरण में आवश्यक संसाधन स्वैप करता हूं। एक और शब्द में, 1000 एपीके बनाने के लिए 1000 परियोजनाएं, 1000 एपीके बनाने के लिए 1000 परियोजनाएं नहीं।

प्रश्न में दिए गए विवरणों के आधार पर, इस तरह के उपयोग परिदृश्य को हल करने के लिए सही दिशा (जहां तक ​​मैं देख सकता हूं) (एकल स्रोत आधार से कई अनुप्रयोगों का निर्माण) चींटी जैसे बाहरी निर्माण उपकरण को अपनाना है या मेवेन निर्माण प्रक्रिया पर हावी है (दोनों पूर्ण निर्माण जीवन चक्र के दौरान प्रत्येक चरण यानी संकलन, डीईएक्स, पैकेज आदि पर नियंत्रण-नियंत्रण करने की क्षमता प्रदान करते हैं) और यदि आवश्यक हो तो बैच बिल्ड के लिए शायद शैल स्क्रिप्ट लिखें।

मैं फोनगैप का मजाक नहीं हूं लेकिन मेरी समझ पर आधारित Get Started Guide के माध्यम से एक त्वरित रूप से देखने के लिए, यह एंड्रॉइड एसडीके के शीर्ष पर एक और प्रोग्रामिंग परत स्टैक है, मुख्य रूप से वेब प्रोग्रामिंग का उपयोग करके मोबाइल ऐप लिखने की क्षमता प्रदान करने के लिए भाषा (एचटीएमएल, सीएसएस, जावास्क्रिप्ट), एप्लिकेशन अभी भी मूल प्रोजेक्ट कंकाल रखता है, इसलिए मुझे फोनगैप ऐप बनाने के लिए एंटी/मेवेन स्क्रिप्ट लिखने में बहुत परेशानी नहीं होगी।

एक बार जब आपने मैवेन द्वारा अपना फोनगैप ऐप सफलतापूर्वक बनाया है। आप परिदृश्य को हल करने के तरीके की जांच शुरू कर सकते हैं, मैंने स्टैक ओवरफ्लो में पहले इसी प्रकार के परिदृश्य को देखा है, कुछ केस स्टडी के लिए this thread और this thread देखें। आप व्यवहार्यता अध्ययन के लिए अवधारणा परियोजना का सबूत शुरू कर सकते हैं।

मैंने कुछ नमूना कोड पोस्ट किए हैं, यह दिखाता है कि कैसे मैवेन इसे प्राप्त करते हैं, नीचे देखें।

नमूना परियोजना निर्देशिका संरचना:

myApp/ 
    src/ 
    res-barcelona/ 
    assets-barcelona/ 
    res-realmadrid/ 
    assets-realmadrid/ 
    ... ... 
    project.properties 
    AndroidManifest.xml 
    pom.xml 

नमूना pom.xml फ़ाइल:

<profiles> 
    <profile> 
    <id>barcelona</id> 
    <properties> 
     <app.package.name>com.company.app.barcelona</app.package.name> 
     <app.res.dir>${project.basedir}/res-barcelona</app.res.dir> 
     <app.assets.dir>${project.basedir}/assets-barcelona</app.assets.dir> 
    </properties> 
    </profile> 
    <profile> 
    <id>realmadrid</id> 
    <properties> 
     <app.package.name>com.company.app.realmadrid</app.package.name> 
     <app.res.dir>${project.basedir}/res-realmadrid</app.res.dir> 
     <app.assets.dir>${project.basedir}/assets-realmadrid</app.assets.dir> 
    </properties> 
    </profile> 
    ... ... 
</profiles> 

.... 

<plugins> 
    <plugin> 
    <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
    <artifactId>android-maven-plugin</artifactId> 
    <version>3.1.1</version> 
    <extensions>true</extensions> 
    <configuration> 
     <sdk> 
     <platform>13</platform> 
     </sdk> 
     <undeployBeforeDeploy>true</undeployBeforeDeploy> 
     <renameManifestPackage>${app.package.name}</renameManifestPackage> 
     <resourceDirectory>${app.res.dir}</resourceDirectory> 
     <assetsDirectory>${app.assets.dir}</assetsDirectory> 
    </configuration> 
    </plugin> 
    ... ... 
</plugins> 

एप्लिकेशन-barcelona.apk बनाने के लिए, mvn clean install -Pbarcelona चलाते हैं।
ऐप-realmadrid.apk बनाने के लिए, mvn clean install -Prealmadrid चलाएं।
अन्य 1000 एपीके बनाने के लिए, खोल स्क्रिप्ट लिखें।

एंड्रॉइड मेवेन प्लगइन कई विन्यास प्रदान करता है जिससे आप प्रत्येक चरण/लक्ष्य पर निर्माण प्रक्रिया को ठीक-नियंत्रित कर सकते हैं। पूर्ण विवरण के लिए Project Documentation देखें।

0

फ़ोनगैप के लिए ऐपलाउड ग्रहण प्लगइन का स्रोत here उपलब्ध है। बनाई गई परियोजनाओं की प्रारंभिक सामग्री इस resources directory से आती है। आप जो भी चाहें सामग्री को संशोधित कर सकते हैं और फिर प्लगइन का पुनर्निर्माण कर सकते हैं। चूंकि कोड में ईपीएल लाइसेंस है, इसलिए आपको संशोधित कुछ भी स्रोत खोलना होगा।

3

जैसा कि आप पहले ही पाए गए हैं, एक साझा Android Library project आपको जो चाहिए वह है। दुर्भाग्यवश (जैसा कि आपने पहले ही उल्लेख किया है) assets केवल Android Maven Plugin के साथ रिलीज के निर्माण पर निर्भर परियोजनाओं में विरासत में हैं।

हमारी परियोजना में हम डेवलपर के लिए एक चींटी कार्य syncAssets.xml ADT के द्वारा बनाता ग्रहण से बाहर है, कि एंड्रॉयड लाइब्रेरी परियोजना के आधार फ़ोल्डर में रहता बनाया:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- This is an Ant build script to synchronize assets from Android library "pkonvert-base" 
    because they are not included automatically by the ADT tools. See discussion 
    at http://stackoverflow.com/questions/5889833/android-library-assets-folder-doesnt-get-copied 
    and topic "Library projects cannot include raw assets" at http://developer.android.com/guide/developing/projects/index.html#considerations. 
    The Maven build through the maven-android-plugin automatically includes dependent 
    assets from referenced Android libraries, so this Ant script only has to 
    be executed when the build is executed from within eclipse. --> 
<project name="syncAssets" default="syncAssets" basedir="."> 

    <property name="sync.source.dir" value="${ant.file}/../assets" /> 
    <property name="sync.target.dir" value="${basedir}/assets" /> 

    <target name="syncAssets" description="Synchronize assets from Android library pkonvert-base"> 
      <echo>Synchronizing assets from ${sync.source.dir} to ${sync.target.dir}</echo> 
      <sync todir="${sync.target.dir}"> 
        <fileset dir="${sync.source.dir}" includes="**" /> 
      </sync> 
    </target> 

    <target name="clean" description="Clean up assets"> 
      <delete dir="${sync.target.dir}" /> 
    </target> 
</project> 

यह चींटी कार्य पुस्तकालय की सामग्री सिंक्रनाइज़ करता है परियोजनाएं assets - परियोजनाओं में फ़ोल्डर्स assets-फ़ोल्डर और जब भी ग्रहण में एक नया निर्माण ट्रिगर होता है तब ट्रिगर होता है। गुण अपने Android परियोजना गोटो के लिए इस स्क्रिप्ट के निष्पादन को जोड़ने के लिए ->बिल्डर्स और बनाने के लिए एक नया चींटी बिल्डर कि सभी बिल्डरों की श्रृंखला में पहले एक लागू किया जा करने के लिए हो गया है (उपयोग करने के लिए अप बटन चींटी निर्माता ऊपर की ओर बढ़ें)।

टैब मुख्य बिल्डफ़ाइल ${workspace_loc:/<YOUR_LIBRARY_PROJECT>/syncAssets.xml} और बेस निर्देशिका ${workspace_loc:/<YOUR_PROJECT>} का चयन करें।

टैब में ताज़ा पूरा होने पर ताज़ा संसाधनों और विशिष्ट संसाधन चयन करें और अपने प्रोजेक्ट फ़ोल्डर चुनें ताजा किए जाने की। इसके अलावा का चयन करें उपफोल्डर्स शामिल करें।

टैब में लक्ष्य सुनिश्चित कि डिफ़ॉल्ट लक्ष्य साफ के बाद मार डाला जाता है, पुस्तिका निर्माण पर और ऑटो पर निर्माण। लक्ष्य साफ स्वच्छ के दौरान निष्पादित किया जाना चाहिए।

संबंधित मुद्दे