বিকাশের সময় ক্র্যাশলেটিক্স কীভাবে অক্ষম করবেন


245

বিকাশের সময় ক্র্যাশলাইটিক্স অ্যান্ড্রয়েড এসডিকে বন্ধ করার কোনও সহজ উপায় আছে কি?

আমি বোকা কিছু করার সময় এটি ক্র্যাশ প্রেরণ করতে চাই না

অন্যদিকে আমি কোনও মন্তব্য করতে চাই না Crashlytics.start()এবং সম্ভবত এটিকে সঙ্কোচন করা এবং প্রতিশ্রুতিবদ্ধ হওয়া ভুলে যাওয়ার ঝুঁকি নেই


আপনি কি কেবলমাত্র আপনার এপি কীটি ম্যানিফেস্ট থেকে সরিয়ে দেওয়ার চেষ্টা করেছেন, ক্র্যাশ হয়েছে কিনা তা আমার মনে নেই।
টিমমেটেজে

@ টিমিমিড এটি ক্রাশ হয়েছে। Manifestঅ্যাপটিকে ক্র্যাশ করে পুরো লাইনে মন্তব্য করা যাতে প্রশ্নটিকে আরও কিছুটা বৈধ করে তোলে।
মাইকেল

উত্তর:


172

ক্র্যাশলাইটিক্স থেকে এখানে মার্ক। আপনি নিজের ডিবাগ তৈরির সময় ক্র্যাশলাইটিক্স অক্ষম করার কয়েকটি উপায় এখানে রইল!

  1. একটি পৃথক অ্যান্ড্রয়েড ব্যবহার করুন: ডিবাগ এবং রিলিজ বিল্ডগুলির জন্য সংস্করণ স্ট্রিং এবং তারপরে ডিবাগ সংস্করণের জন্য ক্র্যাশলিটিক্স ওয়েব ড্যাশবোর্ড থেকে ক্র্যাশ প্রতিবেদন অক্ষম করুন।

  2. একটি ডিবাগ পতাকা চেক করে এমন একটি বিবৃতিতে ক্র্যাশলিটিক্স.স্টার্ট () এ কলটি মোড়ক করুন। আপনি এখানে কাস্টম পতাকা ব্যবহার করতে পারেন বা এখানে প্রস্তাবিতগুলির মতো একটি পদ্ধতির ব্যবহার করতে পারেন: APK সাইন ইন করা আছে বা "ডিবাগ বিল্ড" কীভাবে পরীক্ষা করবেন?


5
@marcr কীভাবে কেবল বিল্ডকনফিগ.ডিবিউজি ব্যবহার করবেন?
dannyroa

3
@dannyroa বিল্ডকনফিগ.এইডিইউবিজি কোনও স্ট্যান্ডার্ড ফ্ল্যাগ নয় যা সমস্ত বিল্ড এনভায়রনমেন্টগুলি জুড়ে কাজ করে। আমি বিশ্বাস করি যে এগ্রিপস এবং এডিটি দিয়ে নির্মাণ করার সময় এটি ধারাবাহিকভাবে সেট করা হয়েছে তবে অন্য কোথাও নয়।
marcr

11
BuildConfig.DEBUGআপনি যদি গ্র্যাডল ব্যবহার করে নির্মাণ করছেন তবে ব্যবহার করা উচিত। এটি সর্বদা সঠিকভাবে উত্পন্ন হবে।
অস্টিন মাহুনি

3
@ মার্কার ক্র্যাশলাইটিক্সের সর্বশেষ সংস্করণে (যেমন এটি ফ্যাব্রিকের সাথে একীভূত বলে মনে হয়) কীভাবে লাইব্রেরি অভ্যন্তরীণ পরীক্ষা করে BuildConfig.DEBUG?
আখি

2
@ আখিয়ার এটি স্বয়ংক্রিয়ভাবে পরীক্ষা করা হয় না, আমি ব্যবহার করি: যদি (! বিল্ডকনফিগ.এডিবিইউ) {ফ্যাব্রিক.উইথ (এটি, নতুন ক্র্যাশলিটিক্স ());}
জর্জান কেচেল

387

আমি ক্র্যাশলিটিক্স (ফ্যাব্রিক ইন্টিগ্রেশন সহ) থেকে সমাধানটি পেয়েছি

আপনার অ্যাপ্লিকেশন ক্লাসের মধ্যে নিম্নলিখিত কোডগুলি রাখুন onCreate()

Crashlytics crashlytics = new Crashlytics.Builder().disabled(BuildConfig.DEBUG).build();
Fabric.with(this, crashlytics);

সম্পাদনা করুন:

ক্র্যাশালাইটিক্সে ২.৩ এবং তারপরে, এটি হ্রাস করা হয়েছে। সঠিক কোডটি হ'ল:

CrashlyticsCore core = new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build();
Fabric.with(this, new Crashlytics.Builder().core(core).build());

অথবা

Fabric.with(this, new Crashlytics.Builder().core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()).build());

( ক্র্যাশলিটিক্স থেকে অবহিত পদ্ধতিটি অনুলিপি করা হয়েছে () )


EDIT2:

