Geliştirme sırasında Crashlytics nasıl devre dışı bırakılır


245

Geliştirirken Crashlytics Android SDK'yı kapatmanın basit bir yolu var mı?

Her aptalca şey yaptığımda çökmesini istemiyorum

Öte yandan, yorum yapmak istemiyorum Crashlytics.start()ve muhtemelen rahatsız etmeyi ve taahhüt etmeyi unutmayı riske atıyorum


API anahtarınızı manifest'ten kaldırmayı denediniz mi, bir çökme olup olmadığını hatırlamıyorum.
Timmetje

@timmied Çöküyor. Ayrıca Manifestçökmesini tüm satır yorum böylece uygulama biraz daha yasal hale getirir çöküyor.
Michael

Yanıtlar:


172

Crashlytics'ten Marc burada. Hata ayıklama sürümlerinizi yaparken Crashlytics'i devre dışı bırakmanın birkaç yolu!

  1. Farklı bir android kullanın: Hata ayıklama ve sürüm oluşturma için versionString ve ardından hata ayıklama sürümü için Crashlytics web panosundan kilitlenme raporlamasını devre dışı bırakın.

  2. Crashlytics.start () öğesine yapılan çağrıyı bir hata ayıklama bayrağını kontrol eden bir if ifadesine sarın. Özel bir bayrak veya burada önerilenler gibi bir yaklaşım kullanabilirsiniz: APK'nın imzalanıp imzalanmadığını veya "hata ayıklama derlemesi" nasıl kontrol edilir?


5
@marcr Sadece BuildConfig.DEBUG kullanmaya ne dersiniz?
dannyroa

3
@dannyroa BuildConfig.DEBUG, tüm oluşturma ortamlarında çalışan standart bir bayrak değildir. Eclipse & ADT ile inşa ederken sürekli olarak ayarlandığına inanıyorum, ancak başka bir yerde değil.
marcr

11
BuildConfig.DEBUGGradle kullanarak bina yapıyorsanız kullanılmalıdır. Her zaman doğru şekilde üretilecektir.
Austyn Mahoney

3
@ marcr crashlytics'in son sürümünde (Fabric ile birleşmiş gibi) kütüphane iç kontrol yapıyor BuildConfig.DEBUGmu?
Ocak'ta akhy

2
@akhyar Otomatik olarak işaretlenmez, şunu kullanırım: if (! BuildConfig.DEBUG) {Fabric.with (this, new Crashlytics ());}
Björn Kechel

387

Çözümü Crashlytics'ten buldum (Fabric entegrasyonu ile)

Aşağıdaki kodu Uygulama sınıfınıza yerleştirin onCreate()

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

DÜZENLE:

Crashalitics 2.3 ve üstü sürümlerde bu kullanımdan kaldırılmıştır. Doğru kod:

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

veya

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

( Crashlytics kullanımdan kaldırıldı yönteminden kopyalandı devre dışı () )


EDIT2:

