將 Unity 遊戲的 Android 當機和 ANR 問題符號化

每當 Android 發生當機和 ANR 事件時,系統就會產生堆疊追蹤,也就是當機之前遊戲呼叫一系列巢狀函式的數據匯報。您可以透過這些數據匯報,找出及修正原始碼中的任何問題。

不過,在發布模式下使用 Unity 建構遊戲時,符號不會與 APK 一併封裝。如果您的遊戲當機或發生 ANR 情形,呼叫堆疊只會顯示記憶體位址。

舉例來說:

05-26 18:06:51.311: A/libc(26986): Fatal signal 11 (SIGSEGV) at 0x000004e4 (code=1), thread 27024 (Worker Thread)
05-26 18:06:51.411: I/DEBUG(242): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
05-26 18:06:51.411: I/DEBUG(242): Build fingerprint: 'Xiaomi/cancro_wc_lte/cancro:4.4.4/KTU84P/V6.7.1.0.KXDCNCH:user/release-keys'
05-26 18:06:51.411: I/DEBUG(242): Revision: '0'
05-26 18:06:51.411: I/DEBUG(242): pid: 26986, tid: 27024, name: Worker Thread  >>> com.u.demo <<<
05-26 18:06:51.411: I/DEBUG(242): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 000004e4
 I/DEBUG(242): backtrace:
 I/DEBUG(242):     #00  pc 006d4960  /data/app-lib/com.u.demo-1/libunity.so
 I/DEBUG(242):     #01  pc 006d4c0c  /data/app-lib/com.u.demo-1/libunity.so
 I/DEBUG(242):     #02  pc 006d4c0c  /data/app-lib/com.u.demo-1/libunity.so
 I/DEBUG(242):     #03  pc 006d4c0c  /data/app-lib/com.u.demo-1/libunity.so
 I/DEBUG(242):     #04  pc 006d4c0c  /data/app-lib/com.u.demo-1/libunity.so
 I/DEBUG(242):     #05  pc 001c5510  /data/app-lib/com.u.demo-1/libunity.so
 I/DEBUG(242):     #06  pc 001c595c  /data/app-lib/com.u.demo-1/libunity.so
 I/DEBUG(242):     #07  pc 001c4ec0  /data/app-lib/com.u.demo-1/libunity.so
 I/DEBUG(242):     #08  pc 0043a05c  /data/app-lib/com.u.demo-1/libunity.so
 I/DEBUG(242):     #09  pc 0000d248  /system/lib/libc.so (__thread_entry+72)
 I/DEBUG(242):     #10  pc 0000d3e0  /system/lib/libc.so (pthread_create+240)

Google Play 可讓您為 Play 管理中心的各個應用程式版本上傳偵錯符號檔案,以利分析及修正當機和 ANR 問題。

在 Unity 2020.3 以上版本中,您可以按照 Unity 的指示產生 Android 符號,然後將符號化檔案上傳至 Google Play 管理中心,即可在 Android Vitals 資訊主頁查看人類可讀的堆疊追蹤。

否則,請按照 Unity 的「Symbolicate Android crash」一文所述,手動解析堆疊追蹤或為較低版本的 Unity 產生符號檔案。