আপনি buildTypeoptionচ্ছিকভাবে এটি আপনার গ্রেডে যুক্ত করতে পারেন । এই কমান্ডটি ক্র্যাশলাইটিক্স ম্যাপিং ফাইলটি প্রেরণ এবং প্রতিটি বিল্ডের জন্য একটি আইডি তৈরি করা অক্ষম করে, যা সেই স্বাদের গ্রেড বিল্ডগুলির গতি বাড়িয়ে তোলে। (এটি রান সময়ে ক্র্যাশলিটিক্স অক্ষম করে না)) মাইক বি এর উত্তরটি এখানে দেখুন।

buildTypes {
    release {
           ....
    }
    debug {
        ext.enableCrashlytics = false
    }
}

2
এটি ব্যবহার করা খুব সুন্দর এবং আপনি যদি আপনার অ্যাপ্লিকেশন শ্রেণির বাইরে আপনার কোডটিতে ক্র্যাশলিটিক্সকে কল করেন তবে আপনার অ্যাপ ক্রাশ হওয়া বন্ধ হবে।
স্পিডনিডমডস

1
এটি ক্র্যাশলাইটিক্স ২.৩.০ :( এ অবহিত হয়েছে
দামিয়ান ওয়ালকাজাক

1
ext.enableCrashlytics = false আমার সাথে 2.5 ব্যবহার করে না। আসলে, এটি কখনও কাজ করে না। এমনকি ফ্যাব্রিকের আগেও।
বাও-লং এনগুইন-ট্রং

2
আমার এখানে একটা উদ্বেগ আছে। এটি কি উত্তর এবং বিটা সক্ষম করবে? দেখে মনে হচ্ছে এটি আরও সঠিক হওয়া উচিত: CrashlyticsCore core = new CrashlyticsCore.Builder ()। अक्षम করা (buildConfig.DEBUG)। বিল্ড (); ফ্যাব্রিক.উইথ (এটি, নতুন উত্তর (), নতুন বিটা (), নতুন ক্র্যাশলিটিক্স.বিল্ডার ()। কোর (কোর)। বিল্ড ());
gbero

1
ext.enableCrashlytics = মিথ্যা ক্রাশ হয় না আপনি যদি এটি সঠিকভাবে ব্যবহার করেন। ক্র্যাশ কীভাবে কাটিয়ে উঠবেন তা ফ্যাব্রিক্স ডকুমেন্টেশনে রয়েছে: ডকস.ফ্যাব্রিক.ইও / অ্যান্ড্রয়েড / ক্র্যাশলিটিক্স / বিল্ড- টোলস html
ফ্র্যাঙ্ক

46

নির্বাচিত উত্তরটি আর সঠিক নয়। গুগল ক্র্যাশলিটিক্সের সংহতিকে পরিবর্তন করেছে । আমার বর্তমান সংস্করণটি হ'ল 2.9.1এবং আমার একমাত্র জিনিসটি হ'ল implementation 'com.crashlytics.sdk.android:crashlytics:2.9.1'আমার গ্রেডল ফাইলটিতে যুক্ত করা। আর কোনও জিনিস লাগবে না, দুর্দান্ত তবে এর অর্থ ক্রাশলিটিক্স সর্বদা চলমান।

সমাধান ঘ

মুক্তির সংস্করণে কেবল ক্র্যাশলাইটিক্স সংকলন করুন:

dependencies {
   ...
   releaseImplementation 'com.crashlytics.sdk.android:crashlytics:2.9.1' // update version
}

সমাধান 2

আপনি অতিরিক্তভাবে ক্র্যাশলিটিক্স কনফিগার করতে চান তবে সলিউশন 1 কাজ করছে না, কারণ ক্র্যাশলিটিক্স ক্লাসগুলি ডিবাগ বিল্ডসে পাওয়া যাবে না। সুতরাং গ্রেডল বাস্তবায়নটি এখানে আবার পরিবর্তন করুন:

implementation 'com.crashlytics.sdk.android:crashlytics:2.9.1' // update version

তারপরে আপনার ম্যানিফেস্টে যান এবং meta-dataট্যাগের ভিতরে নিম্নলিখিত ট্যাগ যুক্ত করুন application:

<application
        android:name="...>

        <meta-data
            android:name="firebase_crashlytics_collection_enabled"
            android:value="false" />

...

</application>

আপনার লঞ্চ-ক্রিয়াকলাপে যোগ করুন (প্রতিটি ক্রিয়াকলাপের জন্য নয় কেবলমাত্র এক সময়ের প্রয়োজন)

if (!BuildConfig.DEBUG) { // only enable bug tracking in release version
   Fabric.with(this, new Crashlytics());
}

এটি কেবল মুক্তি সংস্করণগুলিতে ক্র্যাশলাইটিক্স সক্ষম করবে। সতর্কতা অবলম্বন করুন, যখন আপনি ক্র্যাশলিটিক্স কনফিগার করেন তখন বিল্ডকনফিগ.ডিইউবিউজিও দেখুন Eg

if (!BuildConfig.DEBUG) {
   Crashlytics.setUserIdentifier("HASH_ID");
}

2
এটা পরিষ্কার মনে হচ্ছে। প্রাথমিক ক্রিয়াকলাপটি আরম্ভ করার পরিবর্তে অ্যাপ্লিকেশন ইনস্ট্যান্সে না থাকলে?
জুলে

তারা ওয়েবসাইটে Enable collection for selected users by initializing Crashlytics from one of your app's activitiesবিবৃতি দেয় : তবে আমি অনুমান করি আপনি যদি অ্যাপ্লিকেশনটিতে ক্র্যাশলিটিক্স শুরু করেন তবে এটি খুব বেশি পরিবর্তিত হবে না। তুমি কি চেষ্টা করেছ? যদি এটি কাজ করে তবে আমি এটি আমার উত্তরে যুক্ত করতে পারি। firebase.google.com/docs/crashlytics/customize-crash-reports
পল Spiesberger

2
রানটাইমে ক্র্যাশলাইটিক্স অক্ষম করার জন্য, কাজ করার জন্য অন্য কোনও সমাধান আমি পাইনি। সমাধান 1 স্রেফ নিখুঁতভাবে কাজ করেছে - আমি কেন এটি ভাবিনি।

সমাধানের জন্য ধন্যবাদ। আমি যখন firebase_crashlytics_collection_enabledম্যানিফেস্টে মিথ্যাতে সেট করি তখন ক্রসটি কনসোলে উপস্থিত হয় না (আমি v2.9.9 ব্যবহার করি)। সুতরাং আমি firebase_crashlytics_collection_enabled=falsetrue
এটির

30

আপনি যদি গ্রেডল ব্যবহার করেন তবে এটি কেবল একটি স্বাদে যুক্ত করুন:

ext.enableCrashlytics = false

1
এটা কি শুধু গন্ধের জন্য? ডিবাগ বনাম রিলিজ সম্পর্কে কী? আমি ডিবাগের জন্য অক্ষম করার চেষ্টা করেছিলাম তবে তবুও ক্র্যাশটি পাঠিয়েছি
xialin

আমি মনে করি এটি কেবল স্বাদে কাজ করে। অস্টিন এবং মার্কসি পয়েন্টযুক্ত পতাকাটি ব্যবহার করে IMO সবচেয়ে সহজ।
ব্যবহারকারী 1998494

আমি সমাধানটি খুঁজে পেয়েছি। তবে এটি পুরানো ক্র্যাশলিটিক্সের জন্য উপযুক্ত কিনা তা নিশ্চিত নয়। এটি ফ্যাব্রিক এসডিকে নতুন ক্র্যাশলিটিক্সের জন্য। আমার উত্তর নীচে চেক করুন
xialin

1
এই কমান্ডটি ক্র্যাশলাইটিক্স ম্যাপিং ফাইলটি প্রেরণ এবং প্রতিটি বিল্ডের জন্য একটি আইডি তৈরি করা অক্ষম করে, যা সেই স্বাদের গ্রেড বিল্ডগুলির গতি বাড়িয়ে তোলে। (এটি রান সময়ে ক্র্যাশলিটিক্স অক্ষম করে না)) মাইক বি এর উত্তর এখানে দেখুন: স্ট্যাকওভারফ্লো / প্রশ্নগুলি / ২৮৩৩৯৩৩৩ /
Aphex

