Cara menonaktifkan Crashlytics selama pengembangan

245

Apakah ada cara sederhana untuk mematikan Android SDK Crashlytics saat mengembangkan?

Saya tidak ingin mengirimkan crash setiap kali saya melakukan sesuatu yang bodoh

Di sisi lain saya tidak ingin berkomentar Crashlytics.start()dan mungkin berisiko lupa untuk menghapus komentar dan komit

Michael
sumber
Apakah Anda mencoba menghapus kunci api dari manifes, saya tidak ingat apakah itu macet.
Timmetje
@timmied crash. Juga mengomentari seluruh baris di Manifestcrash aplikasi jadi ini membuat pertanyaan sedikit lebih sah.
Michael

Jawaban:

172

Marc dari Crashlytics di sini. Berikut adalah beberapa cara untuk menonaktifkan Crashlytics saat Anda melakukan build debug Anda!

  1. Gunakan android yang berbeda: versionString untuk debug dan rilis build dan kemudian nonaktifkan pelaporan kerusakan dari dasbor web Crashlytics untuk versi debug.

  2. Bungkus panggilan ke Crashlytics.start () dalam pernyataan if yang memeriksa flag debug. Anda dapat menggunakan bendera khusus atau pendekatan seperti yang diusulkan di sini: Bagaimana cara memeriksa apakah APK ditandatangani atau "membangun debug"?

Maret
sumber
5
@marcr Bagaimana kalau hanya menggunakan BuildConfig.DEBUG?
dannyroa
3
@dannyroa BuildConfig.DEBUG bukan flag standar yang berfungsi di semua lingkungan build. Saya percaya ini diatur secara konsisten ketika membangun dengan Eclipse & ADT, tetapi tidak di tempat lain.
Maret
11
BuildConfig.DEBUGharus digunakan jika Anda membangun menggunakan Gradle. Itu akan selalu dihasilkan dengan benar.
Austyn Mahoney
3
@marcr bagaimana dengan versi terbaru dari crashlytics (seperti yang terlihat digabung dengan Fabric), apakah perpustakaan melakukan pemeriksaan internal BuildConfig.DEBUG?
akhy
2
@akhyar Tidak dicentang secara otomatis, saya menggunakan: if (! BuildConfig.DEBUG) {Fabric.with (ini, Crashlytics baru ());}
Björn Kechel
387

Saya menemukan solusi dari Crashlytics (dengan integrasi Fabric)

Masukkan kode berikut di dalam kelas Aplikasi Anda onCreate()

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

EDIT:

Dalam Crashalitics 2.3 dan di atasnya, ini sudah usang. Kode yang benar adalah:

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

atau

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

(disalin dari metode usang Crashlytics dinonaktifkan () )


EDIT2:

Anda juga dapat menambahkan ini secara opsional buildTypedi gradle Anda. Perintah ini menonaktifkan pengiriman file pemetaan crashlytics dan membuat ID untuk setiap build, yang mempercepat build gradle dari rasa-rasa itu. (Itu tidak menonaktifkan Crashlytics saat run time.) Lihat jawaban Mike B di sini.

