2014-10-20 27 views
12

के साथ निरंतर मान सेट करें, मैं बस एंड्रॉइड ग्रेडल बिल्ड सिस्टम में स्थानांतरित हो गया हूं और यह मेरे लिए स्पष्ट नहीं है कि निरंतर मूल्य कैसे सेट करें।ग्रेडल

उदा। मैं है

API.java

BASE_URL = "http://debug.server.com" 

शामिल है जो, लेकिन जब Gradle बनाता रिहाई मैं BASE_URL जरूरत "http://release.server.com"

निर्माण समय इस मूल्य कैसे बदलने के लिए होने के लिए?

उत्तर

18

ग्रैडल BuildConfig नामक एक वर्ग उत्पन्न करता है जिसमें स्थिर सदस्य होते हैं (जैसे बूलियन DEBUG, जो डीबग वेरिएंट के लिए सत्य पर सेट है)।

आप या तो इसलिए की तरह जावा में इस क्वेरी सकता है:

if (BuildConfig.DEBUG) { 
    BASE_URL = "http://debug.server.com" 
} else { 
    BASE_URL = "http://release.server.com" 
} 

या एक एक लाइनर के रूप में एक ही बात:

BASE_URL = BuildConfig.DEBUG ? "http://debug.server.com" : "http://release.server.com" 

या

आप कर सकते थे वास्तव मेंके अंदर BASE_URL सेट करेंवर्ग तो जैसे Gradle का उपयोग कर:

android { 
    buildTypes { 
     debug { 
      buildConfigField "String", "BASE_URL", '"http://debug.server.com"' 
     } 

     release { 
      buildConfigField "String", "BASE_URL", '"http://release.server.com"' 
     } 
    } 
} 

नोट सिंगल और डबल कोटेशन Gradle में मूल्य के आसपास, के रूप में दूसरों टिप्पणी में उल्लेख किया है। इस तरह, डबल उद्धरण मूल्य का हिस्सा बन जाते हैं।

नतीजतन, स्थिर संदर्भ BuildConfig.BASE_URL (रिहाई के लिए यानी "debug.server.com" डिबग के लिए, "release.server.com") इसी यूआरएल को इंगित होता

+1

बहुत धन्यवाद, दूसरा दृष्टिकोण उपयोग करेगा, यह बहुत लचीला –

+1

आपका स्वागत है। जब आप कर सकते हैं जवाब के रूप में चिह्नित करने के लिए स्वतंत्र महसूस;) –

+3

आपका जवाब केवल मेरे लिए काम करता है, तो मैं इस तरह एकल लोगों के बजाय डबल कोट्स का उपयोग, और यूआरएल तार से बचने,: एंड्रॉयड { buildTypes { डिबग { buildConfigField "स्ट्रिंग "," BASE_URL "," \ "http: //debug.server.com \" " } रिलीज { buildConfigField" स्ट्रिंग "," BASE_URL "," \ "http: //release.server।कॉम \ "" } } } –

0

Fifer-भेड़ के जवाब है सही बात। बस दो से अधिक वातावरण के लिए समाधान छोड़ना चाहता था।

स्टेजिंग और लाइव के लिए दो स्वाद।

productFlavors { 
    staging { 
     ... 
    } 
    production { 
     ... 
    } 
} 

संपूर्ण ऐप कॉन्फ़िगरेशन वर्तमान ENV पर निर्भर करता है। का उपयोग करना:

public static String ENV_DEVELOPMENT = "development"; 
public static String ENV_STAGING = "staging"; 
public static String ENV_PRODUCTION = "production"; 

ENV = BuildConfig.DEBUG ? ENV_DEVELOPMENT : BuildConfig.FLAVOR; 

मैं सभी विभिन्न ENVs बीच स्विच कर सकते हैं, जबकि स्थानीय स्तर पर परीक्षण लेकिन बल मचान/लाइव सेटिंग्स अगर जारी किया।

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