Deobfuskera eller symbolifiera stackspårning vid krascher

Vid krascher och ANR-fel på Android-system skapas en stackspårning, det vill säga en ögonblicksbild av vilka kapslade funktionsanrop som gjordes i appen i tur och ordning fram till att den kraschade. Du kan ta dessa ögonblicksbilder till hjälp för att identifiera och åtgärda problem i källkoden.

Om du utvecklade appen eller spelet i Java och använder ProGuard för optimering och obfuskering av appen kan du ladda upp en ProGuard-mappningsfil för varje version av appen på Play Console. Om appen eller spelet har utvecklats med processorkompilerad kod, t.ex. med C++, kan du ladda upp en felsökningssymbolfil för varje version av appen på Play Console. Filerna gör det enklare att analysera och åtgärda krascher och ANR-fel.

Viktigt! Endast ReTrace-kompatibla mappningsfiler stöds för deobfuskering av Java-kompilerade appar. Det är samma format som används i ProGuard eller R8.

Steg 1: Generera en deofuskerings- eller symbolifieringsfil

Innan du kan deobfuskera eller symbolifiera krascher och ANR-fel i en version av appen måste du skapa de filer som krävs för den versionen. Du måste generera och ladda upp en fil för varje ny version av appen som ska deobfuskeras eller symbolifieras.

Java: Generera en ProGuard-mappningsfil

Du kan deobfuskera stackspårningar i Java genom att skapa en ProGuard-mappningsfil. Läs mer på webbplatsen Google Developers.

Processorkompilerad: Skapa en fil med felsökningssymboler

Version 4.1 eller senare av Android Gradle-plugin

Om du har ett projekt där ett AAB-arkiv byggs kan du automatiskt ta med filen med felsökningssymboler i det. Du tar med en sådan fil genom att lägga till följande i appens build.gradle-fil:

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

Obs! Felsökningssymbolfilen får vara högst 800 MB. Använd SYMBOL_TABLE i stället för FULL om felsökningssymbolerna tar för stor plats. Då blir filen mindre.

Om du har ett projekt där en APK-fil byggs genererar du filen med felsökningssymboler för sig med hjälp av inställningen för build.gradle ovan. Ladda upp filen med felsökningssymboler manuellt på Google Play Console enligt beskrivningen i Steg 2: Ladda upp en deobfuskerings- eller symbolifieringsfil nedan. Med Android Gradle-plugin matas filen ut på följande plats i projektet:

  • app/build/outputs/native-debug-symbols/variantens-namn/native-debug-symbols.zip

Version 4.0 eller tidigare av Android Gradle-plugin (och andra byggsystem)

Med Android Gradle-plugin sparas oförkortade kopior av biblioteken i en projektkatalog när AAB-arkivet eller APK-filen byggs. Katalogstrukturen ser ut ungefär så här:

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

Obs! Om du använder ett annat byggsystem kan du ställa in det så att oförkortade bibliotek sparas i en katalog med den struktur som krävs enligt ovan.

  1. Komprimera katalogens innehåll till en zip-fil:
    • $ cd app/build/intermediates/cmake/universal/release/obj
    • $ zip -r symbols.zip .
  2. Ladda upp filen symbols.zip manuellt på Play Console enligt beskrivningen i Steg 2: Ladda upp en deobfuskerings- eller symbolifieringsfil nedan.

Felsökningssymbolfilen får vara högst 800 MB. Om filen blir för stor beror det troligen på att .so-filerna innehåller en symboltabell (funktionsnamn) och DWARF-felsökningsinformation (filnamn och kodrader). De behövs inte för symbolifieringen av koden och kan tas bort med följande kommando:

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

Obs! $OBJCOPY pekar på versionen specifikt för det ABI som ska förkortas, t.ex. ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy

Steg 2: Ladda upp en deofuskerings- eller symbolifieringsfil

