2012-05-04 10 views
45

मेरे पास एकाधिक निर्माण लक्ष्यों (चींटी का उपयोग करके) के साथ एक एंड्रॉइड प्रोजेक्ट है। परीक्षण उद्देश्यों के लिए, उन लक्ष्यों का निर्माण करने के लिए अलग-अलग पैकेज नाम होते हैं (इसलिए मेरा पैकेज नाम com.mycompany.myapp रिलीज बिल्ड और com.mycompany.myapp.test परीक्षण निर्माण के लिए है)।एक्सएमएल नेमस्पेस घोषणा: ऑटो-विकल्प पैकेज का नाम

लेआउट फ़ाइलों में कस्टम एक्सएमएल नेमस्पेस की बात करते समय यह अधिकांश भाग के लिए अच्छी तरह से काम करता है। तो यह:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:custom="http://schemas.android.com/apk/res/com.mycompany.myapp" /> 

जैसे ही पैकेज का नाम com.mycompany.myapp.test साथ बदल दिया है काम करना बंद कर देगा।
इसके कारण, मुझे प्रीबिल्ट के दौरान हर बार com.mycompany.myapp मान को प्रतिस्थापित करना होगा। और क्योंकि यह सभी फाइलों VCS में होना चाहिए, और हर बार विरोध नहीं करना चाहिए एक व्यक्ति विन्यास स्विच और उन्हें विलीन हो जाती है, मैं विशिष्ट config फ़ोल्डर, जहां वे कैसा दिखेगा में लेआउट फ़ाइलों को स्थानांतरित करने के लिए किया था:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:custom="http://schemas.android.com/apk/res/@[email protected]" /> 

अब इस फ़ाइलों को वीसीएस में संग्रहीत किया जाता है, और @ CONFIG.PACKAGENAME @ को प्रीबिल्ट के दौरान प्रतिस्थापित किया जाता है और फिर फ़ाइल को ./config/file.xml से ./res/layout/file.xml पर कॉपी किया जाता है।

यह बेहद असुविधाजनक है और वास्तव में अच्छी तरह से स्केल नहीं करता है (मैं कल्पना स्क्रिप्ट में 50 फ़ाइलों में से प्रत्येक का उल्लेख करने की कल्पना नहीं कर सकता)।

तो मेरा सवाल है: नामस्थान घोषणा में स्वचालित पैकेज नाम का स्वचालित रूप से उपयोग करने का कोई तरीका है? या कम से कम संशोधित लेआउट फाइलें (या फाइलें बनायें?) ताकि जब भी मैं पैकेज नाम बदलूं तो com.mycompany.myapp को प्रतिस्थापित नहीं करना पड़ेगा।

उत्तर

115

यह पता चला है कि इसके लिए एक पोस्टफिक्स है: res-auto।

तो तुम सब करने की जरूरत है लिखने

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:custom="http://schemas.android.com/apk/res-auto" /> 

यह स्वचालित रूप से वर्तमान पैकेज नाम का उपयोग करेंगे।

+1

संदर्भ: http://developer.android.com/tools/sdk/eclipse-adt.html (सेक्शन एडीटी 17.0.0)। – Pang

+0

"पुस्तकालयों में कस्टम विशेषताओं के साथ कस्टम दृश्यों के लिए समर्थन जोड़ा गया। कस्टम विशेषताओं का उपयोग करने वाले लेआउटों को यूआरआई के बजाय नामस्थान यूआरआई http://schemas.android.com/apk/res-auto का उपयोग करना चाहिए जिसमें ऐप पैकेज नाम शामिल है। यह यूआरआई बिल्ड समय पर ऐप विशिष्ट एक के साथ बदल दिया गया है। " – flup

+2

क्या यह प्रोजेक्ट काम करेगा भले ही मेरी प्रोजेक्ट लाइब्रेरी का उपयोग करे जो कस्टम विचार रखती हो? –

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