2012-07-02 23 views
8

के लिए सशर्त संसाधन समावेशन/बहिष्करण मैं इस समस्या पर वापस आ रहा हूं, क्योंकि एक साफ समाधान प्रतीत नहीं होता है। क्या एंड्रॉइड में एक बाल परियोजना से संसाधनों को बाहर करने की कोई अच्छी रणनीति है?एंड्रॉइड एपीके बिल्ड

मैं दो स्थितियों है:

1 - बेस लाइब्रेरी प्रोजेक्ट आदि

--Child परियोजना 1 सभी स्थानीयकरणों का उपयोग करता है, एन के लिए स्थानीयकरण फ़ाइलों है तों, और सबकुछ ठीक

है - - चाइल्ड प्रोजेक्ट 2 केवल अंग्रेज़ी के लिए स्थानीयकृत है, लेकिन अंतिम। एपीके के पास मूल संसाधनों के कारण आंशिक स्थानीयकरण होगा (हालांकि एडीटी 1 9 या इस तरह से चेतावनी देने के लिए लिंट नियमों को जोड़ा गया है)।

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

2 - बिल्ड-विशिष्ट संसाधनों का बहिष्कार। मेरे पास कुछ छवियां हैं जिन्हें केवल मेरे ऐप्स के मेरे नुक्कड़-विशिष्ट निर्माण के लिए जरूरी है, जो ध्वज द्वारा ट्रिगर किए जाते हैं। सशर्त कोड महान काम करता है, लेकिन संसाधन हमेशा शामिल होते हैं।

मैं अपने ऐप्स में से हर एक के लिए अभी तक एक और बच्चे को प्रोजेक्ट बनाने के लिए नहीं करना चाहते। विशिष्ट छवि संसाधनों को छीनने के लिए निर्माण/संकलन ध्वज सेट करने का कोई तरीका है ताकि वे अंतिम .apk में न आएं?

दूसरी समस्या मेरे लिए विशिष्ट हो सकता है लेकिन मुझे आश्चर्य है कि मैं पहला बिंदु पर किसी भी अच्छी चर्चा नहीं मिल सकता हूँ। क्या कोई अन्य देव केवल कुछ ऐप्स को स्थानांतरित नहीं कर रहा है? या ज्यादातर लोग इस मुद्दे को अनदेखा कर रहे हैं?

+0

मैंने फ़ाइलों को जोड़ने पर बात देखी है।एपीके, लेकिन मैं ProGuard की तरह कुछ और ढूंढ रहा हूं - स्वचालित और अंतिम .apk हैकिंग करने के बजाए टूल में बनाया गया। – ProjectJourneyman

+0

आपके परिदृश्य एंटी या मेवेन जैसे बाहरी निर्माण उपकरण का उपयोग करके करने योग्य हैं, दोनों बिल्ड प्रक्रिया (संकलन, डीईएक्स, पैकेजिंग और आदि) के दौरान प्रत्येक चरण को ठीक-नियंत्रित करने की क्षमता प्रदान करते हैं। यदि मेवेन का उपयोग करना है, तो संसाधनों को बाहर निकालें [maven-resource-plugin] के माध्यम से बहुत आसान है (http://maven.apache.org/plugins/maven-resources-plugin/resources-mojo.html)। – yorkw

+0

मुझे इस तरह से जाने की आवश्यकता हो सकती है। मैं एक क्लीनर (और आदर्श रूप से सरल) समाधान की उम्मीद कर रहा था, हालांकि। – ProjectJourneyman

उत्तर

3

1 - बेस लाइब्रेरी प्रोजेक्ट, आदि

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

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

बहिष्करण। मेरे पास कुछ छवियां हैं जिन्हें केवल मेरे ऐप्स के मेरे नुक्कड़-विशिष्ट निर्माण के लिए जरूरी है, जो ध्वज द्वारा ट्रिगर किए जाते हैं। सशर्त कोड महान काम करता है, लेकिन संसाधन हमेशा शामिल होते हैं।

एक्सएवी और मैंने सशर्त संसाधनों in this issue के बारे में थोड़ा सा बात की। उनका ध्यान डीबग बनाम उत्पादन (BuildConfig.DEBUG के समतुल्य संसाधन) पर है, लेकिन ऐसा लगता है कि कुछ अधिक लचीला एक संभावना है।

इन बातों के दोनों एक कस्टम रिहाई का निर्माण स्क्रिप्ट द्वारा नियंत्रित किया जा सकता है। सामान्य डीबग बिल्ड में, आप इसे अकेले छोड़ देंगे; एक उत्पादन निर्माण में, प्रोजेक्ट की प्रतिलिपि से एक चींटी स्क्रिप्ट का काम होता है, जो संकलन, हस्ताक्षर करने और ज़िप्पाइनिंग करने से पहले आवश्यक निर्देशिकाओं को ट्रिम नहीं करता है।

+0

मैंने प्रोजेक्ट 3 के लिए ऐसा किया है, जिसमें इतालवी के लिए एक-एक अनुवाद है (और इसलिए कुछ strings_libx.xml फ़ाइलों को मूल libs के अनुरूप)। Libs और ऐप्स का मेरा पेड़ अधिक जटिल हो रहा है, हालांकि, और मैं जटिलता जोड़ने के साथ नाराज हूं (डुप्लिकेट स्ट्रिंग फाइलों के कारण रखरखाव जटिलता, या भाषा संसाधनों को विभाजित करने के लिए लिबक्स के साथ वर्कस्पेस जटिलता)। मुझे लगता है कि लेखन दीवार पर हो सकता है - मुझे आउटपुट को छीनने के लिए कुछ क्रियाओं और स्क्रिप्ट को गहराई से खोदने की जरूरत है। – ProjectJourneyman

+0

मुझे अभी भी कुछ चींटी स्क्रिप्ट बनाने का समय नहीं मिला है, लेकिन मुझे लगता है कि वास्तव में सही समाधान है। चूंकि मेरी ज़रूरतें अधिक जटिल होती हैं, मेरी अपनी स्क्रिप्ट की लचीलापन के लिए कोई विकल्प नहीं है। मुझे नहीं लगता कि DEBUG ध्वज कॉन्फ़िगर करने की पर्याप्त क्षमता प्रदान करेगा। इसके अलावा, अगर मैं काफी देर तक इंतजार करता हूं, तो ग्रैडल के साथ नई एंड्रॉइड बिल्ड सिस्टम को अंतिम रूप दिया जाएगा और मैं बस यह सीख सकता हूं: http://tools.android.com/tech-docs/new-build-system – ProjectJourneyman

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