Deobfusker eller symboliser stabelspor for krasj

Krasj og ANR-feil på Android-enheter genererer et stabelspor. Dette er en oversikt over sekvensen med flettede funksjoner som ble kalt opp i programmet, frem til det krasjet. Disse oversiktene kan hjelpe deg med å identifisere og løse eventuelle problemer i kilden.

Hvis appen din eller spillet ditt er utviklet med Java og du bruker ProGuard til å optimalisere og obfuskere appen, kan du laste opp en ProGuard-tilordningsfil for hver versjon av appen i Play-konsollen. Hvis appen din eller spillet ditt er utviklet med integrert kode, for eksempel C++, kan du laste opp en symboliseringsfil for feilsøking for hver versjon av appen i Play-konsollen. Dette gjør det enklere å analysere og løse problemer med krasj og ANR-feil.

Viktig: Bare ReTrace-kompatible filer støttes for deobfuskering av apper som er kompilert i Java. Dette er det samme formatet som brukes av ProGuard eller R8.

Trinn 1: Generer deobfuskerings- eller symboliseringsfiler

Hvis du vil deobfuskere eller symbolisere appens krasj og ANR-feil for en bestemt appversjon, må du først generere de nødvendige filene for den samme versjonen av appen. Du må generere og laste opp en fil for hver nye versjon av appen for at deobfuskering eller symbolisering skal fungere.

Java: Generer ProGuard-tilordningsfiler

For å deobfuskere Java-stabelspor må du først generere en ProGuard-tilordningsfil. Gå til Google Developers-nettstedet for å finne ut hvordan.

Integrert: Generer filer for feilsøkingssymboler

Versjon 4.1 eller nyere av Android-programtillegget for Gradle

Hvis prosjektet ditt bruker en Android-appsamling (Android App Bundle), kan du automatisk inkludere filen for feilsøkingssymbolene i den. For å inkludere denne filen, legg til følgende i appens build.gradle-fil:

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

Merk: Grensen for symboliseringsfilen for feilsøking er 800 MB. Hvis fotavtrykket til feilsøkingssymbolene er for stort, bruker du SYMBOL_TABLE i stedet for FULL for å redusere filstørrelsen.

Hvis prosjektet ditt bruker en APK, kan du bruke kodebyggingsinnstillingen build.gradle ovenfor for å generere filen for feilsøkingssymbolene for seg selv. Last opp filen for feilsøkingssymbolene manuelt til Google Play-konsollen som beskrevet nedenfor i Trinn 2: Last opp deobfuskerings- eller symboliseringsfiler. Som en del av kodebyggingsprosessen plasserer Android-programtillegget for Gradle denne filen på følgende prosjektplassering:

  • app/build/outputs/native-debug-symbols/variant-name/native-debug-symbols.zip

Versjon 4.0 eller eldre av Android-programtillegget for Gradle (samt andre kodebyggingssystemer)

Som en del av kodebyggingsprosessen for appsamlinger eller APK-er beholder Android-programtillegget for Gradle en kopi av de ubehandlede bibliotekene i prosjektkataloger. Denne katalogen følger en struktur som ligner på denne:

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

Merk: Hvis du bruker et annet kodebyggingssystem, kan du justere det for å lagre ubehandlede biblioteker i en katalog med den nødvendige strukturen ovenfor.

  1. Legg innholdet i denne katalogen i en ZIP-fil:
    • $ cd app/build/intermediates/cmake/universal/release/obj
    • $ zip -r symbols.zip .
  2. Last opp symbols.zip-filen manuelt til Play-konsollen som beskrevet nedenfor i Trinn 2: Last opp deobfuskerings- eller symboliseringsfiler.

Maksgrensen for symboliseringsfilen for feilsøking er 800 MB. Hvis filen er for stor, skyldes det sannsynligvis at .so-filene inneholder en symboltabell (funksjonsnavn) og DWARF-feilsøkingsinformasjon (filnavn og kodelinjer). Disse er ikke nødvendige for å symbolisere koden din og kan fjernes ved å kjøre denne kommandoen:

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

Merk: $OBJCOPY peker til den spesifikke versjonen for binærprogramgrensesnittet du behandler, for eksempel:ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy

Trinn 2: Last opp deobfuskerings- eller symboliseringsfiler