İsteğe bağlı olarak bunu buildTypesınıfta da ekleyebilirsiniz . Bu komut, crashlytics eşleme dosyasını göndermeyi ve her yapı için bir kimlik oluşturmayı devre dışı bırakır, bu da bu tatların çakıl yapılarını hızlandırır. (Crashlytics'i çalışma zamanında devre dışı bırakmaz.) Mike B'nin cevabına buradan bakın.

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

2
Bu, kullanımı çok daha hoştur ve kodunuzda, Uygulama sınıfınızın dışında Crashlytics'e çağrı yaparsanız uygulamanızın kilitlenmesini durduracaktır.
speedynomads

1
Crashlytics 2.3.0 :(
Damian

1
ext.enableCrashlytics = false 2.5 ile benim için de çalışmıyor. Aslında hiç çalışmadı. Kumaştan önce bile.
Bao-Long Nguyen-Trong

2
Burada bir endişem var. Bu Yanıt ve Beta'yı etkinleştirecek mi? Bunun daha doğru olması gerektiği anlaşılıyor: CrashlyticsCore core = new CrashlyticsCore.Builder (). Devre dışı (BuildConfig.DEBUG) .build (); Fabric.with (bu, yeni Yanıtlar (), yeni Beta (), yeni Crashlytics.Builder (). Core (core) .build ());
gbero

1
ext.enableCrashlytics = false, bunu doğru kullanırsanız çökmez. Kazanın üstesinden nasıl gelineceği Fabrics belgesinde: docs.fabric.io/android/crashlytics/build-tools.html .
Frank

46

Seçilen cevap artık doğru değil. Google , Crashlytics'in entegrasyonunu değiştirdi . Geçerli sürümüm ve Gradle dosyama 2.9.1eklemek implementation 'com.crashlytics.sdk.android:crashlytics:2.9.1'için tek yapmam gereken şey . Başka bir şeye gerek yok, güzel ama bu Crashlytics'in her zaman çalıştığı anlamına geliyor.

Çözüm 1

Crashlytics'i yalnızca yayın sürümünde derleyin:

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

Çözüm 2

Crashlytics'i ayrıca yapılandırmak istiyorsanız , Crashlytics sınıfları Debug Builds'da bulunmayacağından Çözüm 1 çalışmıyor. Gradle uygulamasını şu şekilde değiştirin:

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

Ardından Manifestinize gidin ve meta-dataetiketin içine aşağıdaki etiketi ekleyin application:

<application
        android:name="...>

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

...

</application>

Lansman Etkinliğinize ekleyin (yalnızca bir kerelik gerekir, her Etkinlik değil)

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

Bu, yalnızca sürümlerde Crashlytics'i etkinleştirir. Dikkatli olun, ayrıca Crashlytics'i yapılandırdığınızda BuildConfig.DEBUG için de kontrol edin, örn:

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

2
Bu temiz görünüyor. Birincil etkinlikte başlatmak yerine, bunun yerine Uygulama örneğinde değil misiniz?
jules

Onlar web sitesinde devlet: Enable collection for selected users by initializing Crashlytics from one of your app's activitiesama sanırım uygulamada Crashlytics başlatırsanız çok değişmez. Onu denedin mi? Çalışırsa, cevabıma ekleyebilirim. firebase.google.com/docs/crashlytics/customize-crash-reports
Paul Spiesberger

2
Çalışma zamanında crashlytics'i devre dışı bırakmak için başka çözümlerden hiçbirini alamadım. Çözüm 1 mükemmel çalıştı - neden bunu düşünmedim.

Çözüm için teşekkürler. Ben ayarladığınızda firebase_crashlytics_collection_enabledkazasında konsolda görünmüyor tezahür false (I v2.9.9 kullanın). Bu yüzden hata ayıklama derlemesi için firebase_crashlytics_collection_enabled=falseve trueserbest bırakma için ayrı bir bildirim ekleyerek bunu düzelttim
Vasily Kabunov

30

Gradle kullanıyorsanız, bunu bir lezzete ekleyin:

ext.enableCrashlytics = false

1
bu sadece lezzet için mi? hata ayıklama ve bırakma ne olacak? Hata ayıklama için devre dışı bırakmaya çalıştım ama yine de
çökmeyi

Bence sadece lezzetler üzerinde çalışıyor. Austyn ve Marcc bayrağını kullanarak IMO en kolay olanı işaret etti.
user1998494

Çözümü buldum. ancak eski Crashlytics ile uyumlu olup olmadığından emin değilim. Fabric SDK'daki yeni Crashlytics için. aşağıdaki cevabımı kontrol et
xialin

1
Bu komut, crashlytics eşleme dosyasını göndermeyi ve her yapı için bir kimlik oluşturmayı devre dışı bırakır, bu da bu tatların çakıl yapılarını hızlandırır. (Crashlytics'i çalışma zamanında devre dışı bırakmaz.) Mike B'nin cevabına buradan bakın: stackoverflow.com/questions/28339323/…
Aphex

18
Bu bir kazaya neden oldu ... " This app relies on Crashlytics."
Sakiboy

27

En son dokümana göz atın. https://docs.fabric.io/android/crashlytics/build-tools.html#gradle-advanced-setup .

ext.enableCrashlytics = falseBuild.grade eklemeniz dışında yapmanız gereken,

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);

Bu şekilde denedim ve hala uygulama çöküyorThis app relies on Crashlytics. Please sign up for access at
Balflear

Sanırım ext.enableCrashlytics = falsebuild.gradle'da eksiksiniz.
Abhishek Patidar

Hayır, build.gradle dosyasında hata ayıklama derleme türüne ekledim, buildTypes -> debug, also i'm applying the plugin via uygulama eklentisinde: 'io.fabric' '
Balflear

Bu çözümün 24 kez neden değerlendirildiğinden emin değilim. ÇöküyorThis app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up
TROD

24

Bulduğum bu en kolay çözüm gibi:

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

Yukarıdaki satırlar, başlatılıp başlatılmayacağına karar vermek için kullanabileceğiniz enableCrashlytics, BuildConfigdosyada çağrılan statik bir boole alanı oluşturur Fabric:

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

NOT: Bu yöntemle Kumaşlar yalnızca serbest bırakma yapılarında başlatılır (yukarıdaki kodda belirtildiği gibi). Bu, Fabric'te aşağıda gösterildiği gibi başlatılıp başlatılmadığını kontrol eden Crashlyticsbir ifblokta sınıftaki statik yöntemlere çağrı yapmanız gerektiği anlamına gelir .

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

Aksi takdirde, Must Initialize Fabric before using singleton()emülatör üzerinde test yapılırken uygulama hata ile kilitlenir .


17

2019 Cevabı

Firebase konsolunun İstisnaların yüklenip yüklenmediğini görmek için Firebase konsolunu kontrol ederek yalnızca Crashlytics'i sürümde etkinleştirmeye ve hata ayıklamada 2 saat boyunca devre dışı bırakmaya çalışıyorum.

Bunu yapmanın 2 olası yolu vardır.

SEÇENEK 1

Çalışır, ancak Crashlyticshata ayıklama yapılarında herhangi bir yöntemi çağırırsanız uygulama kilitlenir .

Uygulamanın / build.gradle

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

AndroidManifest.xml

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

SEÇENEK 2

Bu, önce Crashlyticskontrol etmeden yöntemleri çağırmanıza izin veren bir alternatiftir BuildConfig.DEBUG. Bu kurulum ile güvenli bir şekildeCrashlytics.logException() - hata ayıklama yapılarında hiçbir şey yapmazlar. Raporların hata ayıklamada yüklendiğini görmüyorum.

Uygulamanın / build.gradle

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

AndroidManifest.xml

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

OnCreate () uygulaması

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

Bence android:value="false"değiştirilmeli android:value="${enableCrashlytics}". Öyle değil mi?
JaydeepW

Seçenek # 2'nin bir diğer avantajı, başlangıçta devre dışı bırakılmış analitik koleksiyonuyla başlamanız ve daha sonra kullanıcıya uygulama uygulamalarını izlemenin uygun olup olmadığını sorabilmenizdir (GDPR'yi düşünün). O zaman Fabric.with ile sadece kullanıcı izlemeyi kabul ettiğinde arama yaparsınız.
Per Christian Henden

Seçenek # 2'nin tek dezavantajı, orada herhangi bir kilitlenme gösterilmemesine rağmen (devre dışı bırakıldıkları için) Firebase kontrol panelinde hata ayıklama sürümleri oluşturmasıdır. Bu iki sorun yaratır - birincisi, sürüm sürümlerini bulmak zorlaşır; ikinci - Firebase panosu yalnızca son 100 sürümü gösterir - bu, bazı eski sürümlerde çökmeleri görmenizi engelleyebilir. Fabric panosunda belirli bir sürümü devre dışı bırakabilirsiniz, bu Firebase'in panosunda mümkün değildir .
Alex Lipov

14

Bunu şurada kullan: MyApplication#onCreate()

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

DÜZENLE Yapıya yükselttiyseniz, bunun yerine bu yanıtı kullanın.


BuildConfig.DEBUG her zaman düzgün ayarlanmamıştır. IntelliJ kullanırken Crashlytics'i etkinleştirmek / devre dışı bırakmak için ona güvenmek benim için birkaç soruna neden oldu.
Zeb Barnett

5
Hangi oluşturma araçlarını kullanıyorsunuz? Gradle DAİMA bu değeri ayarlayacaktır. Bir yıl önce bir sorundu, ancak yeni inşa araçları çok daha iyi.
Austyn Mahoney

IntelliJ için Gradle eklentisinin v0.9. + Sürümü ve Gradle'ın kendisi için v1.11'deyim.
Zeb Barnett

Uygulamalarımın hiçbirinde herhangi bir sorun görmedim. BuildConfig, çalışması garanti edilen bir Gradle görevi tarafından oluşturulur. Ben de buildConfigFieldözel alanlar ayarlamak için kullanın ve bu her zaman çalışır. tools.android.com/recent/androidstudio045released da kullanmanızı önerir BuildConfig.DEBUG.
Austyn Mahoney

İdealist olarak, çalıştığım küçük şirket için oldukça otomatik olmayan yapım sürecini basitleştireceği için kullanmak istiyorum. Sadece o bayrağa bağlı bir yapı ürettik ve Crashlytics asla canlı yayında görmedi. El ile değiştirmeye geri döndükten sonra Crashlytics hemen gördü.
Zeb Barnett


9

Sevdiğim başka bir basit çözüm, çünkü farklı manifest dosyaları gerektirmiyor:

Adım 1 - build.gradle içindeki manifest yer tutucuları tanımlayın

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

2.Adım - AndroidManifest.xml'nizde kullanın

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

6

Hata ayıklama derlemesinde can sıkıcı sembollerin yüklenmesini de devre dışı bırakabileceğinize dikkat edin:

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
    }
}

