Android Fabric Crashlytics Native 程式碼符號表
簡介
Crashlytics 支援捕獲Native層的異常並上報,ofollow,noindex">官網的文件 有具體而詳細的教程。但是在符號表這一塊兒,說的比較簡單,雖然給出了上傳符號表的方法,但是對於符號表的管理這一塊沒有給出解釋和說明。
符號表
首先我們要弄明白符號表是什麼?接觸過Native開發的應該有經驗,當Native發生崩潰的時候,在Logcat中呈現的log很多都是各種記憶體地址,Native堆疊很多也是以記憶體地址的形式體現的。像0x7f04661c9c
等,這些堆疊我們並不能獲取有效資訊,定位Crash。而符號表就是幫助我們解析這些堆疊資訊的,經過符號表的解析,這個記憶體地址會定位到某個cpp檔案的某一行,這樣子的堆疊對我們才是有意義的。
符號表的生成與上傳
Fabric對Android+Studio/">Android Studio 提供了外掛,根據官網的引導,在需要上傳符號表的module的gradle檔案裡面加上apply plugin : ‘io.fabric’
和crashlytics {enableNdk = true}
。之後,會生成6個新的task:
crashlyticsGenerateSymblosDebug crashlyticsCacheSymblosDebug crashlyticsUploadSymblosDebug crashlyticsGenerateSymblosRelease crashlyticsCacheSymblosRelease crashlyticsUploadSymblosRelease
分別是生成、快取、上傳符號表的,Debug和Release各三個。每次構建之後,只需要執行上傳的任務就可以了,因為上傳會觸發構建和快取。
符號表與版本的關係
為了驗證符號表和版本的對應關係,我寫了一個直接在Native觸發崩潰的測試程式碼,點選按鈕之後就會產生一次Native的Crash。經過多次實驗,得到結論如下:
- Debug 和 Release符號表不通用。
- 符號表必須在崩潰產生之前上傳,上傳之前統計的崩潰不能按照符號表進行解析,因此建議大家構建aar或者apk之後馬上按需上傳符號表。
- 符號表和版本的對映好像是構建時,我拿同樣的程式碼跑了兩次,第二次如果不重新上傳符號表,還是無法解析。
- 不同版本aar或apk不用擔心符號表覆蓋等問題。即:fabric會記錄不同構建對應的符號表,後構建不會對先構建的產生影響。
- 針對3的實驗,發現不同的符號表解析之後如果堆疊相同,在fabric的dashboard裡面會合並展示。
針對以上內容,建議大家把上傳符號表的任務加在構建完成之後執行。
一點自己的見解,歡迎大家交流指導。