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

根據預設,應用程式的發布版本會移除原生程式碼程式庫。移除作業包括移除應用程式所用任何原生程式庫中包含的符號表和偵錯資訊。移除原生程式碼程式庫可大幅節省大小,但由於缺少類別和函式名稱等資訊,因此無法在 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 管理中心。