android - एक्सएमएल नेमस्पेस घोषणा: ऑटो-विकल्प पैकेज का नाम



xml android-layout (1)

मेरे पास एकाधिक निर्माण लक्ष्यों (चींटी का उपयोग करके) के साथ एक एंड्रॉइड प्रोजेक्ट है। परीक्षण उद्देश्यों के लिए, उन लक्ष्यों का निर्माण करने के लिए अलग-अलग पैकेज नाम होते हैं (इसलिए मेरा पैकेज नाम 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 मान को प्रतिस्थापित करना होगा। और चूंकि ये सभी फाइलें वीसीएस में होनी चाहिए, और हर बार एक व्यक्ति कॉन्फ़िगरेशन स्विच करता है और विलय नहीं करता है, इसलिए मुझे लेआउट फ़ाइलों को विशिष्ट कॉन्फ़िगरेशन फ़ोल्डर में ले जाना पड़ता था, जहां वे इस तरह दिखेंगे:

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

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

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

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


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

तो आपको बस इतना करना है लिखना है

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

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





ant