18
এটি একটি ক্র্যাশ ঘটেছে ... " This app relies on Crashlytics."
সাকিবয়

27

সর্বশেষতম ডকটি দেখুন। https://docs.fabric.io/android/crashlytics/build-tools.html#gradle-advanced-setup

যোগ করা ছাড়াও ext.enableCrashlytics = falseবিল্ড.গ্রেডে আপনার করা দরকার,

Crashlytics crashlyticsKit = new Crashlytics.Builder()
    .core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
    .build();

// Initialize Fabric with the debug-disabled crashlytics.
Fabric.with(this, crashlyticsKit);

আমি এইভাবে চেষ্টা করেছি এবং এখনও অ্যাপ্লিকেশনটি ক্র্যাশ করেThis app relies on Crashlytics. Please sign up for access at
বালফ্লায়ার

আমার ধারণা আপনি ext.enableCrashlytics = falseবিল্ড.gradle এ নিখোঁজ রয়েছেন।
অভিষেক পাটিদার

না, আমি বিল্ড.gradle ফাইলটিতে ডিবাগ বিল্ড টাইপ যুক্ত করেছি, এটি buildTypes -> debug, also i'm applying the plugin via প্রয়োগ প্লাগইনটিতে রয়েছে: 'io.fabric'`
বালফ্লায়ার

আমি নিশ্চিত না কেন এই সমাধানটি কেন 24 বার উপুড় করা হয়েছিল। এর সাথে ক্র্যাশThis app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up
TROD

24

আমি দেখেছি এই সহজ সমাধান হতে হবে:

    release {
        ...
        buildConfigField 'Boolean', 'enableCrashlytics', 'true'
    }
    debug {
        buildConfigField 'Boolean', 'enableCrashlytics', 'false'
    }