Innan du kan deobfuskera eller symbolifiera krascher och ANR-fel för en version av appen måste du ladda upp deobfuskerings- eller symbolifieringsfilerna för den appversionen.

Obs! Det här steget är bara obligatoriskt för utvecklare som använder APK-filer. Om du använder ett AAB-arkiv och version 4.1 eller senare av Android Gradle-plugin behöver du inte göra något. Deobfuskeringsfilen hämtas automatiskt från paketet och du kan gå vidare till Steg 3: Visa deobfuskerad stackspårning vid krascher. Du kan läsa mer om AAB-arkiv på webbplatsen för Android-utvecklare.

Ladda upp filer via Play Console

Så här laddar du upp en deobfuskerings- eller symbolifieringsfil:

  1. Öppna Play Console.
  2. Välj en app.
  3. Välj Version i menyn till vänster > Utforskare för AAB-arkiv.
  4. Välj önskad artefakt med väljaren uppe till höger.
  5. Välj fliken Nedladdningar och scrolla ned till avsnittet Tillgångar.
  6. Klicka på uppladdningspilen för mappningsfilen eller felsökningssymbolerna och ladda upp deobfuskerings- eller symbolifieringsfilen för denna version av appen.
Ladda upp filer med Google Play Developer API

Om du vill ladda upp filer med Google Play Developer API öppnar du webbplatsen Google Developers.

Steg 3: Visa deobfuskerad stackspårning efter krascher

Alla krascher och ANR-fel som uppstår från och med att du har laddat upp en ProGuard-mappningsfil eller fil med felsökningssymboler för den versionen av appen deobfuskeras. Du kan granska den deobfuskerade stackspårningen för enskilda krascher och ANR-fel på sidan Krascher och ANR.

  1. Öppna Play Console.
  2. Välj en app.
  3. Välj Kvalitet på menyn till vänster > Android-diagnos > Krascher och ANR.
  4. Välj en krasch.
  5. Stackspårningen efter deobfuskering och symbolifiering visas under Stackspår.

Viktigt! Bara krascher och ANR-fel som uppstår efter att du har laddat upp en mappningsfil för den appversionen deobfuskeras. Krascher och ANR-fel som uppstod i en version av appen innan du laddade upp mappningsfilen för den deobfuskeras inte.

Vanliga frågor

Jag vill inte använda deobfuskeringen/symbolifieringen på Play Console. Går det att göra den offline?

På Play Console används ndk-stack för symbolifieringen av stackspårningar i processorkompilerade appar och ReTrace för krascher i Java. Om du väljer att inte dela dina deobfuskeringsfiler kan du kopiera de obfuskerade kraschstackarna från Play Console och symbolifiera dem med lämpligt verktyg offline. Detta måste dock göras manuellt för varje kraschstack, vilket tar tid. Om du skickar in deobfuskeringsfilerna hanteras detta åt dig på Play Console.

Jag har laddat upp deobfuskerings-/symbolifieringsfilen, så varför är krascherna och ANR-felen fortfarande obfuskerade?

Det är bara de krascher och ANR-fel som uppstår från och med att du har laddat upp en ProGuard-mappningsfil eller fil med felsökningssymboler för den versionen av appen som deobfuskeras. Nya krascher och ANR-fel måste hinna rapporteras in från användarnas enheter innan deobfuskerade krascher och ANR-fel kan visas på Play Console.

Varför deobfuskeras bara en del av krascherna och ANR-felen när jag har laddat upp deobfuskerings-/symbolifieringsfilen?

Detta händer när den uppladdade deobfuskerings-/symbolifieringsfilen är ofullständig. Det är viktigt att du tar med symbolifieringsfiler för hela appen, särskilt om byggprocessen är komplicerad eller görs i flera steg. En av de vanligaste orsakerna till att deobfuskeringen bara görs delvis är att du använder ett bibliotek från tredje part. I så fall kanske du kan få deobfuskeringsfilerna från den som gjort biblioteket.

