在發布版本中加入原生符號

根據預設,系統會在應用程式的發布子版本中移除原生程式碼資料庫。這項移除作業會移除應用程式使用的任何原生資料庫中包含的符號表和偵錯資訊。移除原生程式碼資料庫可大幅節省大小;不過,由於缺少資訊 (例如類別和函式名稱),因此無法診斷 Google Play 管理中心上的當機問題。如要對當機問題進行偵錯,您必須在 Play 管理中心為應用程式加入偵錯符號檔案。

上傳符號檔案

Google Play 管理中心會在 Android Vitals 下方回報原生程式碼發生錯誤事件。只需執行幾個步驟,即可為應用程式產生並上傳原生偵錯符號檔案。這個檔案可在 Android Vitals 中啟用符號化的原生當機堆疊追蹤 (包括類別和函式名稱),協助您在實際工作環境中對應用程式進行偵錯。這些步驟取決於專案中使用的 Android Gradle 外掛程式版本,以及您使用的是 Android App Bundle (建議) 還是 APK。

Android Gradle 外掛程式 4.1 以上版本

如果專案建構 Android App Bundle (AAB),您可以設定建構作業,自動在 AAB 中加入原生偵錯符號檔案,以便在發布應用程式時上傳至 Play 管理中心。如要在發布子版本中加入這個檔案,請在應用程式的 build.gradle.kts 檔案中新增以下內容:

android.buildTypes.release.ndk.debugSymbolLevel = { SYMBOL_TABLE | FULL }

請從下列清單中選取偵錯符號級別:

  • 使用 SYMBOL_TABLE 取得 Play 管理中心符號化堆疊追蹤中的函式名稱。這個級別支援「空值標記」。
  • 使用 FULL 在 Play 管理中心的符號化堆疊追蹤中取得函式名稱、檔案和行數。

如果專案建構的是 APK,請使用先前顯示的 android.buildTypes.release.ndk.debugSymbolLevel 設定,分別產生原生偵錯符號檔案。手動將原生偵錯符號檔案上傳至 Google Play 管理中心 (程序與上傳對應檔以去模糊化堆疊追蹤類似)。在建構程序中,Android Gradle 外掛程式會在下列專案位置輸出這個檔案:

app/build/outputs/native-debug-symbols/<var>variant-name</var>/native-debug-symbols.zip

如果依附元件包含原生資料庫,系統可能會移除偵錯資訊,以縮減大小。您可以執行建構作業,並將記錄層級設為 info,然後設定 debugSymbolLevel = { SYMBOL_TABLE | FULL },藉此確認這項資訊。然後在建構輸出內容中找出以下這行:

Unable to extract native debug metadata from ... because the native debug metadata has already been stripped.

Android Gradle 外掛程式 4.0 以下版本 (以及其他建構系統)

在建構程序中,Android Gradle 外掛程式會在專案目錄中保留未移除的程式庫副本。這個目錄結構與下列內容相似:

app/build/intermediates/cmake/universal/release/obj/
├── armeabi-v7a/
│   ├── libgameengine.so
│   ├── libothercode.so
│   └── libvideocodec.so
├── arm64-v8a/
│   ├── libgameengine.so
│   ├── libothercode.so
│   └── libvideocodec.so
├── x86/
│   ├── libgameengine.so
│   ├── libothercode.so
│   └── libvideocodec.so
└── x86_64/
    ├── libgameengine.so
    ├── libothercode.so
    └── libvideocodec.so
  1. 壓縮以下目錄的內容:

    cd app/build/intermediates/cmake/universal/release/obj
    zip -r symbols.zip .
    
  2. 手動上傳 symbols.zip 檔案至 Google Play 管理中心。