উত্তর:
সবচেয়ে সহজ এবং সর্বোত্তম দীর্ঘমেয়াদী সমাধানটি হ'ল ব্যবহার করা BuildConfig.DEBUG। এটি একটি booleanমান যা trueডিবাগ বিল্ডের জন্য হবে , falseঅন্যথায়:
if (BuildConfig.DEBUG) {
// do something for a debug build
}
এমন খবরে বলা হয়েছে যে এই মানটি গ্রহ-ভিত্তিক বিল্ডগুলি থেকে 100% নির্ভরযোগ্য নয়, যদিও আমি ব্যক্তিগতভাবে কোনও সমস্যার মুখোমুখি হইনি, সুতরাং এটি আসলে কতটা ইস্যু তা বলতে পারি না।
আপনি যদি অ্যান্ড্রয়েড স্টুডিও ব্যবহার করছেন বা আপনি যদি কমান্ড লাইন থেকে গ্রেডল ব্যবহার করছেন, আপনি রানটাইমের সময় এই পরিস্থিতিগুলিকে আলাদা করতে সহায়তা করতে নিজের নিজস্ব জিনিস যোগ করতে BuildConfigবা অন্যথায় টুইঙ্ক করতে পারেন debugএবং releaseপ্রকারগুলি তৈরি করতে পারেন।
অবৈধ তর্ক থেকে সমাধানটি android:debuggableম্যানিফেস্টে পতাকাটির মানের উপর ভিত্তি করে । যদি আপনি এইভাবে কোনও "রিলিজ" বিল্ড থেকে কোনও "ডিবাগ" বিল্ডকে আলাদা করতে চান তবে সংজ্ঞা অনুসারে এটিই সেরা সমাধান। তবে, মনে রাখবেন যে এগিয়ে যাওয়া, debuggableগ্রেডেল / অ্যান্ড্রয়েড স্টুডিও একটি "ডিবাগ" বিল্ডকে কী বলে বিবেচনা করে তা থেকে পতাকাটি সত্যই একটি স্বাধীন ধারণা। যে কোনও বিল্ড টাইপ debuggableপতাকাটি সেট করতে নির্বাচিত করতে পারে যা সেই বিকাশকারীর জন্য এবং সেই বিল্ড প্রকারের জন্য অর্থকে কার্যকর করে whatever
public static final boolean DEBUG = Boolean.parseBoolean("true");একটি ডিবাগ বিল্ড পাই । এটি সেট DEBUGকরার একটি উদ্ভট উপায় হলেও trueএটি কাজ করা উচিত। আপনি যদি এটি ১.৩.০ পরীক্ষার রিলিজের একটিতে দেখতে পাচ্ছেন বা আপনার যদি ১.২.২ এর জন্য পুনরুত্পাদনযোগ্য টেস্ট কেস থাকে তবে দয়া করে একটি সমস্যা ফাইল করুন । এই সমস্যার প্রতিবেদন করার মতো কোনও অসামান্য সমস্যা আমি দেখতে পাচ্ছি না।
নিম্নলিখিত চেষ্টা করুন:
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.DEBUGআমি নিম্নলিখিতটি ডিবাগ মোডে ক্র্যাশলাইটিক্স (এবং বিশ্লেষণ) অক্ষম করতে ব্যবহার করেছি:
আপডেট / অ্যাপ্লিকেশন / বিল্ড.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যে কোনও কিছুতে নতুন নামকরণ করুন । আমি এই পদ্ধতির পছন্দ করি কারণ আমি কনফিগারেশনে পতাকাটি দেখতে পারি এবং আমি পতাকাটি নিয়ন্ত্রণ করতে পারি।
বিকল্পভাবে, আপনি বিল্ডকনফিগ ব্যবহার করে আলাদা করতে পারেন B BUILD_TYPE;
আপনি যদি ডিবাগ বিল্ড চালাচ্ছেন তবে
BuildConfig.BUILD_TYPE.equals("debug");রিটার্ন সত্য হবে। রিলিজের জন্য বিল্ড BuildConfig.BUILD_TYPE.equals("release");রিটার্নস সত্য।
true।
আমার অ্যাপটি ডিবাগ সংস্করণে চলছে কিনা তা জানতে আমি এই সমাধানটি ব্যবহার করছি।
if (BuildConfig.BUILD_TYPE.equals("Debug")){
//Do something
}
if (BuildConfig.DEBUG) {} একটি নির্ভরশীল গ্রেড মডিউল ব্যবহার করছিলাম যা অ্যাপ্লিকেশন বিল্ড.gradle ফাইলের (অবশ্যই) কোনও রেফারেন্স ছিল না - এর ফলে ডিবাগ মোডটি ভুল উপায়ে স্বীকৃত হয়েছিল। if (BuildConfig.BUILD_TYPE.equals("Debug")){ }ইস্যুটি ফিক্সড। ধন্যবাদ
নিশ্চিত হয়ে নিন যে আপনি সঠিক বিল্ডকনফিগ শ্রেণিটি আমদানি করছেন এবং হ্যাঁ, আপনাকে ব্যবহার করতে কোনও সমস্যা হবে না:
if (BuildConfig.DEBUG) {
//It's not a release version.
}
BuildConfigআপনার অ্যাপ্লিকেশানের প্যাকেজে অবস্থিত, যেমনimport com.mycompany.myapp.BuildConfig;