Sadece build.gradleuygulama modülünüzün içine koyun .


6

Tüm kilitlenmeleri yakalamak (hata ayıklama ve sürüm derlemeleri için) ancak bunları Crashlytics Panosunda ayırmak istiyorsanız, build.gradle öğesine şu kod satırını ekleyebilirsiniz:

debug {
    versionNameSuffix "-DEBUG"
}

Örneğin, uygulamanızın versionName değeri 1.0.0 ise yayın sürümleriniz 1.0.0 olarak etiketlenirken hata ayıklama sürümleri 1.0.0-DEBUG olur


Budur? Lezzet yapmaya gerek yok mu?
portföy oluşturucu

6

Burada birçok iyi yanıt var, ancak testlerim için, kaza günlüklerinin hala çok yararlı olduğu ve şirket içi betalar ve laboratuvar dışı testler için hata ayıklama yapıları kullanıyorum ve yine de rapor etmek istiyorum. OP gibi, tek istediğim, sık sık çökmelere neden olduğum ve hızlı bir şekilde çözdüğüm aktif gelişim sırasında bunları devre dışı bırakmaktı.

TÜM hata ayıklama kilitlenmelerini kaldırmak yerine, raporları yalnızca aşağıdaki kodla geliştirme aygıtınıza bir aygıt bağlıyken devre dışı bırakmayı seçebilirsiniz.

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

Yanlış. Kodumu kullanarak ölümcül olmayan özel durumları günlüğe kaydeder Crashlytics.logException(e)ve Fabric singleton başlatılmadığından bu deyim hata ayıklama yapılarında bir istisna atar. Crashlytics kullanıyorsanız, daima Fabric singleton'u başlatın. Fahmy'nin cevabına bakın .
naXa

5

Sorun şu ki, çözümlerin hiçbiri en son crashlytics sdk için çalışmıyor. (2.9.0 kullanıyorum)

Projenize derlendiği ve uygulamanızın çağrılmasından önce bile çalıştığı için kodla devre dışı bırakamazsınız. Yani diğer çözüm basit - gerekmediğinde crashlytics derlemeyin. 'Derleme' çağrısını build.gradle dosyasındaki 'releaseCompile' ile değiştirin.

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

3

Gradle'ı oluşturmak için kullanırken en kolay sürüm:

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

Crashlytics için Fabric'ten yeni Yerleşik Sözdizimini kullanır ve bir Gradle derlemesi ile otomatik olarak çalışır.


3

Karşılaştığım garip bir sorun: Xialin'in cevabını (resmi web sitesinde de görünüyor) takip ettim ve işe yaramadı. Referans verdiğim ortaya çıktıBuildConfigAyrıca hata ayıklama modunda bile false olarak ayarlanmış statik bir DEBUG değişkeni içeren Fabric paketinde çıktı.

Bu nedenle, yukarıda belirtilen çözümü izlerseniz ve yine de hata ayıklama raporları alıyorsanız, buna başvurduğunuzdan emin olun:

import com.yourpackagename.BuildConfig;

Ve bu değil:

import io.fabric.sdk.android.BuildConfig;    

2

Doğru şekilde kurulmadığından endişe ediyorsanız BuildConfig.DEBUG, şunu kullanın ApplicationInfo:

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

2

Tatlar veya yapı yapılandırmaları kullanın. Dev derlemesi için ayrı bir derleme tanımlayıcısı kullanın; tüm kilitlenmeleriniz ayrı bir uygulamaya devam edecektir. Derlemeyi eşlerle paylaşmanız veya bir hata ayıklayıcı olmadan kullanmanız durumunda kullanışlı olabilir. Böyle bir şey -

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

    production {
        applicationId "io.yourapp.app"
    }

2

Hata ayıklanabilir bir sürüm derlemesi istiyorsanız, işte yol:

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'
    }
}