Hvis du vil deobfuskere eller symbolisere appens krasj og ANR-feil for en bestemt appversjon, må du laste opp deobfuskerings- eller symboliseringsfilene for hver versjon av appen.

Viktig: Dette trinnet er bare nødvendig for utviklere som bruker APK-er. Hvis du bruker en appsamling og versjon 4.1 eller nyere av Android-programtillegget for Gradle, trenger du ikke å gjøre noe. Vi henter automatisk deobfuskeringsfilen fra samlingen, og du kan gå videre til Trinn 3: Se deobfuskerte stabelspor for krasj. Du kan finne ut mer om appsamlinger på nettstedet for Android-utviklere.

Last opp filer med Play-konsollen

Slik laster du opp deobfuskerings- eller symboliseringsfiler:

  1. Åpne Play-konsollen.
  2. Velg en app.
  3. I menyen til venstre velger du Utgave > Utforsker for appsamlinger.
  4. Bruk velgeren øverst til høyre for å velge den aktuelle artefakten.
  5. Velg Nedlastinger-fanen, og rull ned til «Elementer»-delen.
  6. Klikk på opplastingspilen for den aktuelle tilordningsfilen eller de aktuelle feilsøkingssymbolene for å laste opp deobfuskerings- eller symboliseringsfilen for versjonen av appen din.
Last opp filer med Google Play Developer API

For å laste opp filer med Google Play Developer API, gå til Google Developers-nettstedet.

Trinn 3: Se deobfuskerte stabelspor for krasj

Når du har lastet opp en ProGuard-tilordningsfil eller en fil for feilsøkingssymboler for en versjon av appen din, deobfuskeres krasj og ANR-feil som oppstår senere. Du kan gjennomgå deobfuskerte stabelspor for individuelle krasj og ANR-feil på appens side for Krasj og ANR-feil.

  1. Åpne Play-konsollen.
  2. Velg en app.
  3. I menyen til venstre velger du Kvalitet > Android-nøkkelstatistikk > Krasj og ANR-feil.
  4. Velg et krasj.
  5. I «Stabelsporinger»-delen ser du deobfuskerte og symboliserte stabelspor.

Viktig: Når du har lastet opp en tilordningsfil for en versjon av appen din, deobfuskeres bare krasj og ANR-feil som oppstår senere. Krasj og ANR-feil for en versjon av appen som finner sted før du har lastet opp den tilhørende tilordningsfilen, blir ikke deobfuskert.

Vanlige spørsmål

Jeg vil ikke bruke deobfuskering/symbolisering i Play-konsollen. Kan jeg bare gjøre det uten nett?

Play-konsollen bruker ndk-stack til å symbolisere stabelspor for integrerte apper, og ReTrace for Java-krasj. Hvis du velger å ikke dele deobfuskeringsfilene dine, kan du kopiere de obfuskerte stabelsporene for krasj fra Play-konsollen og bruke det riktige verktøyet uten nett til å symbolisere dem. Denne prosessen er langsom og tidkrevende fordi den må utføres manuelt for hvert stabelspor for krasj. Når du sender inn deobfuskeringsfilene dine, håndterer Play-konsollen dette for deg.

Jeg har lastet opp deobfuskerings-/symboliseringsfilen, så hvorfor er krasjene og ANR-feilene mine fortsatt obfuskert?

Når du har lastet opp en ProGuard-tilordningsfil eller en symboliseringsfil for feilsøking for en versjon av appen din, deobfuskeres bare krasj og ANR-feil som oppstår senere. Det kan ta litt tid før nye krasj og ANR-feil rapporteres av brukernes enheter og du ser deobfuskerte krasj og ANR-feil i Play-konsollen.

Hvorfor er krasjene og ANR-feilene mine bare delvis deobfuskert når jeg har lastet opp deobfuskerings-/symboliseringsfilen?

Dette skyldes opplasting av en ufullstendig deobfuskerings-/symboliseringsfil. Sørg for å ta med symboliseringsfilene for hele appen din, spesielt hvis du bruker en kompleks eller flertrinns kodebyggeprosess. En av de vanligste årsakene til delvis deobfuskering er bruk av et tredjepartsbibliotek. I dette tilfellet kan det hende at du kan få deobfuskeringsfilene fra bibliotekleverandøren.

Hvorfor får jeg færre, men mer alvorlige krasj og ANR-feil etter å ha lastet opp deobfuskerings-/symboliseringsfilen?

Uten deobfuskeringsfiler vises de samme krasjene eller ANR-feilene atskilt på en 32/64-bit-enhet eller en ARM- eller Intel-enhet. Når du oppgir deobfuskeringsfiler, kan vi gruppere disse krasjene sammen, slik at du får en bedre oversikt over krasjene og ANR-feilene med størst innvirkning for appen din.

Hva skjer hvis jeg glemmer å laste opp filen?

Hvis du glemmer å laste opp filen for en ny versjon av appen din, går krasjene og ANR-feilene tilbake til å bli obfuskert. Følg veiledningen ovenfor for å laste den opp nå. Når du har lastet opp en ProGuard-tilordningsfil eller en fil for feilsøkingssymboler for en versjon av appen din, deobfuskeres bare krasj og ANR-feil som oppstår senere. Det kan ta litt tid før nye krasj og ANR-feil rapporteres av brukernes enheter og du ser deobfuskerte krasj og ANR-feil i Play-konsollen.

For å unngå å glemme å laste opp filen bør du vurdere å endre kodebyggingsprosessen til å bruke appsamlinger med versjon 4.1 eller nyere av Android-programtillegget for Gradle. I dette tilfellet kan du automatisk inkludere filen for feilsøkingssymbolene i appsamlingen ved å følge veiledningen på nettstedet for Android-utviklere.

Hva skjer hvis jeg laster opp feil fil?

Hvis du laster opp feil fil for en versjon av appen din, går krasj og ANR-feil tilbake til å bli obfuskert. Slik laster du opp en korrigert versjon:

  1. Åpne Play-konsollen.
  2. Velg en app.
  3. I menyen til venstre velger du Utgave > Utforsker for appsamlinger.
  4. Bruk velgeren øverst til høyre for å velge den aktuelle artefakten.
  5. Velg Nedlastinger-fanen, og rull ned til «Elementer»-delen.
  6. Klikk på sletteikonet ved siden av deobfuskerings- eller symboliseringsfilen som er feil.
  7. Når den versjonen er slettet, klikker du på opplastingsikonet og laster opp riktig fil for versjonen av appen din.

Når du har lastet opp den riktige ProGuard-tilordningsfilen eller filen for feilsøkingssymboler for en versjon av appen din, deobfuskeres bare krasj og ANR-feil som oppstår senere. Det kan ta litt tid før nye krasj og ANR-feil rapporteres av brukernes enheter og du ser deobfuskerte krasj og ANR-feil i Play-konsollen.

Tips: For å unngå å laste opp feil versjon av filen bør du vurdere å endre kodebyggingsprosessen til å bruke appsamlinger med versjon 4.1 eller nyere av Android-programtillegget for Gradle. I dette tilfellet kan du automatisk inkludere filen for feilsøkingssymbolene i appsamlingen ved å følge veiledningen på nettstedet for Android-utviklere.

Jeg bruker APK-er for øyeblikket. Hvordan bytter jeg til appsamlinger?

Gå til nettstedet for Android-utviklere for å komme i gang.

Appen min inneholder både integrert kode og Java-kode. Kan jeg laste opp både en integrert symboliseringsfil og en Java-deobfuskeringsfil?

Ja.

Hvorfor mangler det stabelspor for enkelte ANR-feil?

Av og til oppstår det ANR-feil uten at systemet klarer å hente stabelsporet. I dette tilfellet vises ANR-feilen for å gi deg en mer fullstendig oversikt over appstabiliteten, men selve stabelsporet kan ikke vises. ANR-feil uten stabelspor grupperes etter type og aktivitet, slik at gjennomgang og korrigering av lignende ANR-feil kan bidra til å redusere antallet feil uten stabelspor.

Var dette nyttig for deg?

Hvordan kan vi forbedre den?

Trenger du mer hjelp?

Prøv disse trinnene:

Søk
Slett søket
Lukk søkefunksjonen
Hovedmeny
15324945430084506972
true
Søk i brukerstøtte
true
true
true
true
true
92637
false
false