উপরে লাইন নামক একটি স্ট্যাটিক বুলিয়ান ক্ষেত্র তৈরি করবে enableCrashlyticsমধ্যে BuildConfigযা আপনি শুরু করার সিদ্ধান্ত নিতে ব্যবহার করতে পারেন ফাইল Fabricবা না:

    if (BuildConfig.enableCrashlytics)
        Fabric.with(this, new Crashlytics());

দ্রষ্টব্য: এই পদ্ধতির সাহায্যে কাপড় কেবল রিলিজ বিল্ডগুলিতে শুরু করা হয় (উপরের কোডে সূচক হিসাবে)। এর অর্থ আপনার Crashlyticsক্লাসে স্ট্যাটিক্স পদ্ধতিতে কল করতে হবে একটি ifব্লকে যা পরীক্ষা করে নীচে দেখানো হয়েছে যে ফ্যাব্রিকগুলি আরম্ভ করা হয়েছে।

if (Fabric.isInitialized())
    Crashlytics.logException(e);

অন্যথায় Must Initialize Fabric before using singleton()এমুলেটর পরীক্ষা করার সময় অ্যাপ্লিকেশন ত্রুটির সাথে ক্রাশ হবে ।


17

2019 উত্তর

আমি কেবল মুক্তি পেতে ক্র্যাশলিটিক্স সক্ষম করার চেষ্টা করেছি এবং 2 ঘন্টার জন্য ডিবাগে অক্ষম করে ফায়ারবেস কনসোলটি পরীক্ষা করে দেখছি যেগুলি ব্যতিক্রমগুলি আপলোড হয়েছে কিনা তা দেখুন।

এটি করার 2 টি সম্ভাব্য উপায় রয়েছে।

বিকল্প 1

এটি কাজ করে, তবে আপনি যদি Crashlyticsডিবাগ তৈরির কোনও পদ্ধতি কল করেন তবে অ্যাপটি ক্রাশ হবে

অ্যাপ্লিকেশন / build.gradle

