Dodawanie symboli natywnych do wersji produkcyjnej

Domyślnie w wersjach aplikacji przeznaczonych do publikacji usuwane są biblioteki kodu natywnego. Polega to na usunięciu tabeli symboli i informacji debugujących zawartych w dowolnych bibliotekach natywnych używanych przez aplikację. Usuwanie bibliotek kodu natywnego powoduje znaczne zmniejszenie rozmiaru, ale uniemożliwia diagnozowanie awarii w Konsoli Google Play z powodu braku informacji (np. nazw klas i funkcji). Aby debugować awarie, musisz dołączyć do aplikacji w Konsoli Play plik z symbolami debugowania.

Przesyłanie pliku z symbolami

Konsole Google Play zgłasza awarie natywnych aplikacji w sekcji Android Vitals. Wystarczy kilka kroków, aby wygenerować i przesłać plik z symbolami do debugowania kodu natywnego dla aplikacji. Ten plik umożliwia korzystanie z symbolizowanych ścieżek wyjątków kodu natywnego (które obejmują nazwy klas i funkcji) w Android Vitals, co ułatwia debugowanie aplikacji w produkcji. Te czynności różnią się w zależności od wersji wtyczki Androida do obsługi Gradle używanej w projekcie oraz od tego, czy używasz pakietu Android App Bundle (zalecane) czy pliku APK.

Wtyczka Androida do obsługi Gradle w wersji 4.1 lub nowszej

Jeśli w ramach projektu tworzysz pakiet Android App Bundle (AAB), możesz skonfigurować kompilację, aby automatycznie uwzględniała w nim plik z natywnymi symbolami debugowania. Dzięki temu plik zostanie przesłany do Konsoli Play podczas publikowania aplikacji. Aby uwzględnić ten plik w kompilacji wersji, dodaj do pliku build.gradle.kts aplikacji te informacje:

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

Wybierz poziom symboli debugowania spośród tych opcji:

  • Użyj SYMBOL_TABLE, aby uzyskać nazwy funkcji w symbolizowanych zrzutach stosu w Konsoli Play. Ten poziom obsługuje tombstones.
  • Użyj FULL, aby uzyskać nazwy funkcji, pliki i numery wierszy w symbolizowanych zrzutach stosu w Konsoli Play.

Jeśli w ramach projektu tworzysz plik APK, użyj ustawienia android.buildTypes.release.ndk.debugSymbolLevel, aby niezależnie wygenerować plik z symbolami. Ręcznie prześlij do Konsoli Google Play plik z natywnymi symbolami debugowania (proces jest podobny do przesyłania pliku mapowania w celu odczytania zaciemnionego kodu w zrzutach stosu). W ramach procesu kompilacji wtyczka Androida do obsługi Gradle generuje ten plik w następującej lokalizacji projektu:

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

Wtyczka Androida do obsługi Gradle w wersji 4.0 lub nowszej (i inne systemy kompilacji)

W ramach procesu kompilacji wtyczka Androida do obsługi Gradle przechowuje kopię niezmodyfikowanych bibliotek w katalogu projektu. Struktura katalogów jest podobna do tej:

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. Skompresuj zawartość tego katalogu:

    cd app/build/intermediates/cmake/universal/release/obj
    zip -r symbols.zip .
    
  2. Ręcznie prześlij plik symbols.zip do Konsoli Google Play.