Varför verkar jag få färre men allvarligare krascher och ANR-fel när jag har laddat upp deobfuskerings-/symbolifieringsfilen?

Utan deobfuskeringsfiler visas krascher eller ANR-fel som uppstår på en 32-bitars- eller 64-bitarsenhet eller på en ARM- eller Intel-enhet var för sig, även om det är samma fel. När det finns deobfuskeringsfiler kan vi gruppera dessa krascher, vilket ger dig bättre överblick över vilka krascher och ANR-fel som påverkar appen mest.

Vad händer om jag glömmer att ladda upp filen?

Om du glömmer att ladda upp filen för en ny version av appen obfuskeras krascherna och ANR-felen igen. Ladda upp den nu enligt anvisningarna ovan. Det är bara de krascher och ANR-fel som uppstår från och med att du har laddat upp en ProGuard-mappningsfil eller fil med felsökningssymboler för den versionen av appen som deobfuskeras. Nya krascher och ANR-fel måste hinna rapporteras in från användarnas enheter innan deobfuskerade krascher och ANR-fel kan visas på Play Console.

Om du byter till en byggprocess med AAB-arkiv med version 4.1 eller senare av Android Gradle-plugin behöver du inte riskera att glömma bort att ladda upp filen. Då kan du ta med filen med felsökningssymboler i AAB-arkivet automatiskt genom att följa anvisningarna på webbplatsen för Android-utvecklare.

Vad händer om jag laddar upp fel fil?

Om du laddar upp fel fil för en version av appen obfuskeras krascherna och ANR-felen igen. Så här laddar du upp rätt version:

  1. Öppna Play Console.
  2. Välj en app.
  3. Välj Version i menyn till vänster > Utforskare för AAB-arkiv.
  4. Välj önskad artefakt med väljaren uppe till höger.
  5. Välj fliken Nedladdningar och scrolla ned till avsnittet Tillgångar.
  6. Klicka på raderingsikonen bredvid den felaktiga deobfuskerings- eller symbolifieringsfilen.
  7. När den felaktiga versionen har tagits bort klickar du på uppladdningsikonen och laddar upp rätt fil för denna version av appen.

Det är bara de krascher och ANR-fel som uppstår från och med att du har laddat upp rätt ProGuard-mappningsfil eller fil med felsökningssymboler för den versionen av appen som deobfuskeras. Nya krascher och ANR-fel måste hinna rapporteras in från användarnas enheter innan deobfuskerade krascher och ANR-fel kan visas på Play Console.

Tips! Om du byter till en byggprocess med AAB-arkiv med version 4.1 eller senare av Android Gradle-plugin behöver du inte riskera att ladda upp fel version av filen. Då kan du ta med filen med felsökningssymboler i AAB-arkivet automatiskt genom att följa anvisningarna på webbplatsen för Android-utvecklare.

Jag använder APK-filer för närvarande. Hur byter jag till AAB-arkiv?

Börja med att besöka webbplatsen för Android-utvecklare.

I min app används både processorkompilerad kod och Java-kod. Kan jag ladda upp både en symbolifieringsfil för processorkompilerad kod och en deobfuskeringsfil för Java?

Ja.

Varför visas inte stackspårning i samband med vissa ANR-fel?

Ibland stöter systemet på ett ANR-fel men kan inte samla in stackspårningen. I sådana fall visas ANR-felet så att du får en mer komplett bild av appens stabilitet, men själva stackspårningen kan inte visas. ANR-fel utan stackspårning grupperas efter typ och aktivitet, så att granska och åtgärda liknande ANR-fel kan bidra till att minska antalet utan stackspårning.

Var det här till hjälp?

Hur kan vi förbättra den?

Behöver du mer hjälp?

Testa detta härnäst:

Sök
Rensa sökning
Stäng sökrutan
Huvudmeny
438779763226233562
true
Sök i hjälpcentret
true
true
true
true
true
92637
false
false