天天看點

記錄一次解決App崩潰問題的解決方案一、問題背景二、遇到的挑戰三、解決問題的步驟四、問題總結

一、問題背景

我們公司開發了一款App,一部小部分使用者反映在開APP授權通知權限之後會出現閃退的情況,但是我們通過幾台測試機的測試,都無法複現這個問題,比較棘手。

二、遇到的挑戰

由于我們是創業型的公司,沒有太多的預算購買很多種類的測試機,安卓機每個品牌隻有一個型号的測試機,而且系統版本也沒辦法覆寫完全,蘋果機也是一樣的情況。出現閃退的情況,光靠使用者的描述是比較難定位到錯誤的地方,使用者記憶體占用過多?磁盤空間不足?抑或是邏輯上的問題導緻的閃退?而且,我們使用的是混合開發,架構使用的是ionic,大部分頁面和邏輯都是混合開發。由于App涉及到藍牙連接配接相關的SDK和DFU固件更新,而ionic在這一塊沒有封裝相應的接口,是以這部分的内容我們還是通過在原生上面進行開發,再使用ionic去調用原生的内容。這更加增加了debug的難度。

三、解決問題的步驟

為了找到導緻crash的地方,我們先排除掉機器記憶體和磁盤空間不足導緻的問題,我們通過上傳使用者手機的記憶體總大小、剩餘記憶體的大小、磁盤總空間和磁盤剩餘空間,排除掉了這個因素。之後我們就考慮是不是因為代碼邏輯上的一些問題導緻的,于是我們嘗試使用

友盟的U-APM産品

,它裡面有一個很好的崩潰分析工具,可以看到crash的一些資訊,包括錯誤的類型、具體哪一行導緻了報錯、出現的頻率和機器相關的參數,這對我們的debug有很大的幫助,于是我們嘗試安裝友盟的SDK,設定了郵件和釘釘的錯誤提醒,并釋出了新版本APP。兩天後,這部分使用者再次打開App之後,也出現了授權權限之後閃退的情況,與此同時,我們也收到了來自友盟的錯誤提醒郵件和釘釘提醒。點選進去之後發現U-APM幫忙定位了錯誤的地方,如下圖,在MainActivity.java的第93行,出現了ArrayIndexOutOfBoundsException,也就是數組下标超過了數組長度-1,而且具體的crash時間和機器參數也同時總結了出來,幫我們總結了很有用的資訊,我們發現這個現象隻有在榮耀系列的手機裡才會出現,于是我們加強了榮耀系列手機的測試,在一次手動在系統中關閉權限之後打開app的用例中重制了這個問題,也找到了根本的原因,因為當使用者手動關閉某些權限的時候,回調傳回的是一個空數組,而我們去取下标為1的值的時候就會導緻報錯了。

記錄一次解決App崩潰問題的解決方案一、問題背景二、遇到的挑戰三、解決問題的步驟四、問題總結

修複之後我們繼續使用友盟去觀察這個問題有沒有解決,自從修複了這個問題并釋出了新版本之後,就不會再報這個錯了。

四、問題總結

有些時候遇到crash的情況,而且無法複現,作為開發者确實挺頭疼的,使用

,可以幫助我們更快速地定位問題,總結相應的情況,幫助我們更主動地去發現問題、解決問題,進而提高使用者的體驗。

作者:梁立坤