buildTypes {
    release {
           ....
    }
    debug {
        ext.enableCrashlytics = false
    }
}
xialin
sumber
2
Ini jauh lebih baik untuk digunakan dan akan menghentikan aplikasi Anda mogok jika Anda membuat panggilan ke Crashlytics dalam kode Anda, di luar kelas Aplikasi Anda.
speedynomads
1
Itu menjadi usang dalam Crashlytics 2.3.0 :(
Damian Walczak
1
ext.enableCrashlytics = false tidak bekerja untuk saya dengan 2,5. Sebenarnya, itu tidak pernah berhasil. Bahkan sebelum Kain.
Bao-Long Nguyen-Trong
2
Saya punya masalah di sini. Apakah ini akan mengaktifkan Jawab dan Beta? Sepertinya ini harus lebih benar: CrashlyticsCore core = new CrashlyticsCore.Builder (). Dinonaktifkan (BuildConfig.DEBUG) .build (); Fabric.with (this, Answers baru (), Beta baru (), Crashlytics.Builder (). Core (core) .build ()) baru;
gbero
1
ext.enableCrashlytics = false tidak macet jika Anda menggunakannya dengan benar. Cara mengatasi kecelakaan itu ada di dokumentasi Fabrics: docs.fabric.io/android/crashlytics/build-tools.html .
Frank
46

Jawaban yang dipilih tidak benar lagi. Google mengubah integrasi Crashlytics. Versi saya saat ini adalah 2.9.1dan satu-satunya hal yang harus saya lakukan adalah menambahkan implementation 'com.crashlytics.sdk.android:crashlytics:2.9.1'file Gradle saya. Tidak diperlukan hal-hal lebih lanjut, bagus tetapi ini berarti bahwa Crashlytics selalu berjalan.

Solusi 1

Hanya kompilasi Crashlytics dalam versi rilis:

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

Solusi 2

Jika Anda ingin mengkonfigurasi Crashlytics tambahan maka Solusi 1 tidak berfungsi, karena kelas Crashlytics tidak akan ditemukan di Debug Builds. Jadi, ubah implementasi Gradle kembali ke:

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

Lalu buka Manifest Anda dan tambahkan meta-datatag berikut di dalam applicationtag:

<application
        android:name="...>

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

...

</application>

Tambahkan ke Aktivitas Peluncuran Anda (hanya diperlukan satu kali, tidak setiap Aktivitas)

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

Ini hanya akan mengaktifkan Crashlytics dalam versi rilis. Hati-hati, juga periksa untuk BuildConfig.DEBUG ketika Anda mengkonfigurasi Crashlytics, misalnya:

if (!BuildConfig.DEBUG) {
   Crashlytics.setUserIdentifier("HASH_ID");
}
Paul Spiesberger
sumber
2
Ini terlihat bersih. Alih-alih menginisialisasi dalam aktivitas utama, saat tidak dalam contoh Aplikasi sebagai gantinya?
jules
Mereka menyatakan di situs web: Enable collection for selected users by initializing Crashlytics from one of your app's activitiestapi saya kira itu tidak banyak berubah jika Anda menginisialisasi Crashlytics dalam aplikasi. Apakah kamu sudah mencobanya? Jika berhasil, maka saya dapat menambahkannya ke jawaban saya. firebase.google.com/docs/crashlytics/customize-crash-reports
Paul Spiesberger
2
Saya tidak bisa mendapatkan solusi lain untuk bekerja, untuk menonaktifkan crashlytics saat runtime. Solusi 1 hanya bekerja dengan sempurna - mengapa saya tidak memikirkan itu.
Terima kasih atas solusinya. Ketika saya atur firebase_crashlytics_collection_enabledke false dalam manifes, crash tidak muncul di konsol (saya menggunakan v2.9.9). Jadi saya memperbaiki ini dengan menambahkan manifes terpisah untuk debug build dengan firebase_crashlytics_collection_enabled=falsedan trueuntuk rilis
Vasily Kabunov
30

Jika Anda menggunakan Gradle, tambahkan saja ini ke rasa:

ext.enableCrashlytics = false
pengguna1998494
sumber
1
itu hanya untuk rasa? bagaimana dengan debug vs rilis? Saya mencoba untuk menonaktifkan untuk debug tetapi masih mengirim crash
xialin
Saya pikir itu hanya bekerja pada rasa. IMO menggunakan bendera yang ditunjuk Austyn dan Marcc adalah yang termudah.
user1998494
Saya menemukan solusinya. tetapi tidak yakin apakah itu kompatibel untuk Crashlytics lama. itu untuk Crashlytics baru di Fabric SDK. periksa jawaban saya di bawah ini
xialin
1
Perintah ini menonaktifkan pengiriman file pemetaan crashlytics dan membuat ID untuk setiap build, yang mempercepat build gradle dari rasa-rasa itu. (Ini tidak menonaktifkan Crashlytics pada waktu berjalan.) Lihat jawaban Mike B di sini: stackoverflow.com/questions/28339323/…
Aphex
18
Ini menyebabkan crash ... " This app relies on Crashlytics."
Sakiboy
27

Lihatlah dokumen terbaru. https://docs.fabric.io/android/crashlytics/build-tools.html#gradle-advanced-setup .

Selain menambahkan ext.enableCrashlytics = false build.grade yang perlu Anda lakukan,

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);
Abhishek Patidar
sumber
Saya mencoba cara ini, dan masih aplikasi crash denganThis app relies on Crashlytics. Please sign up for access at
Balflear
Saya kira Anda tidak ada ext.enableCrashlytics = falsedi build.gradle.
Abhishek Patidar
Tidak, saya telah menambahkan di debug build type di file build.gradle, itu dalam buildTypes -> debug, also i'm applying the plugin via plugin apply: 'io.fabric'`
Balflear
Saya tidak yakin mengapa solusi ini bahkan dicabut 24 kali. This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up
Hancur
24

Saya menemukan ini sebagai solusi termudah:

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

