2015-07-07 14 views
7

तो यह थोड़ा दिलचस्प है, मुझे यकीन है कि एंड्रॉइड स्टूडियो में इसे कैसे सेट अप करना है। मेरे पास कई मॉड्यूल हैं जिनमें विभिन्न ऐप्स में उपयोग किए जाने वाले कुछ पुनः उपयोग करने योग्य घटक हैं, हालांकि स्वादों का उपयोग करके पुन: प्रयोज्य घटकों में कुछ विषयों को इंजेक्ट करना अच्छा होगा। प्रत्येक ऐप के लिए प्रत्येक घटक के लिए एक नया स्वाद बनाने के बजाय, मैं 1 थीम मॉड्यूल रखने की सोच रहा था, जिसमें प्रति ऐप लिखने वाला एक स्वाद होगा, जिसमें रंग योजनाएं हैं ... आदि। यहाँ मैं कैसे चाहते हैं कि उसे की स्थापना की तरह है:स्वाद के साथ एंड्रॉइड थीम मॉड्यूल

 
App1: dependencies 
reusable lib1 
reusable lib3 
reusable lib4 
theme - App1 flavor 

App2: dependencies 
reusable lib1 
reusable lib2 
reusable lib4 
theme - App2 flavor 

अब अगर पुन: प्रयोज्य libs विषय पर पता करने के लिए जो स्वाद का निर्माण करने की जरूरत के बिना बस निर्भर हो सकता है मैं पसंद करते हैं, और उस में मुख्य अनुप्रयोग proj विषय पर निर्भरता है उस ऐप के स्वाद का संदर्भ दे सकता है (इस उत्तर का उपयोग https://stackoverflow.com/a/24316133/1316346)। इसका कारण यह है कि प्रत्येक पुन: प्रयोज्य मॉड्यूल में इसके निर्माण में एक ऐप नहीं हो सकता है। ग्रैडल निर्भरता या इससे उन्हें संदर्भित अन्य ऐप्स तोड़ देंगे। लिखने वाले प्रत्येक ऐप के लिए प्रत्येक पुन: प्रयोज्य मॉड्यूल का स्वाद बनाना भी कठिन है। क्या ऐसा कुछ हासिल करने का कोई तरीका है? यहाँ मैं क्या करने की कोशिश की है:

APP1 build.gradle:

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:appcompat-v7:22.1.1' 
    compile project(path: ':Theme', configuration: 'app1Release') 
    compile project(':Lib1') 
    compile project(':Lib2') 
    compile project(':Lib4') 
} 

App2 build.gradle:

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:appcompat-v7:22.1.1' 
    compile project(path: ':Theme', configuration: 'app2Release') 
    compile project(':Lib1') 
    compile project(':Lib3') 
    compile project(':Lib4') 
} 

Lib1 build.gradle:

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:appcompat-v7:22.1.1' 
    compile project(path: ':Theme') 
} 

इस के साथ समस्या यह है जैसे ही Lib1 विषय में कुछ भी एक्सेस करने का प्रयास करता है, यह एक त्रुटि हो जाती है। असल में यह थीम को पहले भी नहीं बनाता है, यह थीम से पहले लिब 1 बनाने का प्रयास करेगा, भले ही लिब 1 की निर्भरता हो (स्वाद के साथ अजीब कुछ)। अगर मैं करने के लिए Lib1 बदलने के लिए:

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:appcompat-v7:22.1.1' 
    compile project(path: ':Theme', configuration: 'app1Release') 
} 

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

tl; डॉ कर सकते हैं एक मॉड्यूल संदर्भ एक और मॉड्यूल की एक स्वाद एप्लिकेशन एक ही मॉड्यूल

+0

आप अपने ऐप्स में वास्तविक थीम का उपयोग क्यों नहीं करते? आपको अपने मॉड्यूल में किस प्रकार के मूल्यों को पारित करने की आवश्यकता है? यदि आप अपने मॉड्यूल में 'रंगमंचरी' जैसी थीम विशेषताओं का उपयोग करते हैं तो आप स्वाद के बिना सादा थेमिंग का उपयोग कर सकते हैं, आप अपनी थीम –

