जवाबों:
सबसे सरल, और सबसे अच्छा दीर्घकालिक समाधान, उपयोग करना है BuildConfig.DEBUG
। यह एक boolean
मान है जो true
डीबग बिल्ड के लिए होगा , false
अन्यथा:
if (BuildConfig.DEBUG) {
// do something for a debug build
}
ऐसी रिपोर्टें आई हैं कि यह मूल्य ग्रहण-आधारित बिल्ड से 100% विश्वसनीय नहीं है, हालांकि मुझे व्यक्तिगत रूप से कोई समस्या नहीं हुई है, इसलिए मैं यह नहीं कह सकता कि यह वास्तव में कितना मुद्दा है।
यदि आप एंड्रॉइड स्टूडियो का उपयोग कर रहे हैं, या यदि आप कमांड लाइन से ग्रैडल का उपयोग कर रहे हैं, तो आप रनटाइम पर इन स्थितियों को अलग करने में मदद करने के लिए अपना स्वयं का सामान जोड़ सकते हैं BuildConfig
या अन्यथा ट्विक कर सकते हैं debug
और release
प्रकार का निर्माण कर सकते हैं।
अवैध तर्क से समाधान android:debuggable
प्रकट में ध्वज के मूल्य पर आधारित है । यदि आप "डिबग" बिल्ड को "रिलीज़" बिल्ड से अलग करना चाहते हैं, तो परिभाषा के अनुसार, यह सबसे अच्छा समाधान है। हालांकि, ध्यान रखें कि आगे बढ़ना, debuggable
झंडा वास्तव में एक स्वतंत्र अवधारणा है जो ग्रैडल / एंड्रॉइड स्टूडियो एक "डिबग" के निर्माण पर विचार करता है। कोई भी बिल्ड प्रकार debuggable
ध्वज को सेट करने के लिए चुनाव कर सकता है जो उस मूल्य के लिए जो उस डेवलपर के लिए और उस बिल्ड प्रकार के लिए मायने रखता है।
public static final boolean DEBUG = Boolean.parseBoolean("true");
डिबग बिल्ड के लिए मिलता हूं । जबकि यह एक विचित्र तरीका है जिसे सेट DEBUG
करना है true
, इसे काम करना चाहिए। यदि आप इसे 1.3.0 परीक्षण रिलीज़ में से एक में देख रहे हैं, या यदि आपके पास 1.2.2 के लिए एक प्रतिलिपि प्रस्तुत करने योग्य परीक्षण मामला है, तो कृपया एक समस्या दर्ज करें । मुझे इस समस्या की रिपोर्ट करने वाले कोई भी बकाया मुद्दे नहीं दिख रहे हैं।
निम्नलिखित आज़माएँ:
boolean isDebuggable = ( 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) );
Kotlin:
val isDebuggable = 0 != applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE
getApplicationInfo().flags
काम करने के लिए क्या आयात करना होगा?
हां, आपको उपयोग करने में कोई समस्या नहीं होगी:
if (BuildConfig.DEBUG) {
//It's not a release version.
}
जब तक आप गलत BuildConfig वर्ग आयात कर रहे हैं। सुनिश्चित करें कि आप अपनी परियोजना के बिल्डकॉनफिग वर्ग का संदर्भ ले रहे हैं, न कि आपके किसी भी निर्भरता वाले पुस्तकालय से।
के बारे में मिश्रित टिप्पणियों के कारण BuildConfig.DEBUG
, मैंने डिबग मोड में क्रैशलीटिक्स (और एनालिटिक्स) को अक्षम करने के लिए निम्नलिखित का उपयोग किया:
अद्यतन /app/build.gradle
android {
compileSdkVersion 25
buildToolsVersion "25.0.1"
defaultConfig {
applicationId "your.awesome.app"
minSdkVersion 16
targetSdkVersion 25
versionCode 100
versionName "1.0.0"
buildConfigField 'boolean', 'ENABLE_CRASHLYTICS', 'true'
}
buildTypes {
debug {
debuggable true
minifyEnabled false
buildConfigField 'boolean', 'ENABLE_CRASHLYTICS', 'false'
}
release {
debuggable false
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
फिर, आपके कोड में आप ENABLE_CRASHLYTICS
ध्वज का पता लगाते हैं:
if (BuildConfig.ENABLE_CRASHLYTICS)
{
// enable crashlytics and answers (Crashlytics by default includes Answers)
Fabric.with(this, new Crashlytics());
}
अपने ऐप में उसी अवधारणा का उपयोग करें और ENABLE_CRASHLYTICS
जो कुछ भी आप चाहते हैं उसका नाम बदलें । मुझे यह दृष्टिकोण पसंद है क्योंकि मैं कॉन्फ़िगरेशन में ध्वज को देख सकता हूं और मैं ध्वज को नियंत्रित कर सकता हूं।
वैकल्पिक रूप से, आप BuildConfig.BUILD_TYPE का उपयोग करके अंतर कर सकते हैं;
यदि आप डिबग बिल्ड BuildConfig.BUILD_TYPE.equals("debug");
रिटर्न सही चला रहे हैं
। और रिलीज बिल्ड बिल्ड के लिए BuildConfig.BUILD_TYPE.equals("release");
सही है।
true
।
मैं इस समाधान का उपयोग कर रहा हूं ताकि यह पता लगाया जा सके कि मेरा ऐप डिबग संस्करण पर चल रहा है।
if (BuildConfig.BUILD_TYPE.equals("Debug")){
//Do something
}
if (BuildConfig.DEBUG) {}
एक आश्रित ग्रेडेल मॉड्यूल का उपयोग कर रहा था जिसमें (निश्चित रूप से) ऐप की बिल्ड.ग्रेड फ़ाइल के लिए कोई संदर्भ नहीं था - इससे डिबग मोड को गलत तरीके से पहचाना जाने लगा। if (BuildConfig.BUILD_TYPE.equals("Debug")){ }
मुद्दा उठाया। धन्यवाद
सुनिश्चित करें कि आप सही BuildConfig वर्ग आयात कर रहे हैं और हाँ, आपको उपयोग करने में कोई समस्या नहीं होगी:
if (BuildConfig.DEBUG) {
//It's not a release version.
}
BuildConfig
आपके ऐप के पैकेज में स्थित है, जैसेimport com.mycompany.myapp.BuildConfig;