2013-07-31 10 views
35

मैं अपने build.gradle फ़ाइल जैसेउत्पाद स्वाद जाओ या

productFlavors { 
    someFlavor {} 
    anotherFlavor {} 
} 

में विन्यस्त अपने आवेदन कोड में विभिन्न उत्पाद जायके के एक नंबर के साथ एक Android ऐप्लिकेशन है, उनके किसी Android ऐप्लिकेशन में संस्करण का निर्माण, मैं सक्षम होना चाहते हैं वर्तमान में संकलित स्वाद (या संस्करण का निर्माण) के नाम को पकड़ने के लिए। एक समाधान यह है:

productFlavors { 
    someFlavor { 
     buildConfig "public static final String PRODUCT_FLAVOR = \"someFlavor\";" 
    } 
    anotherFlavor { 
     buildConfig "public static final String PRODUCT_FLAVOR = \"anotherFlavor\";" 
    } 
} 

और फिर मेरी Android एप्लिकेशन कॉल BuildConfig.PRODUCT_FLAVOR में।

क्या कोई तरीका है कि मैं इसे स्वचालित रूप से करने के लिए धीरे-धीरे प्राप्त कर सकता हूं? या क्या एंड्रॉइड में कुछ अन्य एपीआई है जिसका उपयोग मैं उत्पाद स्वाद नाम प्राप्त करने के लिए कर सकता हूं?

उत्तर

53

संपादित करें: यह अब प्लगइन के संस्करण 0.7 के साथ स्वचालित रूप से प्रारंभ हो गया है। BuildConfig.java इच्छा शामिल

public static final String BUILD_TYPE = "debug"; 
public static final String FLAVOR = "f1Fa"; 
public static final String FLAVOR_group1 = "f1"; 
public static final String FLAVOR_group2 = "fa"; 

FLAVOR सब स्वाद आयाम के साथ संयुक्त स्वाद नाम है/समूहों लागू होता है। फिर प्रत्येक आयाम FLAVOR_<group name> के रूप में उपलब्ध है।

अंत में BUILD_TYPE में प्रयुक्त निर्माण प्रकार का नाम शामिल है।

यदि आपके पास एक स्वाद आयाम है, तो आपके पास केवल FLAVOR स्थिर है।

यह अभी करने का यही एकमात्र तरीका है।

एक चीज जो आप कर सकते हैं वह स्वचालित है। तो आप ऐसा कुछ कर सकते हैं:

android { 
    productFlavors.whenObjectAdded { flavor -> 
     flavor.buildConfig "public static final String PRODUCT_FLAVOR = \"${flavor.name}\";" 
    } 

    // your normal config here. 
} 

इस तरह आपको प्रत्येक स्वाद के लिए इसे मैन्युअल रूप से करने की आवश्यकता नहीं है।

+0

वही है जो मैं चाहता था - धन्यवाद। मैंने पाया कि जब ऑब्जेक्ट का उपयोग करने की आवश्यकता होती है तो ऑब्जेक्ट एडवर्ड के बजाए जोड़ा गया, इसलिए मैंने आपका जवाब संपादित किया, लेकिन मूल रूप से यह सही है। – robd

+1

आपका उत्तर अपडेट करने के लिए बहुत बहुत धन्यवाद - उपयोगी! – robd

+0

मैं build.gradle में चयनित बिल्ड संस्करण प्राप्त करना चाहता हूं लेकिन जब ऑब्जेक्ट एडवर्ड मेरे लिए काम नहीं कर रहा है। एंड्रॉयड { productFlavors { flavor1 {} \t \t flavor2 {} } productFlavors: यहाँ मैं क्या कर रहा हूँ है।whenObjectAdded {स्वाद -> println 'जब वस्तु कहा:' + स्वाद } buildTypes { डिबग {} रिहाई {} } } – userv

6

स्वीकृत समाधान शानदार है। कुछ मामलों के लिए, वैकल्पिक विकल्प हालांकि उपयोगी हो सकता है।

आप एक कॉन्फ़िगरेशन फ़ाइल जोड़ सकते हैं, अपने उत्पाद में 'Appconfig.java' कहें स्वाद विशिष्ट स्रोत फ़ोल्डर यानी src/<productflavor>/java/<packagename>/Appconfig.java; फिर आप अपने ऐप में Appconfig.PRODUCT_FLAVOR का उपयोग कर सकते हैं। कंपाइलर आपको ईमानदार रखेगा और सुनिश्चित करेगा कि आप इसे सभी स्वादों के लिए जोड़ दें।

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

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