Baris di atas akan membuat bidang boolean statis yang disebut enableCrashlyticsdalam BuildConfigfile yang dapat Anda gunakan untuk memutuskan apakah akan memulai Fabricatau tidak:

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

CATATAN: Dengan metode ini Fabric hanya diinisialisasi dalam build rilis (sebagai indikasi dalam kode di atas). Ini berarti Anda perlu melakukan panggilan ke metode statika di Crashlyticskelas di ifblok yang memeriksa apakah Fabric telah diinisialisasi seperti yang ditunjukkan di bawah ini.

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

Kalau tidak, aplikasi akan crash dengan Must Initialize Fabric before using singleton()kesalahan saat menguji pada emulator.

fahmy
sumber
17

2019 Jawab

Saya telah mencoba untuk hanya mengaktifkan Crashlytics dalam rilis dan nonaktifkan dalam debug selama 2 jam, memeriksa konsol Firebase untuk melihat apakah Pengecualian tempat diunggah atau tidak.

Ada 2 cara yang mungkin untuk melakukan ini.

PILIHAN 1

Ini berfungsi, tetapi jika Anda memanggil Crashlyticsmetode apa pun pada debug build, aplikasi akan macet .

app / 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}" />

PILIHAN 2

Alternatif jika itu memungkinkan Anda memanggil Crashlyticsmetode tanpa memeriksa BuildConfig.DEBUGterlebih dahulu. Dengan pengaturan ini, Anda dapat memanggil metode dengan aman sepertiCrashlytics.logException() - mereka tidak melakukan apa pun dalam debug build. Saya tidak melihat laporan diunggah dalam debug.

app / 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" />

Aplikasi onCreate ()

