Android日志[进阶篇]四-获取错误报告
Android日志[進(jìn)階篇]一-使用 Logcat 寫(xiě)入和查看日志
Android日志[進(jìn)階篇]二-分析堆棧軌跡(調(diào)試和外部堆棧)
Android日志[進(jìn)階篇]三-Logcat命令行工具
Android日志[進(jìn)階篇]四-獲取錯(cuò)誤報(bào)告
Android日志[進(jìn)階篇]五-閱讀錯(cuò)誤報(bào)告
目錄
- 前言
- 從設(shè)備上獲取錯(cuò)誤報(bào)告
- 從 Android 模擬器上獲取錯(cuò)誤報(bào)告
- 使用 adb 獲取錯(cuò)誤報(bào)告
- 檢查錯(cuò)誤報(bào)告 ZIP 文件
- 從用戶(hù)那里獲取報(bào)告
- 騰訊Bugly
- 友盟
- Google Play 管理中心
- Firebase 崩潰報(bào)告
前言
大多數(shù)人都習(xí)慣斷點(diǎn)調(diào)試,斷點(diǎn)復(fù)現(xiàn),但往往效率低下且面對(duì)上線后出現(xiàn)的問(wèn)題無(wú)從下手,本文介紹錯(cuò)誤日志的獲取,logcat之外的日志,也就是線上運(yùn)行日志或用戶(hù)設(shè)備的日志。
錯(cuò)誤報(bào)告包含設(shè)備日志、堆棧軌跡和其他診斷信息,可以幫助我們查找和修復(fù)應(yīng)用中的錯(cuò)誤。通過(guò)以下幾種方式可以從設(shè)備上獲取錯(cuò)誤報(bào)告:使用設(shè)備上的生成錯(cuò)誤報(bào)告開(kāi)發(fā)人員選項(xiàng)、Android 模擬器菜單或開(kāi)發(fā)機(jī)器上的 adb bugreport 命令。
圖 1. 開(kāi)發(fā)人員選項(xiàng)
如需生成錯(cuò)誤報(bào)告,必須在設(shè)備上啟用開(kāi)發(fā)者選項(xiàng),以便訪問(wèn)生成錯(cuò)誤報(bào)告(提交錯(cuò)誤報(bào)告)選項(xiàng)。
從設(shè)備上獲取錯(cuò)誤報(bào)告
圖 2. 錯(cuò)誤報(bào)告已準(zhǔn)備就緒
如需直接從設(shè)備上獲取錯(cuò)誤報(bào)告,請(qǐng)執(zhí)行以下操作:
接著收集并提取相關(guān)的錯(cuò)誤報(bào)告,可以從狀態(tài)欄中看到這個(gè)過(guò)程,也可以重新命名報(bào)告的最終文件名,稍后,便會(huì)收到錯(cuò)誤報(bào)告已準(zhǔn)備就緒的通知(參見(jiàn)圖 2)。
從 Android 模擬器上獲取錯(cuò)誤報(bào)告
在 Android 模擬器中,使用“Extended controls”窗口中的 File a bug 功能:
在 Extended controls 窗口中,選擇左側(cè)的 Bug report。
此時(shí)系統(tǒng)會(huì)打開(kāi)一個(gè)屏幕,可以在其中查看錯(cuò)誤報(bào)告詳細(xì)信息,例如屏幕截圖、AVD 配置信息和錯(cuò)誤報(bào)告日志。還可以輸入一條包含重現(xiàn)步驟的消息,以便與報(bào)告一起保存。
等待錯(cuò)誤報(bào)告完成收集,然后點(diǎn)擊 Save Report。
使用 adb 獲取錯(cuò)誤報(bào)告
如果只連接了一臺(tái)設(shè)備,則可以使用 adb 獲取錯(cuò)誤報(bào)告,如下所示:
$ adb bugreport E:\Reports\MyBugReports如果沒(méi)有指定錯(cuò)誤報(bào)告的路徑,系統(tǒng)會(huì)將其保存到本地目錄。
如果連接了多臺(tái)設(shè)備,則必須使用 -s 選項(xiàng)指定設(shè)備。運(yùn)行以下 adb 命令可獲取設(shè)備序列號(hào)并生成錯(cuò)誤報(bào)告。
$ adb devicesList of devices attached
emulator-5554 device 8XV7N15C31003476 device $ adb -s 8XV7N15C31003476 bugreport檢查錯(cuò)誤報(bào)告 ZIP 文件
默認(rèn)情況下,ZIP 文件稱(chēng)為 bugreport-BUILD_ID-DATE.zip (bugreport-ANE-AL00-HUAWEIANE-AL00-2021-09-10-17-00-09.zip),它可能會(huì)包含多個(gè)文件,但最重要的文件是 bugreport-BUILD_ID-DATE.txt (bugreport-ANE-AL00-HUAWEIANE-AL00-2021-09-10-17-00-09.txt)。此文件就是錯(cuò)誤報(bào)告,它包含系統(tǒng)服務(wù) (dumpsys)、錯(cuò)誤日志 (dumpstate) 和系統(tǒng)消息日志 (logcat) 的診斷輸出。系統(tǒng)消息包括設(shè)備拋出錯(cuò)誤時(shí)的堆棧軌跡,以及從所有應(yīng)用中使用 Log 類(lèi)寫(xiě)入的消息。
ZIP 文件中有一個(gè) version.txt 元數(shù)據(jù)文件,其中包含 Android 版本號(hào),而且啟用 systrace 后,ZIP 文件中還會(huì)包含 systrace.txt 文件。Systrace 工具 可以獲取并顯示應(yīng)用進(jìn)程和其他 Android 系統(tǒng)進(jìn)程的執(zhí)行時(shí)間,從而幫助分析應(yīng)用的性能。
dumpstate 工具會(huì)將文件從設(shè)備的文件系統(tǒng)復(fù)制到 ZIP 文件的 FS 文件夾下,以便引用它們。例如,設(shè)備中的 /dirA/dirB/fileC 文件會(huì)在 ZIP 文件中生成 FS/dirA/dirB/fileC 條目。
圖 3. 錯(cuò)誤報(bào)告文件結(jié)構(gòu)
如需了解詳情,請(qǐng)參閱Android日志[進(jìn)階篇]五-閱讀錯(cuò)誤報(bào)告。
從用戶(hù)那里獲取報(bào)告
如上所述,開(kāi)發(fā)者使用應(yīng)用時(shí),獲取錯(cuò)誤報(bào)告非常有用,但最終用戶(hù)無(wú)法輕松地與您分享這些類(lèi)型的錯(cuò)誤報(bào)告。如需從真實(shí)用戶(hù)那里獲取包含堆棧軌跡的崩潰報(bào)告,應(yīng)該利用 Google Play 和 Firebase 的崩潰報(bào)告功能。國(guó)內(nèi)一般使用騰訊bugly和友盟的sdk完成。
騰訊Bugly
支持android 和ios ,文檔入口 ,app 需要集成Bugly的SDK,文檔有關(guān)于android studio和eclipse的集成說(shuō)明,同時(shí)支持離線sdk和遠(yuǎn)程倉(cāng)庫(kù)的依賴(lài),請(qǐng)更新需要進(jìn)行選擇。集成完成以后留意bugly的應(yīng)用運(yùn)行情況,可以查看到崩潰記錄以及堆棧信息。
友盟
也支持android 和ios,文檔入口-應(yīng)用性能監(jiān)控 U-APM,app也需要集成友盟的sdk后進(jìn)行發(fā)布。當(dāng)然需要的帳號(hào)需要各位自行去了解和申請(qǐng)。
Google Play 管理中心
由于各種不方便,這個(gè)國(guó)內(nèi)基本沒(méi)人使用,
可以從 Google Play 管理中心獲取報(bào)告,以便查看從 Google Play 安裝應(yīng)用的用戶(hù)那里收集的有關(guān)崩潰和應(yīng)用無(wú)響應(yīng) (ANR) 錯(cuò)誤的數(shù)據(jù)。可以查看過(guò)去六個(gè)月的數(shù)據(jù)。
如需了解詳情,請(qǐng)參閱 Play 管理中心幫助中心內(nèi)的查看崩潰和應(yīng)用無(wú)響應(yīng) (ANR) 錯(cuò)誤。
Firebase 崩潰報(bào)告
Firebase Crashlytics 報(bào)告會(huì)創(chuàng)建有關(guān)應(yīng)用中出現(xiàn)的錯(cuò)誤的詳細(xì)報(bào)告。此報(bào)告會(huì)基于錯(cuò)誤是否具有相似堆棧軌跡將其分門(mén)別類(lèi),并根據(jù)錯(cuò)誤對(duì)用戶(hù)所產(chǎn)生影響的嚴(yán)重程度進(jìn)行分級(jí)。除自動(dòng)發(fā)送的報(bào)告外,您還可以通過(guò)記錄自定義事件獲知導(dǎo)致應(yīng)用崩潰的操作。
需<將 Firebase 依賴(lài)項(xiàng)添加到 build.gradle 文件,即可開(kāi)始接收用戶(hù)發(fā)送的崩潰報(bào)告。如需了解詳情,請(qǐng)參閱 Firebase Crashlytics。
總結(jié)
以上是生活随笔為你收集整理的Android日志[进阶篇]四-获取错误报告的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: apache缺省banner_http服
- 下一篇: 背景图层和普通图层的区别_图层样式(一)