2015-06-10 6 views
11

मैं एक एंड्रॉइड एप्लिकेशन विकसित कर रहा हूं जो आरईएसटी एपीआई के माध्यम से सर्वर के साथ इंटरैक्ट करता है। जाहिर है, मुझे विकास और रिलीज बिल्ड के लिए अलग-अलग यूआरएल का उपयोग करने की ज़रूरत है। टिप्पणी और अन-टिप्पणी कोड बहुत कठिन और त्रुटि pron है।एंड्रॉइड: विकास के लिए विभिन्न सर्वर यूआरएल का प्रबंधन और

इस स्थिति को संभालने का सबसे अच्छा तरीका कौन सा है? Gradle फ़ाइल में विभिन्न निर्माण प्रकारों का उपयोग करना एक है जो प्रक्रिया को स्वचालित कर सकता है, लेकिन मुझे यकीन नहीं है कि यह जाने का सही तरीका है या नहीं।

बिल्ड प्रकारों की संख्या में वृद्धि की संभावना भी है जैसे कि। परीक्षण, आंतरिक रिलीज आदि

+0

[संदर्भ: एकाधिक वातावरण प्रबंधित करना - स्वाद, निर्माण प्रकार, कॉन्फ़िगरेशन पर हस्ताक्षर करना] (http://stackoverflow.com/questions/22995057/how-do-you-manage- बहु- वातावरण- साइड-डेवलपमेंट-android-apps/39116533 # 39116533) – shijin

उत्तर

48

आप एंड्रॉयड स्टूडियो का उपयोग कर रहे हैं, तो करने के लिए buildConfigField का उपयोग की आवश्यकता होगी इसे हल अपने BuildConfig कक्षा में कस्टम फ़ील्ड जोड़ें। मानक debug और release, प्लस एक कस्टम mezzanine एक:

buildTypes { 
     debug { 
      buildConfigField "String", "SERVER_URL", '"http://test.this-is-so-fake.com"' 
     } 

     release { 
      buildConfigField "String", "SERVER_URL", '"http://prod.this-is-so-fake.com"' 
     } 

     mezzanine.initWith(buildTypes.release) 

     mezzanine { 
      buildConfigField "String", "SERVER_URL", '"http://stage.this-is-so-fake.com"' 
     } 
    } 

यहाँ, मैं तीन का निर्माण प्रकार हैं। प्रत्येक फ़ील्ड को BuildConfig पर परिभाषित करता है।

फिर, जावा कोड में, आप केवल BuildConfig.SERVER_URL देखें। उस फ़ील्ड के पास उस मूल्य के आधार पर एक मूल्य होगा जिसका उपयोग आपने ऐप के उस विशेष संस्करण को बनाने के लिए किया था।

+0

धन्यवाद यह अच्छा है। इसके अलावा मैं यह बताना चाहता हूं कि SERVER_URL जोड़ने के बाद आपको ऐप की BuildConfig फ़ाइल को अपडेट करने के लिए समन्वयित करना होगा। –

+0

एक और बात हम सर्वर के मंचन के लिए मेजेनाइन उपयोग करना चाहते हैं तो हम mezzanine.initWith (buildTypes.mezzanine) का उपयोग करने के mezzanine.initWith (buildTypes.release) –

+0

@KhizarHayat के बजाय : 'mezzanine.initWith (buildTypes। मेज़ानाइन) 'मेज़ानाइन' अपरिवर्तित होने के साथ 'नो-ऑप होगा। – CommonsWare

0

मैं ने वही समस्या थी और मैं

if (BuildConfig.DEBUG) { } 

का उपयोग कर आप आयात करने के लिए

import com.commandsoftware.androidbookingapp.BuildConfig; 
+0

अच्छा बिंदु, लेकिन मुझे लगता है कि अगर डीबग से अधिक विन्यास और उदाहरण परीक्षण के लिए रिलीज हो तो यह स्केल नहीं करेगा। मैं इस बिंदु को शामिल करने के लिए अपने प्रश्न को संपादित करूंगा। – Abdullah

0

मुझे लॉगकैट को लिखने के साथ एक ही समस्या थी। अगर सभी डीबग कुंजी के साथ ऐप पर हस्ताक्षर किए गए थे, तो मैं सभी संदेशों को लिखना चाहता था, अन्यथा उनमें से लगभग कोई भी लिखना नहीं था। मैंने कोड की इस पंक्ति के साथ समस्या हल की:

बूलियन शोअल्मेमेजेज = ((getAplicationInfo()। झंडे & ApplicationInfo.FLAG_DEBUGGABLE)! = 0);

फिर मेरे लॉग लेखक में उस बूलियन का उपयोग करना। जब आप यूआरआई शुरू करते हैं तो आपको कुछ ऐसा करने में सक्षम होना चाहिए।

मैं ग्रहण का उपयोग कर रहा हूं। मैं निश्चित रूप से यह नहीं कह सकता कि यह अन्य आईडीई वातावरण में काम करेगा। This answer संकेत मिलता है कि यह एक हो सकता है ग्रहण-केवल

2

यह प्रबंधित किया जा सकता एप्लिकेशन build.gradle में ProductFlavours का उपयोग करके शामिल हैं। ProductFlavours विभिन्न यूआरएल यानी प्रबंधित करेगा। विकास और रिलीज।

कृपया इसे medium पर एक नजर है। इसमें विस्तृत स्पष्टीकरण शामिल है।

+1

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/1582031 9) –

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