Dodawanie symboli natywnych do wersji produkcyjnej

Domyślnie biblioteki kodu natywnego są usuwane w kompilacjach aplikacji do publikacji. Usuwanie polega na usunięciu tabeli symboli i informacji na potrzeby debugowania zawartych w bibliotekach natywnych używanych przez aplikację. Usuwanie bibliotek kodu natywnego pozwala znacznie zmniejszyć rozmiar aplikacji, ale uniemożliwia diagnozowanie awarii w Konsoli Google Play z powodu braku informacji (takich jak nazwy klas i funkcji). Aby debugować awarie, musisz dołączyć do aplikacji w Konsoli Play plik symboli debugowania.

Przesyłanie pliku symboli

Raporty Konsoli Google Play dotyczące awarii natywnych znajdziesz w sekcji Najważniejsze dane o Androidzie. W kilku krokach możesz wygenerować i przesłać plik symboli debugowania kodu natywnego aplikacji. Ten plik umożliwia symbolizację zrzutów stosu awarii natywnych (zawierających nazwy klas i funkcji) w Android Vitals, co ułatwia debugowanie aplikacji w środowisku produkcyjnym. 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ę tak, aby automatycznie uwzględniała w nim plik symboli debugowania kodu natywnego. Dzięki temu będzie on przesyłany do Konsoli Play podczas publikowania aplikacji. Aby uwzględnić ten plik w kompilacjach wersji, dodaj do pliku build.gradle.kts aplikacji ten kod:

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

Wybierz poziom symbolu debugowania:

  • Użyj SYMBOL_TABLE, aby uzyskać nazwy funkcji w zsymbolizowanych zrzutach stosu w Konsoli Play. Ten poziom obsługuje znaczniki usunięcia.
  • Używaj FULL, aby uzyskiwać nazwy funkcji, pliki i numery wierszy w zsymbolizowanych zrzutach stosu w Konsoli Play.

Jeśli w ramach projektu tworzysz plik APK, użyj ustawienia android.buildTypes.release.ndk.debugSymbolLevel pokazanego wcześniej, aby niezależnie wygenerować plik symboli debugowania. Ręcznie prześlij plik natywnych symboli debugowania do Konsoli Google Play (proces jest podobny do przesyłania pliku mapowania w celu usunięcia zaciemnienia zrzutów 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

Jeśli zależności zawierają biblioteki natywne, informacje debugowania są prawdopodobnie usuwane, aby zmniejszyć rozmiar. Możesz to sprawdzić, uruchamiając kompilację z infopoziomem logowania i ustawiając debugSymbolLevel = { SYMBOL_TABLE | FULL }. Następnie w danych wyjściowych kompilacji znajdź ten wiersz:

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

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 tego katalogu 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.