उत्तर

0

मैं इस अपने आप को नहीं किया है, लेकिन configuration injection की मेरी समझ के आधार पर संदर्भित द्वारा बनाया गया स्वाद के आधार पर, आप कर सकते थे नहीं लिब 1 प्रोजेक्ट (संबंधित सही थीम प्रोजेक्ट निर्भरताओं के साथ) में सभी स्वाद शामिल हैं और फिर App1 और App2 में आपके Lib1 निर्भरता में कॉन्फ़िगरेशन स्वाद शामिल हैं?

जैसे,

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:appcompat-v7:22.1.1' 
    compile project(path: ':Theme', configuration: 'app1Release') 
    compile project(path: ':Lib1', configuration: 'app1Release') 
    compile project(':Lib3') 
    compile project(':Lib4') 
} 
+1

में शामिल करने के लिए कस्टम मान भी बना सकते हैं। यह अब तक मेरा काम रहा है, लेकिन मुझे अलग होने की आवश्यकता है प्रत्येक ऐप के लिए प्रत्येक लाइब्रेरी का स्वाद, जिसे मैं टालने की कोशिश कर रहा हूं। –

+0

या आप पुस्तकालयों से अपनी थीमिंग को दोबारा जोड़ सकते हैं, नहीं? ऐसा लगता है कि यदि विषयों पुस्तकालयों के अभिन्न अंग हैं, तो आप स्वामित्व में प्रत्येक विषय के लिए उन पुस्तकालयों के 'स्वाद' के लिए जा रहे हैं। यदि आपके द्वारा बनाए गए प्रत्येक ऐप के साथ थीम 1-1 हैं, तो इसी प्रकार आपके पास पुस्तकालयों में कई स्वाद होंगे। –

+0

थीम 'प्राथमिक-रंग' और 'बटन-शैली' जैसी सामान्य सामग्री हैं, वे थीम प्रोजेक्ट में हमेशा मौजूद रहेंगे। मैं एक ऐसे समाधान की उम्मीद कर रहा था जहां पुस्तकालयों ने वास्तव में उन मूल्यों को खींच लिया बिना यह जानने के कि वास्तव में थीम प्रोजेक्ट का स्वाद वास्तव में बनाया गया था, यह सिर्फ उन सभी कुंजीों को जानता है। –

0

प्रकट विलय पर एक नज़र डालें:

: http://developer.android.com/tools/building/manifest-merge.html

आप कर प्रत्येक एप्लिकेशन के लिए हर पुस्तकालय का एक ही स्वाद होने के लिए, XML में निरूपित एक intent फ़ाइलें

किसी भी रुचिपर भेजने के लिए Activity, broadcastIntent लॉन्च करने के लिए startActivity के साथ इरादा का उपयोग किया जा सकता है पृष्ठभूमि सेवा के साथ संवाद करने के लिएघटक, और startService(Intent) या bindService(Intent, ServiceConnection, int)

इस तरह, आप प्रत्येक ऐप के लिए निर्भरताओं को बदलने की समस्या को हल करने के साथ ही एक से अधिक ऐप्स शुरू कर सकते हैं।इरादे से, आपके पास केवल एक ही कोड के साथ शुरू होने वाले ऐप्स होंगे।

हां, एक मॉड्यूल संदर्भ स्वाद के आधार पर किसी अन्य मॉड्यूल का स्वाद एक ही मॉड्यूल का संदर्भ देने वाले ऐप द्वारा बनाया जा सकता है।

+0

मैं समझ नहीं पा रहा हूं कि आप क्या कह रहे हैं, क्या आप एक उदाहरण दे सकते हैं कि मैं अपने उदाहरणों को प्रश्न से कैसे पूरा कर सकता हूं? –

+0

असल में, प्रत्येक लाइब्रेरी के लिए स्वाद बनाने के बजाय, प्रत्येक ऐप की शुरुआत को परिभाषित करने के लिए 'इरादा' का उपयोग करें। इस पर एक नज़र डालें: http://www.raywenderlich.com/103044/android-intents- ट्यूटोरियल या http://programmerguru.com/android-tutorial/android-intent-example/ – Eddev

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