本頁提供疑難排解說明,以及常見問題的解答
有關使用 Crashlytics 的問題。如果發生以下情況:
找不到所需資訊或需要其他協助,請
Firebase 支援。
一般疑難排解/常見問題
未顯示
未發生當機情形的指標和/或當機風險驟升快訊
如果沒有看到未發生當機情形的指標 (例如未發生當機情形的使用者和工作階段),
和/或當機風險驟升快訊
Crashlytics SDK v18.6.0 以上版本 (或 Firebase BoM v32.6.0 以上版本)。
未顯示導覽標記記錄
如果沒有看到資訊主頁
導覽標記記錄
建議您檢查應用程式的 Google Analytics 設定。
請確認你符合下列規定:
為什麼只有 ANR 事件?
是否會回報 Android 11 以上版本?
Crashlytics 支援從執行的裝置中,為 Android 應用程式回報 ANR 情形
Android 11 以上版本。我們用來收集 ANR 的基礎 API
(get HistoryProcessExitReasons)。
比 SIGQUIT 或監控法方法可靠。這個 API
僅適用於 Android 11 以上版本裝置。
為何缺少部分 ANR 情形
他們的BuildId
?
如果部分 ANR 缺少 BuildId
,請按照下列步驟排解問題:
請確保您使用的是最新版的 Crashlytics Android SDK
Crashlytics Gradle 外掛程式版本。
如果缺少適用於 Android 11 和部分 Android 12 ANR 的 BuildId
,則
您使用的可能是舊版 SDK 和/或 Gradle 外掛程式。
如要正確收集這些 ANR 的 BuildId
,您必須使用以下程式碼
版本:
- Crashlytics Android SDK v18.3.5 以上版本 (Firebase BoM 31.2.2 以上版本)
- Crashlytics Gradle 外掛程式 2.9.4 以上版本
確認共享相片庫是否使用非標準位置。
如果只有應用程式的共用程式庫缺少 BuildId
,可能
您未使用共用程式庫的標準預設位置。如果
在此情況下,Crashlytics
相關聯的 BuildId
。建議您考慮使用
共享圖書館的位置資訊
請確保在建構過程中,並未移除 BuildId
。
請注意,下列疑難排解提示同時適用於 ANR 與原生環境
當機。
在二進位檔上執行 readelf -n
,檢查 BuildId
是否存在。如果
缺少 BuildId
,然後將 -Wl,--build-id
新增至
建構系統
確認您沒有刻意移除 BuildId
縮減 APK 大小
如果保留了移除和未移除的程式庫版本,請務必
指向程式碼中正確的版本
相異處
檢視「Crashlytics」資訊主頁中的 ANR 報告,以及
Google Play 管理中心
Google Play 和 Google Play 之間的 ANR 次數可能不一致
Crashlytics。這是正常現象,原因是
以及收集及回報 ANR 資料「Crashlytics」會在應用程式發生時回報 ANR
Android Vitals 會在 ANR 發生後傳送 ANR 資料
此外,Crashlytics 只會顯示在執行
以 Android 11 以上版本顯示,與 Google Play 相比,Google Play 會顯示
已接受 Google Play 服務和資料收集同意聲明。
相異處
Crashlytics 資訊主頁和 Logcat 中的 NDK 堆疊追蹤之間
LLVM 和 GNU 工具鍊具有不同的唯讀預設值和處理方式
這可能會產生不一致的堆疊追蹤
,Firebase。為了避免這種情況,請新增下列連結器標記
加入建構程序:
如果您仍發現堆疊追蹤不一致,或是
相關做法,請嘗試將以下內容新增到建構程序
請改採以下做法:
-fno-omit-frame-pointer
使用方式
我自己的 NDK 符號檔產生器二進位檔?
Crashlytics 外掛程式隨附
自訂 Breakpad 符號檔案產生器。
若您偏好使用自己的二進位檔產生 Breakpad 符號檔案 (適用於
例如,如果您想在建構鏈結中建構所有原生執行檔
來源),請使用選用的 symbolGeneratorBinary
擴充功能屬性來指定
執行檔的路徑
您可以指定 Breakpad 符號檔案產生器二進位檔的路徑
即可:
選項 1:透過 firebaseCrashlytics
指定路徑
build.gradle
檔案中的副檔名
請將以下內容加入應用程式層級的 build.gradle.kts
檔案:
Gradle 外掛程式 3.0.0 以上版本
android {
buildTypes {
release {
configure<CrashlyticsExtension> {
nativeSymbolUploadEnabled = true
// Add these optional fields to specify the path to the executable
symbolGeneratorType = "breakpad"
breakpadBinary = file("/PATH/TO/BREAKPAD/DUMP_SYMS")
}
}
}
}
舊版外掛程式
android {
// ...
buildTypes {
// ...
release {
// ...
firebaseCrashlytics {
// existing; required for either symbol file generator
nativeSymbolUploadEnabled true
// Add this optional new block to specify the path to the executable
symbolGenerator {
breakpad {
binary file("/PATH/TO/BREAKPAD/DUMP_SYMS")
}
}
}
}
}
方法 2:透過 Gradle 的屬性行指定路徑
屬性檔案
您可以使用 com.google.firebase.crashlytics.breakpadBinary
屬性來指定執行檔的路徑。
您可以手動更新 Gradle 屬性檔案或更新檔案
建立服務帳戶舉例來說,如要透過指令
行,請使用如下所示的指令:
./gradlew -Pcom.google.firebase.crashlytics.symbolGenerator=breakpad \
-Pcom.google.firebase.crashlytics.breakpadBinary=/PATH/TO/BREAKPAD/DUMP_SYMS \
app:assembleRelease app:uploadCrashlyticsSymbolFileRelease
無法在以下應用程式發生當機問題:
Dexguard
如果看到以下例外狀況,表示您使用的可能是
與 Firebase Crashlytics SDK 不相容的 DexGuard:
java.lang.IllegalArgumentException: Transport backend 'cct' is not registered
這個例外狀況不會使應用程式當機,但會導致應用程式傳送當機
報表。修正方法如下:
請確認您使用的 DexGuard 8.x 最新版本。最新版本
包含 Firebase Crashlytics SDK 所需的規則。
如果您不想變更 DexGuard 版本,請嘗試新增下列指令
加入模糊處理規則 (在 DexGuard 設定檔中):
-keepresourcexmlelements manifest/application/service/meta-data@value=cct
為什麼我會看到當機問題
要從 .kt
個檔案標示為 .java
個問題嗎?
如果應用程式使用不會公開副檔名的模糊處理工具,
根據預設,Crashlytics 會產生每個問題,且副檔名為 .java
。
以便 Crashlytics 產生正確的副檔名問題
請確認您的應用程式使用下列設定:
- 使用 Android Gradle 4.2.0 以上版本
- 使用 R8 並開啟模糊處理功能。如要將應用程式更新為 R8,請按照下列步驟操作
說明文件。
請注意,在更新到上述設定後,您可能會開始看到
新的「.kt
」問題與現有的 .java
問題重複。詳情請參閱
如要進一步瞭解相關情況,請參閱常見問題。
為什麼我會看到
有 .kt
個問題與現有問題重複
有 .java
個問題嗎?
自 2021 年 12 月中旬起,Crashlytics 已改善申請流程
而且這些函式都使用 Kotlin
不久之前,可用的模糊處理工具並未公開副檔名,因此
根據預設,Crashlytics 產生每個問題,且副檔名為 .java
。
不過,自 Android Gradle 4.2.0 起,R8 可支援副檔名。
本次更新後,Crashlytics 現在可以判斷
應用程式以 Kotlin 編寫,並在問題中加入正確的檔案名稱
簽章。當機事件現已正確歸因於 .kt
個檔案 (如適用)
且應用程式的設定如下:
- 您的應用程式使用 Android Gradle 4.2.0 以上版本。
- 您的應用程式使用 R8 並開啟模糊處理功能。
由於新的當機事件現已在問題中加入正確的副檔名
簽名時,你可能會看到新的 .kt
問題,但實際上只是重複
現有「.java
」標籤問題。我們嘗試在 Firebase 控制台中找出
並在新的「.kt
」問題可能與
現有「.java
」標籤問題。
誰可以檢視、撰寫及刪除問題附註?
附註可讓專案成員針對特定問題和狀態提供意見
更新等
專案成員張貼附註時,附註會標示為 Google 的電子郵件
讓他們使用服務帳戶所有專案都能看到這個電子郵件地址與附註
查看附註的成員。
以下說明查看、寫入及刪除所需的存取權
附註:
誰可以檢視、撰寫及刪除問題附註?
附註可讓專案成員針對特定問題和狀態提供意見
更新等
專案成員張貼附註時,附註會標示為 Google 的電子郵件
讓他們使用服務帳戶所有專案都能看到這個電子郵件地址與附註
查看附註的成員。
以下說明查看、寫入及刪除所需的存取權
附註:
整合
應用程式也會使用
Google Mobile Ads 個 SDK,但未取得當機問題
如果專案同時使用 Crashlytics 和 Google Mobile Ads SDK,
當機回報器很可能幹擾
註冊例外狀況處理常式。如要修正問題,請在以下位置關閉當機報告:
呼叫 disableSDKCrashReporting
來升級 Mobile Ads SDK。
我的 BigQuery 資料集位於何處?
將 Crashlytics 連結至 BigQuery 之後,您建立的新資料集
自動定位位於美國,無論您
Firebase 專案。
Crashlytics 是否支援 armeabi?
Firebase Crashlytics NDK 不支援 ARMv5 (armeabi)。
自 NDK r17 起已不再支援這個 ABI。
迴歸問題
什麼是迴歸?
問題?
您先前關閉的問題發生迴歸問題,
問題再次發生時,Crashlytics 會收到新報告。
Crashlytics 會自動重新開啟這些迴歸的問題,讓您
找到適合您的應用程式的問題
以下情境範例將說明 Crashlytics 如何區分
做為迴歸:
- 首次為 Crashlytics 取得關於當機情形的當機報告
「A」。Crashlytics 會開啟與該當機事件對應的問題 (問題「A」)。
- 您很快便修正錯誤、關閉「A」問題,接著發布新版本的
- Crashlytics收到另一份關於問題「A」的報告開啟
問題。
- 如果報表來自Crashlytics 已知的應用程式版本
問題發生時 (代表該版本傳送當機事件)
回報「任何」當機事件),Crashlytics 就不會將
迴歸問題發生時這個問題會維持關閉狀態。
- 如果報表來自Crashlytics 「沒有」的應用程式版本
您回報的問題得知
如果發生任何當機事件,「從未」傳送任何當機報告),則
Crashlytics 會判斷問題已迴歸,並且重新開啟
問題。
,瞭解如何調查及移除這項存取權。
問題迴歸時,我們會傳送迴歸偵測快訊,並新增
顯示出問題信號,讓您知道Crashlytics
再次開啟問題。如果您不希望我們重新開啟問題,請遵守我們的
迴歸演算法「靜音」而不是關閉該問題
為什麼我會看到迴歸問題
是否會發生問題?
如果報告來自舊版應用程式,從未傳送任何當機報告:
在你關閉問題後,Crashlytics 會將問題納入考量
並重新開啟問題。
當有以下情況時,就可能發生這種情況:您已修正錯誤,且
發布新版應用程式,但使用者仍保有舊版應用程式
未修正錯誤如果有,其中其中一個舊版本「從未」傳送過
使用者關閉問題後
遇到錯誤時,這些當機報告就會觸發迴歸問題。
如果您不希望系統因為迴歸演算法而將問題重新開啟,請「靜音」
而不是關閉該問題