val crashlytics = Crashlytics.Builder()
    .core(CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
    .build()
Fabric.with(this, crashlytics)
Albert Vila Calvo
sumber
Saya pikir android:value="false"harus diubah menjadi android:value="${enableCrashlytics}". Bukan?
JaydeepW
Keuntungan lain dengan Opsi # 2 adalah bahwa Anda mulai dengan koleksi analitik awalnya dinonaktifkan, dan kemudian dapat meminta pengguna terlebih dahulu apakah boleh melacak penggunaan aplikasi mereka (pikirkan GDPR). Maka Anda hanya akan melakukan panggilan Fabric. Dengan jika pengguna setuju untuk melacak.
Per Christian Henden
Satu-satunya downside dari opsi # 2, adalah ia masih membuat versi debug di dasbor Firebase, meskipun tidak ada kerusakan akan ditampilkan di sana (karena mereka dinonaktifkan). Ini membuat dua masalah - pertama, semakin sulit menemukan versi rilis; kedua - dasbor Firebase hanya menampilkan 100 versi terakhir - yang mungkin mencegah Anda melihat kerusakan di beberapa versi lama. Di dasbor Fabric Anda bisa menonaktifkan versi tertentu, ini tidak mungkin di dasbor Firebase.
Alex Lipov
14

Gunakan ini di MyApplication#onCreate()

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

EDIT Jika Anda meningkatkan ke Fabric, gunakan jawaban ini sebagai gantinya.

Austyn Mahoney
sumber
BuildConfig.DEBUG tidak selalu diatur dengan benar. Mengandalkannya untuk mengaktifkan / menonaktifkan Crashlytics menyebabkan beberapa masalah bagi saya saat menggunakan IntelliJ.
Zeb Barnett
5
Apa alat bangun yang Anda gunakan? Gradle akan SELALU menetapkan nilai itu. Itu adalah masalah setahun yang lalu, tetapi alat build baru jauh lebih baik.
Austyn Mahoney
Saya di v0.9. + Dari plugin Gradle untuk IntelliJ dan v1.11 untuk Gradle sendiri.
Zeb Barnett
Saya belum melihat masalah apa pun di salah satu aplikasi saya. BuildConfigdihasilkan oleh tugas Gradle, yang dijamin untuk dijalankan. Saya juga menggunakan buildConfigFielduntuk mengatur bidang khusus dan yang selalu berfungsi. tools.android.com/recent/androidstudio045 dirilis juga menyarankan agar Anda gunakan BuildConfig.DEBUG.
Austyn Mahoney
Sebagai seorang idealis saya yakin ingin dapat menggunakannya karena akan menyederhanakan proses pembuatan yang tidak otomatis untuk perusahaan kecil tempat saya bekerja. Hanya saja kami merilis ke produksi sebuah bangunan yang tergantung pada bendera itu dan Crashlytics tidak pernah melihatnya ditayangkan. Setelah kami kembali mengaktifkannya secara manual, Crashlytics segera melihatnya.
Zeb Barnett
9

Solusi sederhana lain yang saya suka, karena tidak memerlukan file manifes yang berbeda:

Langkah 1 - tentukan placeholder nyata dalam build.gradle

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

Langkah 2 - gunakan di AndroidManifest.xml Anda

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

Perhatikan bahwa Anda juga dapat menonaktifkan pengunggahan simbol yang mengganggu di debug build:

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

Masukkan saja ke dalam build.gradlemodul aplikasi Anda.

Ariel Cabib
sumber
6

Jika Anda ingin menangkap semua crash (untuk debug dan rilis build) tetapi ingin memisahkannya di Dashboard Crashlytics, Anda dapat menambahkan baris kode ini ke build.gradle:

debug {
    versionNameSuffix "-DEBUG"
}

Misalnya, jika versiName aplikasi Anda adalah 1.0.0, versi rilis Anda akan ditandai sebagai 1.0.0 sedangkan versi debug akan menjadi 1.0.0-DEBUG

Khronos
sumber
Ini dia? Tidak perlu melakukan rasa?
portfoliobuilder
6

Ada banyak jawaban bagus di sini, tetapi untuk pengujian saya, saya menggunakan debug build untuk beta in-house dan pengujian di luar laboratorium di mana log kerusakan masih sangat berguna dan saya masih ingin melaporkannya. Seperti OP, yang saya inginkan adalah menonaktifkannya selama pengembangan aktif di mana saya sering menyebabkan dan menyelesaikan crash dengan cepat.

Daripada menghapus SEMUA macet debug, Anda dapat memilih untuk hanya menonaktifkan laporan saat perangkat terhubung ke mesin pengembangan Anda dengan kode berikut.

if (!Debug.isDebuggerConnected()) {
    Fabric.with(this, new Crashlytics());
}
William henderson
sumber
Itu salah. Saya mencatat pengecualian non-fatal dalam kode saya menggunakan Crashlytics.logException(e)dan pernyataan ini melempar pengecualian dalam debug membangun karena Fabric singleton tidak diinisialisasi. Jika Anda menggunakan Crashlytics maka selalu menginisialisasi Fabric singleton. Lihat jawaban fahmy .
naXa
5

Masalahnya adalah tidak ada solusi yang berfungsi untuk sdk crashlytics terbaru. (Saya menggunakan 2.9.0)

Anda tidak dapat menonaktifkannya dengan kode karena dikompilasi ke dalam proyek Anda dan berjalan bahkan sebelum panggilan onCreate dari aplikasi Anda. Jadi solusi lain sederhana - jangan mengkompilasi crashlytics saat tidak diperlukan. Ganti panggilan 'compile' dengan 'releaseCompile' di dalam file build.gradle.

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

Versi terbaru dan termudah saat menggunakan Gradle untuk membangun:

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

Itu menggunakan Sintaks Built-In baru dari Fabric untuk Crashlytics dan bekerja secara otomatis dengan membangun Gradle.

Björn Kechel
sumber
3

Masalah aneh yang saya temui: Saya mengikuti jawaban xialin (yang juga muncul di situs web resmi) dan tidak berhasil. Ternyata saya referensiBuildConfig pada paket Fabric yang juga berisi variabel DEBUG statis yang disetel ke false bahkan dalam mode debug.

Jadi, jika Anda mengikuti solusi yang disebutkan di atas dan Anda masih mendapatkan laporan debug, pastikan Anda merujuk ini:

import com.yourpackagename.BuildConfig;

Dan bukan ini:

import io.fabric.sdk.android.BuildConfig;    
Neria Nachum
sumber
2

Jika Anda khawatir BuildConfig.DEBUGtidak diatur dengan benar, gunakan ApplicationInfosebaliknya:

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

Gunakan citarasa atau buat konfigurasi. Gunakan pengenal build terpisah untuk pengembangan dev dan semua crash Anda akan terus ke aplikasi terpisah. Dapat berguna jika berbagi bangunan dengan rekan atau menggunakannya tanpa debugger. Sesuatu seperti ini -

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

    production {
        applicationId "io.yourapp.app"
    }
ribhu
sumber
2

Jika Anda menginginkan versi rilis yang dapat diperdebatkan, inilah caranya:

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

Ketika Anda mengatur debuggable true BuildConfig.DEBUG Anda akan diinisialisasi dengan true, itu sebabnya saya menambahkan variabel itu di kelas BuildConfig.

Kain Init:

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);
M. Reza Nasirloo
sumber
Apa tujuan ext.enableCrashlyticsdan ext.alwaysUpdateBuildIdkarena mereka tampaknya tidak dirujuk di mana pun. Apakah saya melewatkan sesuatu?
jules
@jules Ada di dokumen docs.fabric.io/android/crashlytics/build-tools.html
M. Reza Nasirloo
BuildConfig.BUILD_TYPE_DEBUG adalah mubazir, BuildConfig.DEBUG dapat digunakan untuk mendapatkan nilai yang sama
Antonis Radz
@AntonisRadz Karena saya membutuhkan rilis rilis yang dapat
diperdebatkan
1

