Stacktraces voor crashes deobfusceren of symboliseren

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

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

Belangrijk: Er worden alleen voor ReTrace geschikte toewijzingsbestanden 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 u de crashes en ANR's van uw app wilt deobfusceren of symboliseren voor een versie van uw app, moet u eerst de vereiste bestanden voor dezelfde versie van uw app genereren. Deobfuscatie of symbolisering werkt alleen als u een bestand genereert en uploadt voor elke nieuwe versie van uw app.

Java: Een ProGuard-toewijzingsbestand genereren

Als u Java-stacktraces wilt deobfusceren, moet u 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 uw project een Android App Bundle wordt gemaakt, kunt u automatisch het bestand met foutopsporingssymbolen in het project opnemen. Als u dit bestand wilt opnemen, voegt u het volgende toe aan het bestand build.gradle van uw app:

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

Opmerking: Er geldt een limiet van 300 MB voor het bestand met foutopsporingssymbolen. Als de voetafdruk van de foutopsporingssymbolen te groot is, gebruikt u SYMBOL_TABLE in plaats van FULL om het bestand kleiner te maken.

Als voor uw project een APK wordt gemaakt, gebruikt u 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 APK of Android App Bundle 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 u een ander buildsysteem gebruikt, kunt u 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.

Er geldt een limiet van 300 MB voor het bestand met foutopsporingssymbolen. Als uw bestand te groot is, komt dit waarschijnlijk omdat uw .so-bestanden een symbooltabel (functienamen) en ook DWARF-foutopsporingsinformatie (bestandsnamen en regels code) bevatten. Deze zijn niet nodig om uw 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 u 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 u de crashes en ANR's van uw app wilt deobfusceren of symboliseren voor een versie van uw app, moet u de deobfuscatie- of symboliseringsbestanden uploaden voor elke versie van uw app.

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

Bestanden uploaden via de Play Console

Een deobfuscatie- of symboliseringsbestand uploaden:

  1. Open de Play Console.
  2. Selecteer een app.
  3. Selecteer Release > Apparaten en versies> App-bundel-verkenner in het menu aan de linkerkant.
  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 uw app te uploaden.
Bestanden uploaden met de Google Play Developer API

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

Stap 3: Gedeobfusceerde stacktraces voor crashes bekijken

Nadat u een ProGuard-toewijzingsbestand of bestand met foutopsporingssymbolen heeft geüpload voor een versie van uw app, worden crashes en ANR's die daarna optreden gedeobfusceerd. U kunt gedeobfusceerde stacktraces voor afzonderlijke crashes en ANR's bekijken op de pagina Crashes en ANR's van uw 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 uw gedeobfusceerde en gesymboliseerde stacktraces weergegeven.

Belangrijk: Nadat u een toewijzingsbestand voor een versie van uw app heeft geüpload, worden alleen toekomstige crashes en ANR's voor die versie van uw app gedeobfusceert. Crashes en ANR's voor een versie van uw app die plaatsvinden voordat u het bijbehorende toewijzingsbestand heeft 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 voor native apps en ReTrace voor Java-crashes te symboliseren. Als u ervoor kiest uw deobfuscatiebestanden niet te delen, kunt u 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. Door uw deobfuscatiebestanden aan te leveren, regelt de Play Console dit voor u.

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

Nadat u een ProGuard-toewijzingsbestand of bestand met foutopsporingssymbolen heeft geüpload voor een versie van uw 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 krijgt u 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 u de symboliseringsbestanden voor uw hele app opneemt, vooral als u een complex of meerfasig buildproces gebruikt. Een van de meest voorkomende redenen voor gedeeltelijke deobfuscatie is als u een bibliotheek van derden gebruikt. In dit geval kunt u 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 u een beter beeld krijgt van de crashes en ANR's die de meeste impact hebben voor uw app.

Wat gebeurt er als ik vergeet het bestand te uploaden?

Als u vergeet het bestand te uploaden voor een nieuwe versie van uw app, worden crashes en ANR's weer geobfusceerd. Volg de bovenstaande instructies om het bestand nu te uploaden. Nadat u een ProGuard-toewijzingsbestand of bestand met foutopsporingssymbolen heeft geüpload voor een versie van uw 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 krijgt u gedeobfusceerde crashes en ANR's niet meteen te zien in de Play Console.

Als u wilt voorkomen dat u vergeet het bestand te uploaden, kunt u overwegen uw buildproces te wijzigen om app-bundels te gebruiken met versie 4.1 of hoger van de Android-plug-in voor Gradle. In dit geval kunt u 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 u het verkeerde bestand uploadt voor een versie van uw app, worden crashes en ANR's weer geobfusceerd. Een gecorrigeerde versie uploaden:

  1. Open de Play Console.
  2. Selecteer een app.
  3. Selecteer Release > Apparaten en versies> App-bundel-verkenner in het menu aan de linkerkant.
  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. Zodra de onjuiste versie is verwijderd, klikt u op het uploadicoon en uploadt u het juiste bestand voor de versie van uw app.

Nadat u het juiste ProGuard-toewijzingsbestand of bestand met foutopsporingssymbolen heeft geüpload voor een versie van uw 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 krijgt u gedeobfusceerde crashes en ANR's niet meteen te zien in de Play Console.

Tip: Als u wilt voorkomen dat u een onjuiste versie van het bestand uploadt, kunt u overwegen uw buildproces te wijzigen om app-bundels te gebruiken met versie 4.1 of hoger van de Android-plug-in voor Gradle. In dit geval kunt u 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.

Was dit nuttig?
Hoe kunnen we dit verbeteren?

Meer hulp nodig?

Log in voor extra supportopties om uw probleem snel op te lossen