android {
    buildTypes {
        release {
            manifestPlaceholders = [crashlyticsEnabled: true]
        }
        debug {
            manifestPlaceholders = [crashlyticsEnabled: false]
        }

Andro আইডি

<manifest
    <application
        <meta-data
            android:name="firebase_crashlytics_collection_enabled"
            android:value="${crashlyticsEnabled}" />

বিকল্প 2

একটি বিকল্প যদি এটি আপনাকে প্রথমে Crashlyticsপরীক্ষা না করে পদ্ধতিগুলিতে কল করতে দেয় BuildConfig.DEBUG। এই সেটআপটি দিয়ে আপনি নিরাপদে পদ্ধতিগুলিতে কল করতে পারেন Crashlytics.logException()- তারা কেবলমাত্র ডিবাগ বিল্ডগুলিতে কিছুই করেন না। আমি ডিবাগ-এ প্রতিবেদনগুলি আপলোড করা দেখছি না।

অ্যাপ্লিকেশন / build.gradle

android {
    buildTypes {
        release {
            ext.enableCrashlytics = true
        }
        release {
            ext.enableCrashlytics = false
        }

Andro আইডি

<manifest
    <application
        <meta-data
            android:name="firebase_crashlytics_collection_enabled"
            android:value="false" />

অনক্রিট আবেদন ()

val crashlytics = Crashlytics.Builder()
    .core(CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
    .build()
Fabric.with(this, crashlytics)

আমার মনে android:value="false"হয় এটিকে বদলাতে হবে android:value="${enableCrashlytics}"। তাই না?
জয়দীপডব্লিউ

অপশন # 2 এর সাথে আরেকটি সুবিধা হ'ল আপনি প্রথমে অক্ষম বিশ্লেষণ সংগ্রহ সংগ্রহ শুরু করুন এবং তারপরে ব্যবহারকারীকে প্রথমে তাদের অ্যাপ্লিকেশন ব্যবহারের ট্র্যাক করা ঠিক আছে (জিডিপিআর ভাবেন) ask তারপরে আপনি কেবল ফ্যাব্রিক.ওই কলটি করতে পারবেন যদি ব্যবহারকারী ট্র্যাকিংয়ে সম্মত হন।
ক্রিশ্চিয়ান হেনডেন

বিকল্প # 2 এর একমাত্র নেতিবাচক দিকটি হ'ল এটি এখনও ফায়ারবেস ড্যাশবোর্ডে ডিবাগ সংস্করণ তৈরি করে, যদিও সেখানে কোনও ক্র্যাশ প্রদর্শিত হবে না (যেহেতু তারা অক্ষম রয়েছে)। এটি দুটি সমস্যা তৈরি করে - প্রথমত, মুক্তির সংস্করণগুলি খুঁজে পাওয়া শক্ত করে; দ্বিতীয় - ফায়ারবেস ড্যাশবোর্ডটি কেবলমাত্র সর্বশেষ 100 সংস্করণ দেখায় - যা আপনাকে কিছু পুরানো সংস্করণে ক্র্যাশ হতে বাধা দিতে পারে। ফ্যাব্রিক ড্যাশবোর্ডে আপনি একটি নির্দিষ্ট সংস্করণ অক্ষম করতে পারেন, ফায়ারবেসের ড্যাশবোর্ডে এটি সম্ভব নয়
অ্যালেক্স লিপভ

14

এটি ব্যবহার করুন MyApplication#onCreate()

if (!BuildConfig.DEBUG) Crashlytics.start(this);

সম্পাদনা করুন আপনি যদি ফ্যাব্রিকে আপগ্রেড করেন তবে পরিবর্তে এই উত্তরটি ব্যবহার করুন।


বিল্ডকনফিগ.ডেবিউজি সর্বদা সঠিকভাবে সেট করা থাকে না। ক্র্যাশলিটিক্স সক্ষম / অক্ষম করতে এর উপর নির্ভর করা আমার জন্য ইন্টেলিজ ব্যবহার করার সময় বেশ কয়েকটি সমস্যা সৃষ্টি করেছিল।
জেব বার্নেট

5
আপনি কোন বিল্ড টুলস ব্যবহার করছেন? গ্রেডেল সর্বদা সেই মানটি সেট করে। এক বছর আগে এটি একটি সমস্যা ছিল, তবে নতুন বিল্ড সরঞ্জামগুলি আরও ভাল।
অস্টিন মাহনি

আমি v0.9 এ আছি +। ইন্টেলিজের জন্য গ্রেডল প্লাগইন এবং গ্রেডল নিজেই v1.11।
জেব বার্নেট

আমি আমার অ্যাপগুলিতে কোনও সমস্যা দেখিনি। BuildConfigগ্রেডল টাস্ক দ্বারা উত্পাদিত হয়, যা চালানোর গ্যারান্টিযুক্ত। আমি buildConfigFieldকাস্টম ক্ষেত্রগুলি সেট করতে ব্যবহার করি এবং সেগুলি সর্বদা কাজ করে। সরঞ্জাম.এন্ড্রয়েড / রিসেন্ট / অ্যান্ড্রয়েডস্টুডিও045 রিলিজেড আপনার ব্যবহারের পরামর্শ দেয় BuildConfig.DEBUG
অস্টিন মাহুনি

একজন আদর্শবাদী হিসাবে আমি নিশ্চিত যে এটি ব্যবহার করতে সক্ষম হব কারণ এটি যে ছোট সংস্থার জন্য আমি কাজ করি তার জন্য যথেষ্ট-অটোমেটেড বিল্ড প্রক্রিয়া সহজতর করবে। এটি ঠিক যে আমরা উত্পাদনে এমন একটি বিল্ড প্রকাশ করি যা সেই পতাকাটির উপর নির্ভর করে এবং ক্র্যাশলিটিক্স কখনই এটি সরাসরি দেখেনি go আমরা ম্যানুয়ালি এটি টগলিংয়ে ফিরে যাওয়ার পরে ক্র্যাশলিটিক্স তাৎক্ষণিকভাবে এটি দেখেছিল।
জেব বার্নেট


9

আমি পছন্দ করি এমন আরও একটি সহজ সমাধান, কারণ এর জন্য বিভিন্ন মেনিফেস্ট ফাইলের প্রয়োজন হয় না:

পদক্ষেপ 1 - build.gradle এ ম্যানিফেস্টের স্থানধারককে সংজ্ঞায়িত করুন

android {
    ...
    buildTypes {
        release {
            manifestPlaceholders = [crashlytics:"true"]
        }
        debug {
            manifestPlaceholders = [crashlytics:"false"]
        }
    }
    ...
}

পদক্ষেপ 2 - এগুলি আপনার AndroidManLive.xML এ ব্যবহার করুন

<meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="${crashlytics}" />

6

লক্ষ্য করুন যে আপনি ডিবাগ বিল্ডে চিহ্নগুলির বিরক্তিকর আপলোডটিও অক্ষম করতে পারেন:

def crashlyticsUploadStoredDeobsDebug = "crashlyticsUploadStoredDeobsDebug"
def crashlyticsUploadDeobsDebug = "crashlyticsUploadDeobsDebug"
tasks.whenTaskAdded { task ->
    if (crashlyticsUploadStoredDeobsDebug.equals(task.name) ||
            crashlyticsUploadDeobsDebug.equals(task.name)) {

        println "Disabling $task.name."
        task.enabled = false
    }
}

এটি কেবল build.gradleআপনার অ্যাপ্লিকেশন মডিউলের মধ্যে রেখে দিন।


6

আপনি যদি সমস্ত ক্র্যাশ ক্যাপচার করতে চান (ডিবাগ এবং রিলিজ বিল্ডগুলির জন্য) তবে ক্র্যাশলাইটিক্স ড্যাশবোর্ডে এগুলি পৃথক করতে চান, আপনি কোডের এই লাইনটি বিল্ড.gradle এ যুক্ত করতে পারেন:

debug {
    versionNameSuffix "-DEBUG"
}

উদাহরণস্বরূপ, আপনার অ্যাপ্লিকেশনটির সংস্করণনাম যদি 1.0.0 হয় তবে আপনার রিলিজ বিল্ডগুলি 1.0.0 হিসাবে ট্যাগ হবে যখন ডিবাগ বিল্ডগুলি হবে 1.0.0-DEBUG


এই হল? স্বাদ করতে হবে না?
পোর্টফোলিওবিল্ডার

6

এখানে প্রচুর ভাল উত্তর রয়েছে, তবে আমার পরীক্ষার জন্য আমি ঘরে বসে বিটা এবং ল্যাব-বাইরে-পরীক্ষার জন্য ডিবাগ বিল্ডগুলি ব্যবহার করি যেখানে ক্র্যাশ লগগুলি এখনও খুব দরকারী এবং আমি এখনও তাদের রিপোর্ট করতে চাই। ও.পি. এর মতো, আমি যা চেয়েছিলাম তা হ'ল সক্রিয় বিকাশের সময় সেগুলি অক্ষম করা যেখানে আমি প্রায়শই ক্র্যাশ ঘটায় এবং দ্রুত সমাধান করি।

সমস্ত ডিবাগ ক্র্যাশগুলি সরানোর পরিবর্তে আপনি নিম্নলিখিত কোডগুলি সহ কোনও ডিভাইস আপনার বিকাশ মেশিনের সাথে সংযুক্ত থাকাকালীন কেবলমাত্র রিপোর্টগুলি অক্ষম করতে বেছে নিতে পারেন।

if (!Debug.isDebuggerConnected()) {
    Fabric.with(this, new Crashlytics());
}

এটা ভুল. আমি ব্যবহার করে আমার কোডে অ-মারাত্মক ব্যতিক্রমগুলি লগ করি Crashlytics.logException(e)এবং এই বিবৃতিটি ডিবাগ বিল্ডগুলিতে একটি ব্যতিক্রম ছুঁড়ে দেয় কারণ ফ্যাব্রিক সিঙ্গলটন আরম্ভ হয় না। আপনি যদি ক্র্যাশলিটিক্স ব্যবহার করেন তবে সর্বদা ফ্যাব্রিক সিঙ্গলটন শুরু করুন। দেখুন ফাহমি এর উত্তর
নেক্সা

5

সমস্যাটি হ'ল সমাধানগুলির কোনওটিই সর্বশেষ ক্র্যাশলিটিক্স এসডিকে জন্য কাজ করে না। (আমি ২.৯.০ ব্যবহার করছি)

আপনি কোড দ্বারা এটি অক্ষম করতে পারবেন না কেননা এটি আপনার প্রকল্পের মধ্যে সংকলন করে এবং আপনার অ্যাপ্লিকেশনটির কল অনক্রিটের আগে চলে। সুতরাং অন্যান্য সমাধানটি সহজ - যখন প্রয়োজন হয় না তখন ক্র্যাশলিটিক্স সংকলন করবেন না। বিল্ড.gradle ফাইলের মধ্যে 'রিলিজকম্পাইল' দিয়ে 'সংকলন' কলটি প্রতিস্থাপন করুন।

 releaseCompile('com.crashlytics.sdk.android:crashlytics:2.9.0@aar') {
        transitive = true
    }

3

গ্রেডল তৈরি করতে ব্যবহার করার সময় আপ টু ডেট সহজ সংস্করণ:

if (!BuildConfig.DEBUG) {
    Fabric.with(this, new Crashlytics());
}

এটি ক্র্যাশলিটিক্সের জন্য ফ্যাব্রিক থেকে নতুন বিল্ট-ইন সিনট্যাক্স ব্যবহার করে এবং গ্রেডল বিল্ডের সাথে স্বয়ংক্রিয়ভাবে কাজ করে।


3

একটি অদ্ভুত সমস্যা যা আমি মুখোমুখি হয়েছিলাম: আমি জিয়ালিনের উত্তর অনুসরণ করেছি (এটি অফিশিয়াল ওয়েবসাইটেও প্রকাশিত হয়) এবং এটি কার্যকর হয়নি। দেখা গেল যে আমি BuildConfigফ্যাব্রিকের প্যাকেজে রেফারেন্স করছি যাতে একটি স্ট্যাটিক DEBUG ভেরিয়েবলও রয়েছে যা এমনকি ডিবাগ মোডেও মিথ্যাতে সেট করা হয়েছিল।

সুতরাং, আপনি যদি পূর্বোক্ত সমাধানটি অনুসরণ করেন এবং এখনও ডিবাগ প্রতিবেদনগুলি পান তবে নিশ্চিত হয়ে নিন যে আপনি এটি উল্লেখ করছেন:

import com.yourpackagename.BuildConfig;

এবং এটি নয়:

import io.fabric.sdk.android.BuildConfig;    

2

আপনি যদি BuildConfig.DEBUGসঠিকভাবে সেট আপ না হওয়ার বিষয়ে উদ্বিগ্ন হন তবে ApplicationInfoপরিবর্তে ব্যবহার করুন:

boolean isDebug = ( mAppContext.getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE ) != 0;
Crashlytics crashlytics = new Crashlytics.Builder().disabled( isDebug ).build();
Fabric.with( uIContext, crashlytics );

2

স্বাদ বা বিল্ড কনফিগার ব্যবহার করুন। দেব বিল্ডের জন্য একটি পৃথক বিল্ড শনাক্তকারী ব্যবহার করুন এবং আপনার সমস্ত ক্র্যাশ পৃথক অ্যাপে যেতে থাকবে। সমবয়সীদের সাথে বিল্ডটি ভাগ করে নেওয়ার ক্ষেত্রে বা ডিবাগার ছাড়াই এটি ব্যবহার করার ক্ষেত্রে সহজেই আসতে পারে। এটার মতো কিছু -

    productFlavors {
    dev {
        applicationId "io.yourapp.developement"
    }
    staging {
        applicationId "io.yourapp.staging"
    }

    production {
        applicationId "io.yourapp.app"
    }

2

আপনি যদি কোনও ডিবাজেবল রিলিজ বিল্ড চান তবে এখানে উপায়:

buildTypes {
    release {
        signingConfig signingConfigs.config
        debuggable true //-> debuggable release build
        minifyEnabled true
        multiDexEnabled false
        ext.enableCrashlytics = true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        buildConfigField 'boolean', 'BUILD_TYPE_DEBUG', 'false'
    }
    debug {
        minifyEnabled false
        multiDexEnabled true
        ext.enableCrashlytics = false
        ext.alwaysUpdateBuildId = false
        // Disable fabric build ID generation for debug builds
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        buildConfigField 'boolean', 'BUILD_TYPE_DEBUG', 'true'
    }
}

আপনি যখন debuggable trueআপনার বিল্ডকনফিগ সেট করেন DE

আনুষাঙ্গিক তারেক:

Crashlytics crashlytics = new Crashlytics.Builder()
            // disable crash reporting in debug build types with custom build type variable
            .core(new CrashlyticsCore.Builder().disabled(BuildConfig.BUILD_TYPE_DEBUG).build())
            .build();

    final Fabric fabric = new Fabric.Builder(this)
            .kits(crashlytics)
            //enable debugging with debuggable flag in build type 
            .debuggable(BuildConfig.DEBUG)
            .build();

    // Initialize Fabric with the debug-disabled crashlytics.
    Fabric.with(fabric);

এর উদ্দেশ্য কী ext.enableCrashlyticsএবং ext.alwaysUpdateBuildIdযেহেতু এগুলি কোথাও রেফারেন্সযুক্ত বলে মনে হয় না। আমি কিছু অনুপস্থিত করছি?
জুলে

@ জুলেস এটি ডক্সে রয়েছে ডকস.ফ্যাব্রিক.ইও
এম রেজা নাসিরলু

বিল্ডকনফিগ.বিউিলডি_ওয়াইপিডিডিইডিইউবি নিরর্থক, বিল্ডকনফিগ.ডিইবিইউ একই মান পাওয়ার জন্য ব্যবহার করা যেতে পারে
আন্তোনিস র‌্যাডজ

@ অ্যান্টোনিসরাডজ কারণ আমার একটি ডিবাগযোগ্য রিলিজ বিল্ড দরকার ছিল
এম রেজা নাসিরলু

1

আমরা ফ্যাব্রিক এর isDebuggable () পদ্ধতি ব্যবহার করতে পারি।

import static io.fabric.sdk.android.Fabric.isDebuggable;

if(! isDebuggable()){
    // set Crashlytics ... 
}

শুভ কোডিং :)


1

আপনি ডিবাগ মোডের জন্য ডেডিকেটেড ম্যানিফেস্ট ফাইলটি ব্যবহার করতে পারেন (ক্র্যাশলাইটিক্স ২.৯. with নিয়ে আমার জন্য কাজ করে):

ফাইলটি তৈরি app/src/debug/AndroidManifest.xmlকরুন এবং নিম্নলিখিতগুলি যুক্ত করুন:

<application>

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false"/>

</application>

নোট যে এই মেটা-তথ্য উপাদান ডিবাগ পুরা করা আবশ্যক / Andro আইডি শুধুমাত্র , এবং নিয়মিত Andro আইডি মধ্যে না

যে সমাধানগুলি ব্যবহার করে CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()তা আমার পক্ষে কার্যকর হয়নি এবং আমি জানতে পেরেছিলাম যে অ্যাপ্লিকেশন.অনক্রিয়েট () কল করার আগে বা ক্রিয়াকলিটিক্সআইনিটপ্রোভাডার দ্বারা ক্র্যাশলাইটিক্স সূচনা করা হয়েছিল বা কোনও ক্রিয়াকলাপ শুরু করা হয়েছে যার অর্থ হ'ল অ্যাপ্লিকেশনটিতে ম্যানুয়ালি আরম্ভ করা বা কোনও ক্রিয়াকলাপ নেই প্রভাব কারণ ফ্যাব্রিক ইতিমধ্যে আরম্ভ করা হয়েছে।


1

পদক্ষেপ 1: বিল্ড.গ্রেডে

buildTypes {
        debug {
            debuggable true
            manifestPlaceholders = [enableCrashlytic:false]
        }
        release {
            debuggable false
            manifestPlaceholders = [enableCrashlytic:true]
        }
    }

পদক্ষেপ 2: প্রকাশে

<meta-data
            android:name="firebase_crashlytics_collection_enabled"
            android:value="${enableCrashlytic}" />

পদক্ষেপ 3: অ্যাপ্লিকেশন বা প্রথম ক্রিয়াকলাপে

private void setupCrashReport() {
        if (BuildConfig.DEBUG) return;
        Fabric.with(this, new Crashlytics());
    }

পদক্ষেপ 3 প্রয়োজনীয় কিনা তা আমি নিশ্চিত নই, তবে মুক্তির সংস্করণটি ক্রাশ ছাড়াই কাজ করা উচিত তা নিশ্চিত করার জন্য। উত্স: https://firebase.google.com/docs/crashlytics/customize-crash-report#enable_opt-in_reporting


1

এই কাজটি আমার জন্য:

    releaseCompile  'com.crashlytics.sdk.android:crashlytics:2.9.9'

এবং বিল্ডটাইপগুলিতে:

debug {
ext.enableCrashlytics = false
}

কোডে ক্র্যাশলিটিক্সের ব্যবহার সম্পর্কে কীভাবে? এটি আপনাকে সংকলনের ত্রুটিগুলি দেবে।
মাইক্রার

1

নিম্নলিখিত সংস্করণ com.google.firebase: ফায়ারব্যাস-ক্র্যাশলিটিক্স: 17.0.0: ফায়ারব্যাস ক্র্যাশলাইটিক্স অক্ষম করার জন্য দুটি বিকল্প রয়েছে are

  1. অ্যাপের ম্যানিফেস্টে মেটা-ট্যাগ যুক্ত করুন

<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />

অথবা

  1. সরাসরি অ্যাপ্লিকেশনটিতে কনফিগার করুন (মিথ্যাতে সেট করার সময় মনে রাখবেন, অ্যাপ্লিকেশনটির পরবর্তী রান পর্যন্ত নতুন মান প্রযোজ্য না)

FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)


0

আপনি যদি কেবল এটির আইডিই করতে চান তবে অন্য কোনও উপায় হ'ল প্লাগইনটি লগআউট করা। স্পষ্টতই আপনি আবার লগ ইন না করে বিল্ড তৈরি করার সময় প্রতিবেদনগুলি পাঠানো বন্ধ হয়ে যাবে stop


0
  1. এটি আপনার অ্যাপ্লিকেশন এর বিল্ড.gradle এ যুক্ত করুন:

    android {
        buildTypes {
            debug {
              // Disable fabric build ID generation for debug builds
              ext.enableCrashlytics = false
              ...
  2. রানটাইমে ক্র্যাশলাইটিক্স কিটটি অক্ষম করুন। অন্যথায়, ক্র্যাশলিটিক্স কিট ত্রুটিটি নিক্ষেপ করবে:

    // Set up Crashlytics, disabled for debug builds
    // Add These lines in your app Application class onCreate method
    
    Crashlytics crashlyticsKit = new Crashlytics.Builder()
        .core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
        .build();
    
    // Initialize Fabric with the debug-disabled crashlytics.
    Fabric.with(this, crashlyticsKit);
  3. AndroidManifest.xML এ, যুক্ত করুন

    <meta-data
    android:name="firebase_crashlytics_collection_enabled"
    android:value="false" />

0

2020 পোস্ট তারেক উত্তর

আপনার অ্যাপ্লিকেশন শ্রেণিতে নীচের কোডটি আটকান এবং setCrashlyticsStateআপনার অ্যাপ্লিকেশন অনক্রিয়েট থেকে কল করুন । আপনি বিকল্প হিসাবে আপনার পরীক্ষার ডিভাইস আইডি যুক্ত করতে পারেনdebugDevices হ্যাশসেটেও খুব ভাল পারেন যাতে আপনার ব্যক্তিগত ডিভাইসগুলি উপেক্ষা করা যায়, এমনকি রিলিজ মোডে বিল্ডিং করার সময়ও।

বিঃদ্রঃ. ফিরিয়ে দেওয়া ডিভাইস আইডি অনন্য বা ধ্রুবক হওয়ার গ্যারান্টিযুক্তSettings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID); নয় (এটি কোনও কারখানার পুনরায় সেট করা বা কোনও রুটেড ডিভাইসে ম্যানুয়ালি পরিবর্তিত হতে পারে)। তবে এটি যথেষ্ট ভাল হওয়া উচিত।

private final HashSet<String> debugDevices = new HashSet<String>(Arrays.asList("6a3d5c2bae3fd32c"));

private boolean isDebugDevice(String deviceId) {
    return debugDevices.contains(deviceId);
}

private void setCrashlyticsState() {
    @SuppressLint("HardwareIds")
    String deviceId = Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
    if (BuildConfig.DEBUG || isDebugDevice(deviceId)) {
        Log.v("DeviceId", deviceId);
        FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(false);
    }
}

যে বিল্ডকনফিগ পরীক্ষা করুন। সঠিক বিল্ডকনফিগ শ্রেণীর দিকে তাকিয়ে আছে। প্রায়শই বেশ কয়েকটি বিকল্প রয়েছে এবং ভুলটি এটিকে টেনে আনতে পারে।


-8

এটি নির্বোধ উত্তর, আমি জানি
কেবল মন্তব্য করা Fabric.with(this, new Crashlytics());, সেটিতে কাজ করা এবং আপনি যখন এটি প্রকাশ করতে চান তখন এটিকে অসুবিধে করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.