Kita dapat menggunakan metode fabric isDebuggable ().

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

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

Selamat coding :)

sadiq
sumber
1

Anda dapat menggunakan file manifes khusus untuk mode debug (berfungsi untuk saya dengan Crashlytics 2.9.7):

Buat file app/src/debug/AndroidManifest.xmldan tambahkan berikut ini:

<application>

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

</application>

Perhatikan bahwa elemen meta-data ini harus dimasukkan ke debug / AndroidManifest.xml saja , dan tidak ke dalam AndroidManifest.xml biasa

Solusi yang menggunakan CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()tidak bekerja untuk saya, dan saya menemukan bahwa crashlytics diinisialisasi oleh CrashlyticsInitProvider sebelum Application.onCreate () dipanggil atau aktivitas apa pun dimulai, yang berarti bahwa menginisialisasi secara manual kain dalam aplikasi atau aktivitas tidak memiliki efek karena kain sudah diinisialisasi.

josias
sumber
1

Langkah 1: Di build.grade

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

Langkah 2: Dalam manifes

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

Langkah 3: Dalam Aplikasi atau Aktivitas pertama

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

Saya tidak yakin jika langkah 3 diperlukan, tetapi untuk memastikan versi rilisnya harus bekerja tanpa crash. sumber: https://firebase.google.com/docs/crashlytics/customize-crash-reports#enable_opt-in_reporting

thanhbinh84
sumber
1

Ini bekerja untuk saya:

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

dan di buildTypes:

debug {
ext.enableCrashlytics = false
}
Amirhosein Heydari
sumber
Bagaimana dengan penggunaan kode Crashlytics? Ini akan memberi Anda kesalahan kompilasi.
Micer
1

Ada dua opsi untuk menonaktifkan Firebase Crashlytics untuk versi com.google.firebase berikut: firebase-crashlytics: 17.0.0:

  1. Tambahkan meta-tag ke Manifes aplikasi

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

ATAU

  1. Konfigurasikan langsung di aplikasi (perlu diingat ketika disetel ke false, nilai baru tidak berlaku hingga aplikasi berikutnya dijalankan)

FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)

Viktor Ivanov
sumber
0

Cara lain jika Anda hanya ingin melakukannya di IDE Anda adalah dengan keluar dari plugin. Tampaknya itu akan berhenti mengirim laporan saat Anda membuat bangunan tanpa masuk lagi.

neteinstein
sumber
0
  1. Tambahkan ini ke build.gradle aplikasi Anda:

    android {
        buildTypes {
            debug {
              // Disable fabric build ID generation for debug builds
              ext.enableCrashlytics = false
              ...
  2. Nonaktifkan kit Crashlytics saat runtime. Kalau tidak, kit Crashlytics akan melempar kesalahan:

    // 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. Di AndroidManifest.xml, tambahkan

    <meta-data
    android:name="firebase_crashlytics_collection_enabled"
    android:value="false" />
100rbh
sumber
0

2020 Post Fabric Menjawab

Rekatkan kode di bawah ini di kelas Aplikasi Anda dan panggil metode setCrashlyticsStatedari aplikasi Anda onCreate. Anda dapat menambahkan Id perangkat uji kedebugDevices HashSet juga sehingga perangkat pribadi Anda dapat diabaikan, bahkan ketika membangun dalam mode rilis.

Catatan. Id perangkat yang dikembalikan oleh Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);tidak dijamin unik atau konstan (Ini dapat berubah pada pengaturan ulang pabrik atau secara manual pada perangkat yang di-root). Tetapi itu harus cukup baik.

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

Periksa BuildConfig itu. sedang melihat kelas BuildConfig yang benar. Sering ada beberapa opsi dan yang salah bisa diseret.

Will Calderwood
sumber
-8

Ini adalah jawaban konyol, saya tahu
Just comment out Fabric.with(this, new Crashlytics());, kerjakan itu dan batalkan komentar ketika Anda ingin melepaskannya.

Tej42
sumber