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
android
crashlytics
twitter-fabric
Michael
sumber
sumber
Manifest
crash aplikasi jadi ini membuat pertanyaan sedikit lebih sah.Jawaban:
Marc dari Crashlytics di sini. Berikut adalah beberapa cara untuk menonaktifkan Crashlytics saat Anda melakukan build debug Anda!
Gunakan android yang berbeda: versionString untuk debug dan rilis build dan kemudian nonaktifkan pelaporan kerusakan dari dasbor web Crashlytics untuk versi debug.
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"?
sumber
BuildConfig.DEBUG
harus digunakan jika Anda membangun menggunakan Gradle. Itu akan selalu dihasilkan dengan benar.BuildConfig.DEBUG
?Saya menemukan solusi dari Crashlytics (dengan integrasi Fabric)
Masukkan kode berikut di dalam kelas Aplikasi Anda
onCreate()
EDIT:
Dalam Crashalitics 2.3 dan di atasnya, ini sudah usang. Kode yang benar adalah:
atau
(disalin dari metode usang Crashlytics dinonaktifkan () )
EDIT2:
Anda juga dapat menambahkan ini secara opsional
buildType
di 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.sumber
ext.enableCrashlytics = false
tidak bekerja untuk saya dengan 2,5. Sebenarnya, itu tidak pernah berhasil. Bahkan sebelum Kain.Jawaban yang dipilih tidak benar lagi. Google mengubah integrasi Crashlytics. Versi saya saat ini adalah
2.9.1
dan satu-satunya hal yang harus saya lakukan adalah menambahkanimplementation '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:
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:
Lalu buka Manifest Anda dan tambahkan
meta-data
tag berikut di dalamapplication
tag:Tambahkan ke Aktivitas Peluncuran Anda (hanya diperlukan satu kali, tidak setiap Aktivitas)
Ini hanya akan mengaktifkan Crashlytics dalam versi rilis. Hati-hati, juga periksa untuk BuildConfig.DEBUG ketika Anda mengkonfigurasi Crashlytics, misalnya:
sumber
Enable collection for selected users by initializing Crashlytics from one of your app's activities
tapi 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-reportsfirebase_crashlytics_collection_enabled
ke false dalam manifes, crash tidak muncul di konsol (saya menggunakan v2.9.9). Jadi saya memperbaiki ini dengan menambahkan manifes terpisah untuk debug build denganfirebase_crashlytics_collection_enabled=false
dantrue
untuk rilisJika Anda menggunakan Gradle, tambahkan saja ini ke rasa:
sumber
This app relies on Crashlytics.
"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,sumber
This app relies on Crashlytics. Please sign up for access at
ext.enableCrashlytics = false
di build.gradle.buildTypes -> debug, also i'm applying the plugin via
plugin apply: 'io.fabric'`This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up
Saya menemukan ini sebagai solusi termudah:
Baris di atas akan membuat bidang boolean statis yang disebut
enableCrashlytics
dalamBuildConfig
file yang dapat Anda gunakan untuk memutuskan apakah akan memulaiFabric
atau tidak: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
Crashlytics
kelas diif
blok yang memeriksa apakah Fabric telah diinisialisasi seperti yang ditunjukkan di bawah ini.Kalau tidak, aplikasi akan crash dengan
Must Initialize Fabric before using singleton()
kesalahan saat menguji pada emulator.sumber
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
Crashlytics
metode apa pun pada debug build, aplikasi akan macet .app / build.gradle
AndroidManifest.xml
PILIHAN 2
Alternatif jika itu memungkinkan Anda memanggil
Crashlytics
metode tanpa memeriksaBuildConfig.DEBUG
terlebih 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
AndroidManifest.xml
Aplikasi onCreate ()
sumber
android:value="false"
harus diubah menjadiandroid:value="${enableCrashlytics}"
. Bukan?Gunakan ini di
MyApplication#onCreate()
EDIT Jika Anda meningkatkan ke Fabric, gunakan jawaban ini sebagai gantinya.
sumber
BuildConfig
dihasilkan oleh tugas Gradle, yang dijamin untuk dijalankan. Saya juga menggunakanbuildConfigField
untuk mengatur bidang khusus dan yang selalu berfungsi. tools.android.com/recent/androidstudio045 dirilis juga menyarankan agar Anda gunakanBuildConfig.DEBUG
.Per google menggunakan kode ini untuk menonaktifkan Crashlytics dan itu juga akan meningkatkan proses pembangunan.
referensi- https://developer.android.com/studio/build/optimize-your-build
sumber
Solusi sederhana lain yang saya suka, karena tidak memerlukan file manifes yang berbeda:
Langkah 1 - tentukan placeholder nyata dalam build.gradle
Langkah 2 - gunakan di AndroidManifest.xml Anda
sumber
Perhatikan bahwa Anda juga dapat menonaktifkan pengunggahan simbol yang mengganggu di debug build:
Masukkan saja ke dalam
build.gradle
modul aplikasi Anda.sumber
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:
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
sumber
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.
sumber
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 .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.
sumber
Versi terbaru dan termudah saat menggunakan Gradle untuk membangun:
Itu menggunakan Sintaks Built-In baru dari Fabric untuk Crashlytics dan bekerja secara otomatis dengan membangun Gradle.
sumber
Masalah aneh yang saya temui: Saya mengikuti jawaban xialin (yang juga muncul di situs web resmi) dan tidak berhasil. Ternyata saya referensi
BuildConfig
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:
Dan bukan ini:
sumber
Jika Anda khawatir
BuildConfig.DEBUG
tidak diatur dengan benar, gunakanApplicationInfo
sebaliknya:sumber
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 -
sumber
Jika Anda menginginkan versi rilis yang dapat diperdebatkan, inilah caranya:
Ketika Anda mengatur
debuggable true
BuildConfig.DEBUG Anda akan diinisialisasi dengan true, itu sebabnya saya menambahkan variabel itu di kelas BuildConfig.Kain Init:
sumber
ext.enableCrashlytics
danext.alwaysUpdateBuildId
karena mereka tampaknya tidak dirujuk di mana pun. Apakah saya melewatkan sesuatu?Kita dapat menggunakan metode fabric isDebuggable ().
Selamat coding :)
sumber
Anda dapat menggunakan file manifes khusus untuk mode debug (berfungsi untuk saya dengan Crashlytics 2.9.7):
Buat file
app/src/debug/AndroidManifest.xml
dan tambahkan berikut ini: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.sumber
Langkah 1: Di build.grade
Langkah 2: Dalam manifes
Langkah 3: Dalam Aplikasi atau Aktivitas pertama
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
sumber
Ini bekerja untuk saya:
dan di buildTypes:
sumber
Ada dua opsi untuk menonaktifkan Firebase Crashlytics untuk versi com.google.firebase berikut: firebase-crashlytics: 17.0.0:
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
ATAU
FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true)
sumber
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.
sumber
Tambahkan ini ke build.gradle aplikasi Anda:
Nonaktifkan kit Crashlytics saat runtime. Kalau tidak, kit Crashlytics akan melempar kesalahan:
Di AndroidManifest.xml, tambahkan
sumber
2020 Post Fabric Menjawab
Rekatkan kode di bawah ini di kelas Aplikasi Anda dan panggil metode
setCrashlyticsState
dari 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.Periksa BuildConfig itu. sedang melihat kelas BuildConfig yang benar. Sering ada beberapa opsi dan yang salah bisa diseret.
sumber
Ini adalah jawaban konyol, saya tahu
Just comment out
Fabric.with(this, new Crashlytics());
, kerjakan itu dan batalkan komentar ketika Anda ingin melepaskannya.sumber