Firebase Crashlytics — то је Google сервис за прикупљање, груписање и анализу отказа мобилних апликација у реалном времену. SDK аутоматски пресреће необрађене изузетке, крашеве native кода и ANR сигнале, формирајући детаљан извештај са праћењем стека, стањем уређаја и логовима. Према подацима Google, 2026, Crashlytics се користи у више од 4 милиона апликација широм света. Услуга се пружа бесплатно са лимитом од 500 хиљада сесија дневно по пројекту.
Главне тачке
Firebase Crashlytics — то је бесплатни Google сервис за праћење стабилности мобилних апликација, који је Google купио 2017. године заједно са компанијом Fabric. Crashlytics аутоматски прикупља информације о сваком отказу апликације, групише идентичне крашеве по потпису стека и приказује их у Firebase конзоли са приоритизацијом према броју погођених корисника.
Crashlytics је покренут 2011. године као део платформе Fabric и брзо је постао де факто стандард за извештавање о крашевима у iOS-у. Након куповине од стране Google-а 2017. године за процењених 2 милијарде долара (цео Fabric), Crashlytics је интегрисан у Firebase SDK. Верзија 18.0.0 (2021) додала је подршку за Kotlin Multiplatform, а верзија 19.0.0 (2024) — аутоматско прикупљање ANR-а на Android-у без додатне конфигурације. Према подацима Google-а (2026), Crashlytics обрађује више од 10 милијарди крашева месечно.
Crashlytics се пружа бесплатно са лимитом од 500 хиљада сесија дневно по пројекту Firebase. За већину апликација ово је довољно — према подацима Google-а (2026), 95% пројеката не прелази лимит. При прекорачењу, прикупљање података не престаје, али се извештаји не ажурирају до следећег дана. За пројекте са високим оптерећењем доступни су Spark и Blaze тарифи Firebase — Crashlytics остаје бесплатан на оба тарифа, а лимит сесија се рачуна одвојено.
Механизам прикупљања Crashlytics-а се заснива на пресретању изузетака на нивоу платформе и runtime-а. На Android-у, SDK имплементира UncaughtExceptionHandler, који пресреће све нехватане Kotlin и Java изузетке. На iOS-у, Crashlytics користи NSSetUncaughtExceptionHandler за Objective-C/Swift и сопствени Mach хендлер изузетака за крашеве native кода.
Crashlytics разликује пет типова отказа: fatal (фатални крашеви), non-fatal (нефатални изузеци прослеђени ручно), ANR (Android — апликација не одговара), signal (OS сигнали — SIGSEGV, SIGABRT) и OOM (недостатак меморије на iOS-у). Сваки тип обрађује посебан механизам и приказује се у конзоли са одговарајућом ознаком.
| Тип отказа | Платформе | Окидач |
|---|---|---|
| Fatal | Android, iOS | Нехватани изузетак |
| Non-fatal | Android, iOS | Ручни позив Crashlytics.logException() |
| ANR | Android | Нема одговора > 5 секунди |
| Signal | Android, iOS | OS сигнал (SEGV, ABRT, BUS) |
| OOM | iOS | Недостатак меморије |
Сваки Crashlytics извештај садржи исцрпне информације: потпуно праћење стека са именима класа и бројевима линија, верзију апликације (versionName + versionCode), модел уређаја, верзију OS-а, количину слободне меморије, оријентацију екрана и време од покретања. Ако је Firebase Analytics повезан, извештај такође укључује пут последњих 50 догађаја корисника пре отказа — ово је критично за репродукцију краша.
class CrashlyticsHelper {
fun logNonFatal(error: Throwable) {
FirebaseCrashlytics.getInstance()
.log("Non-fatal: user action = payment_failed")
FirebaseCrashlytics.getInstance()
.recordException(error)
}
fun setUserContext(userId: String) {
FirebaseCrashlytics.getInstance()
.setUserId(userId)
FirebaseCrashlytics.getInstance()
.setCustomKey("subscription", "premium")
}
}
Повезивање Crashlytics-а са Android апликацијом захтева додавање две зависности у build.gradle и подешавање Google Services прикључка. SDK аутоматски активира извештавање о крашевима при иницијализацији Firebase-а без додатног кода. За исправан рад такође су потребни прикључак google-services и датотека google-services.json из Firebase конзоле.
// build.gradle (project-level)
plugins {
id "com.google.gms.google-services" version "4.4.0"
}
// build.gradle (app-level)
plugins {
id "com.google.firebase.crashlytics"
}
dependencies {
implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
implementation("com.google.firebase:firebase-crashlytics-ktx")
implementation("com.google.firebase:firebase-analytics-ktx")
}
Прикључак com.google.firebase.crashlytics обавља два задатка: генерише јединствени идентификатор верзије (build ID) за мапирање замућених стекова и аутоматски креира ресурсе за Crashlytics SDK. Без прикључка, крашеви ће бити означени као „unmapped" — видећете само замућена имена класа (a.b.c) без могућности проналаска изворног кода. Прикључак се додаје у коренски build.gradle и у build.gradle модула апликације.
За тестирање интеграције Crashlytics-а користи се посебна метода forceCrash(), која генерише тестни изузетак. У production верзијама ова метода није доступна. Након покретања тестног краша, извештај се појављује у Firebase конзоли у року од 1-5 минута. Ако се извештај не приказује — проверите да google-services.json одговара пакету апликације и да у AndroidManifest-у нема заставица које искључују прикупљање података.
Crashlytics конзола пружа два нивоа прегледа: листу свих крашева (Issues) са груписањем по типу отказа и детаљан извештај за сваки Issue са праћењем, статистиком и корисничким подацима. Сваки Issue обједињује све крашеве са истим потписом — истим типом изузетка и одговарајућим праћењем стека.
Груписање крашева — кључна карактеристика Crashlytics-а. Уместо да приказује хиљаде појединачних крашева, услуга их обједињује у Issues на основу fingerprint-а — контролне суме праћења стека. Један Issue може садржати од 1 до неколико милиона крашева. За сваки Issue се приказују: број фаталних случајева, број јединствених корисника, верзија апликације у којој се краш појавио и проценат корисника који су наишли на проблем.
Према подацима Google-а (2026), у просеку 20% Issues-а чини 80% свих фаталних крашева апликације (Парето принцип). Crashlytics аутоматски сортира Issues по озбиљности — што је више корисника погођено, то је виши приоритет. Ово омогућава програмеру да прво поправи најмасовније проблеме.
Crashlytics прати стабилност сваке верзије апликације посебно. Графикон crash-free users приказује проценат корисника који нису наишли на фатални краш у свакој верзији. Ако при ажурирању проценат падне испод прага (подразумевано 99%), Crashlytics шаље обавештење путем е-поште и у Firebase Console. Ово омогућава брзо повлачење проблематичне верзије или издавање hotfix-а.
Crashlytics пружа три механизма за обогаћивање извештаја контекстом: корисничке кључеве (keys) за структуриране податке, логове (logs) за текстуално праћење и Breadcrumbs из Analytics-а за пут корисника. Све три врсте података се прикачују извештају о крашу и видљиве су у његовој детаљној картици.
Custom Keys — то су парови „кључ-вредност" који се преносе заједно са сваким крашем. Максимално 64 кључа по апликацији, сваки кључ — низ дужине до 1024 карактера. Кључеви су погодни за означавање стања апликације: ниво претплате, статус ауторизације, последњи екран, да ли је VPN укључен. Вредности се преписују — нови кључ са истим именом замењује стари.
Custom Logs — то су текстуалне поруке које Crashlytics чува у кружном баферу величине 64 KB. Логови се аутоматски прикачу следећем крашу. Ако се краш не догоди — логови се не преносе на сервер (не троше саобраћај). Логовање се користи за бележење корака корисника пре отказа: „payment_processing_started", „api_call_initiated", „response_received_200".
class PaymentViewModel {
fun processPayment(amount: Double) {
FirebaseCrashlytics.getInstance().log("Payment started: amount=$amount")
FirebaseCrashlytics.getInstance().setCustomKey("last_screen", "payment_screen")
FirebaseCrashlytics.getInstance().setCustomKey("subscription_tier", "basic")
try {
paymentGateway.charge(amount)
} catch (e: NetworkException) {
FirebaseCrashlytics.getInstance().recordException(e)
}
}
}
Ако је у пројекту повезан Firebase Analytics, Crashlytics аутоматски добија Breadcrumbs — последњих 50 аналитичких догађаја пре краша. Сваки breadcrumb садржи назив догађаја и његове параметре. Ово омогућава реконструкцију тачног низа радњи које су довеле до отказа: корисник је отворио екран → додао производ → прешао на плаћање → догодио се краш. Breadcrumbs се приказују у картици Issue на посебној картици „Logs".
Crashlytics је најефикаснији уз правилно подешавање контекста и процеса обраде Issues-а. Пракса показује да тимови који су увели правила рада са крашевима смањују време поправке критичних грешака за 60% (подаци Google-а, 2026).
Нису сви крашеви подједнако важни. Приоритизација по броју корисника и учесталости појављивања помаже да се фокусирате на најкритичније проблеме. Правило: поправљајте Issues који погађају више од 0.1% корисника у року од 24 сата. Issues са појединачним појављивањима (< 0.01%) могу се одложити до следећег планираног издања. Crashlytics аутоматски означава регресије — Issues који су поправљени, али су се поново појавили у новој верзији.
Crashlytics API омогућава интеграцију извештаја о отказима у CI/CD pipeline путем REST API-ја или Firebase CLI-ја. При сваком новом издању можете аутоматски проверити да ли проценат crash-free users не прелази праг. Ако је праг прекорачен — CI/CD блокира постављање и шаље обавештење тиму. Firebase CLI подржава команду firebase crashlytics:builds:upload за отпремање ProGuard/R8 датотека мапирања — без њих стекови ће бити нечитљиви.
Према подацима Google-а (2026), апликације које користе аутоматску проверу crash-free прагова у CI/CD-у испоручују 40% мање регресија у production. Препоручени праг: crash-free users >= 99.5% за критична издања и >= 99.0% за обична.
Често постављана питања
Crashlytics је бесплатан до 500 хиљада сесија дневно по Firebase пројекту. При прекорачењу, извештаји престају да се ажурирају до следећег дана, али прикупљање података не престаје.
Crashlytics ради без Analytics-а, али са њим извештаји садрже Breadcrumbs — последњих 50 догађаја корисника пре краша. Препоручује се повезивање оба модула.
Груписање се врши по fingerprint-у — контролној суми праћења стека укључујући типове изузетака и бројеве линија. Крашеви са истим fingerprint-ом доспевају у један Issue.
Проверите подешавања: датотеку google-services.json, присуство crashlytics прикључка у build.gradle, одсуство филтрирања по верзији у конзоли и постојање верзије која је прихватила лиценцни уговор. Отклањање грешака ради само у release верзијама.
Да, користите recordException() за нефаталне изузетке. Такви извештаји не прекидају рад апликације, али се приказују у конзоли са бројачем појављивања и комплетним праћењем стека.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође