Stacktraces van crashes deobfusceren of symboliseren

Crashes en ANR's op Android produceren een stacktrace. Dit is een momentopname van de reeks geneste functies die in je programma worden aangeroepen tot het moment dat het programma crashte. Met deze momentopnamen kun je eventuele problemen in de bron identificeren en oplossen.

Als je app of game is ontwikkeld met Java en je ProGuard gebruikt om je app te optimaliseren en te obfusceren, kun je een ProGuard-toewijzingsbestand uploaden voor elke versie van je app in de Play Console. Als je app of game is ontwikkeld met native code, zoals C++, kun je een bestand met foutopsporingssymbolen uploaden voor elke versie van je app in de Play Console. Dit maakt het makkelijker om je crashes en ANR's te analyseren en op te lossen.

Belangrijk: Alleen voor ReTrace geschikte toewijzingsbestanden worden ondersteund voor deobfuscatie van apps die zijn gecompileerd in Java. Dit is dezelfde indeling die wordt gebruikt door ProGuard of R8.

Stap 1: Een deobfuscatie- of symboliseringsbestand genereren

Als je de crashes en ANR's van je app wilt deobfusceren of symboliseren voor een versie van je app, moet je eerst de vereiste bestanden voor die versie van je app genereren. Deobfuscatie of symbolisering werkt alleen als je een bestand genereert en uploadt voor elke nieuwe versie van je app.

Java: Een ProGuard-toewijzingsbestand genereren

Als je Java-stacktraces wilt deobfusceren, moet je eerst een ProGuard-toewijzingsbestand genereren. Ga naar de site van Google Developers voor meer informatie.

Native: Een bestand met foutopsporingssymbolen genereren

Versie 4.1 en hoger van de Android-plug-in voor Gradle

Als voor je project een Android App Bundle wordt gemaakt, kun je automatisch het bestand met foutopsporingssymbolen in het project opnemen. Als je dit bestand wilt opnemen, voeg je het volgende toe aan het bestand build.gradle van je app:

  • android.defaultConfig.ndk.debugSymbolLevel = 'FULL'

Opmerking: De limiet voor het bestand met foutopsporingssymbolen is 800 MB. Als de voetafdruk van de foutopsporingssymbolen te groot is, gebruik je SYMBOL_TABLE in plaats van FULL om het bestand kleiner te maken.

Als voor je project een APK wordt gemaakt, gebruik je de build-instelling build.gradle hierboven om het bestand met foutopsporingssymbolen afzonderlijk te genereren. Upload het bestand met foutopsporingssymbolen handmatig naar de Google Play Console, zoals hieronder beschreven in Stap 2: Een deobfuscatie- of symboliseringsbestand uploaden. Als onderdeel van het buildproces voert de Android-plug-in voor Gradle dit bestand uit op de volgende projectlocatie:

  • app/build/outputs/native-debug-symbols/variantnaam/native-debug-symbols.zip

Versie 4.0 en lager van de Android-plug-in voor Gradle (en andere buildsystemen)

Als onderdeel van het buildproces voor een app-bundel of APK bewaart de Android-plug-in voor Gradle een kopie van de niet-gestripte bibliotheken in een projectdirectory. Deze directory heeft een structuur zoals deze:

app/build/intermediates/cmake/universal/release/obj

├── armeabi-v7a/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

├── arm64-v8a/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

├── x86/

│   ├── libgamenegine.so

│   ├── libothercode.so

│   └── libvideocodec.so

└── x86_64/

    ├── libgameengine.so

    ├── libothercode.so

    └── libvideocodec.so

Opmerking: Als je een ander buildsysteem gebruikt, kun je dit aanpassen om niet-gestripte bibliotheken op te slaan in een directory met de vereiste structuur die hierboven wordt weergegeven.

  1. Zip de content van deze directory:
    • $ cd app/build/intermediates/cmake/universal/release/obj
    • $ zip -r symbols.zip .
  2. Upload het bestand symbols.zip handmatig naar de Play Console, zoals hieronder beschreven in Stap 2: Een deobfuscatie- of symboliseringsbestand uploaden.

De limiet voor het bestand met foutopsporingssymbolen is 800 MB. Als je bestand te groot is, komt dit waarschijnlijk omdat je .so-bestanden een symbooltabel (functienamen) en ook DWARF-foutopsporingsinformatie (bestandsnamen en regels code) bevatten. Deze zijn niet nodig om je code te symboliseren en kunnen worden verwijderd met deze opdracht:

  • $OBJCOPY --strip-debug lib.so lib.so.sym

Opmerking: $OBJCOPY verwijst naar de specifieke versie voor de ABI die je stript, bijvoorbeeld: ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy

Stap 2: Een deobfuscatie- of symboliseringsbestand uploaden

Als je de crashes en ANR's van je app wilt deobfusceren of symboliseren voor een versie van je app, moet je de deobfuscatie- of symboliseringsbestanden uploaden voor elke versie van je app.

Belangrijk: Deze stap is alleen vereist voor ontwikkelaars die APK's gebruiken. Als je een app-bundel en versie 4.1 of hoger van de Android-plug-in voor Gradle gebruikt, hoef je niets te doen. We halen het deobfuscatiebestand automatisch uit de bundel en je kunt doorgaan naar Stap 3: Gedeobfusceerde stacktraces van crashes bekijken. Je vindt meer informatie over app-bundels op de site voor Android-ontwikkelaars.

Bestanden uploaden met de Play Console

Zo upload je een deobfuscatie- of symboliseringsbestand:

  1. Open de Play Console.
  2. Selecteer een app.
  3. Selecteer Release > App-bundel-verkenner in het linkermenu.
  4. Selecteer het betreffende artefact met de kiezer rechtsboven.
  5. Selecteer het tabblad Downloads en scroll omlaag naar het gedeelte Items.
  6. Klik op de uploadpijl voor het toewijzingsbestand of de foutopsporingssymbolen (zoals van toepassing) om het deobfuscatie- of symboliseringsbestand voor de versie van je app te uploaden.
Bestanden uploaden met de Google Play Developer API

Ga naar de site van Google Developers als je bestanden wilt uploaden met de Google Play Developer API.

Stap 3: Gedeobfusceerde stacktraces van crashes bekijken

Nadat je een ProGuard-toewijzingsbestand of bestand met foutopsporingssymbolen hebt geüpload voor een versie van je app, worden crashes en ANR's die daarna optreden gedeobfusceerd. Je kunt gedeobfusceerde stacktraces voor afzonderlijke crashes en ANR's bekijken op de pagina Crashes en ANR's van je app.

  1. Open de Play Console.
  2. Selecteer een app.
  3. Selecteer Kwaliteit > App-vitaliteit > Crashes en ANR's in het menu aan de linkerkant.
  4. Selecteer een crash.
  5. In het gedeelte Stacktraces worden je gedeobfusceerde en gesymboliseerde stacktraces weergegeven.

Belangrijk: Nadat je een toewijzingsbestand voor een versie van je app hebt geüpload, worden alleen toekomstige crashes en ANR's voor die versie van je app gedeobfusceerd. Crashes en ANR's voor een versie van je app die plaatsvinden voordat je het bijbehorende toewijzingsbestand hebt geüpload, worden niet gedeobfusceerd.

Veelgestelde vragen

Ik wil de deobfuscatie/symbolisering van de Play Console niet gebruiken. Kan ik dit ook offline doen?

De Play Console gebruikt ndk-stack om stacktraces van native apps en ReTrace om die van Java-crashes te symboliseren. Als je ervoor kiest je deobfuscatiebestanden niet te delen, kun je de gedeobfusceerde crashstacks uit de Play Console kopiëren en de gewenste tool offline gebruiken om ze te symboliseren. Dit proces moet handmatig worden uitgevoerd voor elke crashstack, waardoor het proces traag en tijdrovend is. Als je je deobfuscatiebestanden aanlevert, regelt de Play Console dit voor je.

Ik heb het deobfuscatie-/symboliseringsbestand geüpload, dus waarom zijn mijn crashes en ANR's nog steeds gedeobfusceerd?

Nadat je een ProGuard-toewijzingsbestand of bestand met foutopsporingssymbolen hebt geüpload voor een versie van je app, worden alleen crashes en ANR's die daarna optreden gedeobfusceerd. Het duurt enige tijd voordat nieuwe crashes en ANR's worden gerapporteerd door de apparaten van gebruikers. Daarom krijg je gedeobfusceerde crashes en ANR's niet meteen te zien in de Play Console.

Waarom worden mijn crashes en ANR's na het uploaden van het deobfuscatie-/symboliseringsbestand slechts gedeeltelijk gedeobfusceerd?

Dit wordt veroorzaakt door het uploaden van een onvolledig deobfuscatie-/symboliseringsbestand. Zorg ervoor dat je de symboliseringsbestanden voor je hele app opneemt, vooral als je een complex of meerfasig buildproces gebruikt. Een van de meest voorkomende redenen voor gedeeltelijke deobfuscatie is het gebruik van een bibliotheek van derden. In dit geval kun je de deobfuscatiebestanden mogelijk ophalen bij de provider van de bibliotheek.

Waarom krijg ik na het uploaden van het deobfuscatie-/symboliseringsbestand minder, maar ernstigere crashes en ANR's?

Zonder deobfuscatiebestanden wordt dezelfde crash of ANR op een 32-bits en een 64-bits apparaat of op een ARM- en een Intel-apparaat afzonderlijk weergegeven. Door deobfuscatiebestanden aan te leveren, kunnen we deze crashes samenvoegen, zodat je een beter beeld krijgt van de crashes en ANR's die de meeste impact hebben voor je app.

Wat gebeurt er als ik vergeet het bestand te uploaden?

Als je vergeet het bestand te uploaden voor een nieuwe versie van je app, worden crashes en ANR's weer geobfusceerd. Volg de bovenstaande instructies om het bestand nu te uploaden. Nadat je een ProGuard-toewijzingsbestand of bestand met foutopsporingssymbolen hebt geüpload voor een versie van je app, worden alleen crashes en ANR's die daarna optreden gedeobfusceerd. Het duurt enige tijd voordat nieuwe crashes en ANR's worden gerapporteerd door de apparaten van gebruikers. Daarom krijg je gedeobfusceerde crashes en ANR's niet meteen te zien in de Play Console.

Als je niet wilt vergeten het bestand te uploaden, kun je overwegen je buildproces te wijzigen om app-bundels te gebruiken met versie 4.1 of hoger van de Android-plug-in voor Gradle. In dit geval kun je het bestand met foutopsporingssymbolen automatisch opnemen in de app-bundel aan de hand van de instructies op de site voor Android-ontwikkelaars.

Wat gebeurt er als ik het verkeerde bestand upload?

Als je het verkeerde bestand uploadt voor een versie van je app, worden crashes en ANR's weer geobfusceerd. Een gecorrigeerde versie uploaden:

  1. Open de Play Console.
  2. Selecteer een app.
  3. Selecteer Release > App-bundel-verkenner in het linkermenu.
  4. Selecteer het betreffende artefact met de kiezer rechtsboven.
  5. Selecteer het tabblad Downloads en scroll omlaag naar het gedeelte Items.
  6. Klik op het verwijderingsicoon naast het onjuiste deobfuscatie- of symboliseringsbestand.
  7. Na verwijdering van de onjuiste versie, klik je op het uploadicoon en upload je het juiste bestand voor de versie van je app.

Nadat je het juiste ProGuard-toewijzingsbestand of bestand met foutopsporingssymbolen hebt geüpload voor een versie van je app, worden alleen crashes en ANR's die daarna optreden gedeobfusceerd. Het duurt enige tijd voordat nieuwe crashes en ANR's worden gerapporteerd door de apparaten van gebruikers. Daarom krijg je gedeobfusceerde crashes en ANR's niet meteen te zien in de Play Console.

Tip: Als je wilt voorkomen dat je een onjuiste versie van het bestand uploadt, kun je overwegen je buildproces te wijzigen om app-bundels te gebruiken met versie 4.1 of hoger van de Android-plug-in voor Gradle. In dit geval kun je het bestand met foutopsporingssymbolen automatisch opnemen in de app-bundel aan de hand van de instructies op de site voor Android-ontwikkelaars.

Ik gebruik momenteel APK's. Hoe schakel ik over naar app-bundels?

Ga naar de site voor Android-ontwikkelaars om aan de slag te gaan.

Mijn app bevat zowel native als Java-code. Kan ik zowel een native symboliseringsbestand als een Java-deobfuscatiebestand uploaden?

Ja.

Waarom is er voor sommige ANR's geen stacktrace te zien?

Het kan soms gebeuren dat het systeem een ANR ondervindt, maar de stacktrace niet kan ophalen. In dat geval zie je de ANR om een completer beeld te krijgen van je app-stabiliteit, maar kan de stacktrace zelf niet worden getoond. ANR's zonder stacktraces worden gegroepeerd op type en activiteit. Als je vergelijkbare ANR's naloopt en verhelpt, kun je misschien het aantal ANR's zonder stacktraces verlagen.

Was dit nuttig?

Hoe kunnen we dit verbeteren?

Meer hulp nodig?

Probeer de volgende stappen:

Zoeken
Zoekopdracht wissen
Zoekfunctie sluiten
Hoofdmenu
12342983792712902424
true
Zoeken in het Helpcentrum
true
true
true
true
true
92637
false
false