Ayarladığınızda debuggable trueBuildConfig.DEBUG ayarınızı true ile başlatılacak şekilde , bu değişkeni BuildConfig sınıfına ekledim.

Init Kumaş:

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);

Amacı nedir ext.enableCrashlyticsve ext.alwaysUpdateBuildIdhiçbir yere atıfta bulunmadıkları için. Bir şey mi kaçırıyorum?
Jules


BuildConfig.BUILD_TYPE_DEBUG yedeklidir, BuildConfig.DEBUG aynı değeri elde etmek için kullanılabilir
Antonis Radz

@AntonisRadz Çünkü hata ayıklanabilir bir sürüm oluşturma ihtiyacım vardı
M. Reza Nasirloo

1

Kumaşın isDebuggable () yöntemini kullanabiliriz.

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

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

Mutlu kodlama :)


1

Hata ayıklama modu için özel bir bildirim dosyası kullanabilirsiniz (benim için Crashlytics 2.9.7 ile çalışır):

Dosyayı oluşturun app/src/debug/AndroidManifest.xmlve aşağıdakileri ekleyin:

<application>

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

</application>

Bu meta veri öğesinin normal AndroidManifest.xml dosyasına değil, yalnızca debug / AndroidManifest.xml dosyasına konması gerektiğini unutmayın.

Kullanan çözüm CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()benim için işe yaramadı ve ben crash.tics CrashlyticsInitProvider tarafından Application.onCreate () çağrılmadan önce başlatıldığını veya herhangi bir aktivite başlatılmasını öğrendim, yani uygulamada veya bir aktivitede manuel olarak başlatmanın hiçbir çünkü kumaş zaten başlatılmış.


1

Adım 1: Derleme.grade'de

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

Adım 2: Manifest'te

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

Adım 3: Uygulamada veya ilk Faaliyette

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

Adım 3'ün gerekli olup olmadığından emin değilim, ancak sürüm sürümünün kilitlenmeden çalıştığından emin olmak için. kaynak: https://firebase.google.com/docs/crashlytics/customize-crash-reports#enable_opt-in_reporting


1

Bu iş benim için:

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

ve buildTypes içinde:

debug {
ext.enableCrashlytics = false
}

Crashlytics'in koddaki kullanımları nasıl? Size derleme hataları verecektir.
Micer

1

Aşağıdaki com.google.firebase sürümü için Firebase Crashlytics'i devre dışı bırakmak için iki seçenek vardır: firebase-crashlytics: 17.0.0:

  1. Uygulamanın Bildirgesine meta etiket ekle

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

VEYA

  1. Doğrudan uygulamada yapılandırın (yanlış olarak ayarlandığında unutmayın, yeni değer uygulamanın bir sonraki çalışmasına kadar geçerli değildir)

FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)


0

Sadece IDE'nizde bunu yapmak istiyorsanız başka bir yol eklentiden çıkış yapmaktır. Görünüşe göre tekrar giriş yapmadan derlemeler oluştururken rapor göndermeyi durduracak.


0
  1. Bunu uygulamanızın build.gradle dosyasına ekleyin:

    android {
        buildTypes {
            debug {
              // Disable fabric build ID generation for debug builds
              ext.enableCrashlytics = false
              ...
  2. Crashlytics kitini çalışma zamanında devre dışı bırakın. Aksi takdirde, Crashlytics kiti hatayı atar:

    // 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'de ekleyin

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

0

2020 Post Kumaş Cevabı

Aşağıdaki kodu Application sınıfınıza yapıştırın ve yöntemi setCrashlyticsStateonCreate uygulamanızdan çağırın . İsteğe bağlı olarak test cihazı kimliklerinizidebugDevices HashSet'e de böylece serbest bırakma modundayken bile kişisel cihazlarınız yok sayılabilir.

Not. Tarafından döndürülen cihaz kimliğinin benzersiz veya sabit olması garantiSettings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID); edilmez (Fabrika ayarlarına sıfırlamada veya köklü bir cihazda manuel olarak değişebilir). Ama yeterince iyi olmalı.

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);
    }
}

BuildConfig'i kontrol edin. doğru BuildConfig sınıfına bakıyor. Genellikle birkaç seçenek vardır ve yanlış olanı sürükleyebilirsiniz.


-8

Bu aptalca bir cevap, biliyorum
sadece yorum yap, üzerinde Fabric.with(this, new Crashlytics());çalış ve serbest bırakmak istediğin zaman rahatsız et.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.