Kaatumisten jäljityslistan deobfuskointi ja symbolointi

Androidin kaatumiset ja ANR:t tuottavat jäljityslistan, joka on tilannekuva sarjasta toimintoja, joita ohjelmassasi kutsuttiin juuri ennen kaatumista. Näiden tilannekuvien avulla voit tunnistaa ja korjata lähteen ongelmia.

Jos sovelluksesi tai pelisi kehitettiin Javalla ja käytät ProGuardia sovelluksesi optimointiin ja obfuskointiin, voit lähettää Playn Consoleen sovelluksesi kutakin versiota vastaavan ProGuard-mäppäystiedoston. Jos sovelluksesi tai pelisi kehitettiin natiivikoodilla, esim. C++:lla, voit lähettää Play Consoleen sovelluksesi kutakin versiota vastaavan virheenkorjauksen symbolitiedoston. Se auttaa kaatumisten ja ANR:ien analysoinnissa ja korjaamisessa.

Tärkeää: Javassa käännettyjen sovellusten deobfuskointi tukee vain ReTrace-mäppäystiedostoja. Tämä on ProGuardin ja R8:n käyttämä muoto.

Vaihe 1: Deobfuskointi- tai symbolointitiedoston luominen

Jotta voit deobfuskoida tai symboloida sovelluksesi tietyn version kaatumiset ja ANR:t, sinun on ensin luotava tarvittavat tiedostot sille sovelluksen versiolle. Sinun on luotava ja lähetettävä tiedosto kaikista sovelluksen uusista versioista, jotta deobfuskointi tai symbolointi toimii.

Java: ProGuard-mäppäystiedoston luominen

Jotta voit deobfuskoida Java-jäljityslistoja, sinun on ensin luotava ProGuard-mäppäystiedosto. Katso ohjeet Google-kehittäjien sivustolta.

Natiivi: Virheenkorjaussymbolien tiedoston luominen

Android Gradle ‑laajennuksen versio 4.1 tai uudempi

Jos projektisi luo Android App Bundle ‑tiedoston, voit sisällyttää siihen automaattisesti virheenkorjaussymbolien tiedoston. Jos haluat sisällyttää tämän tiedoston, lisää seuraava sovelluksen build.gradle-tiedostoon:

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

Huom. Virheenkorjaussymbolien tiedoston enimmäiskoko on 800 Mt. Jos virheenkorjaussymbolien jalanjälki on liian iso, valitse SYMBOL_TABLE, älä FULL, jos haluat pienentää tiedoston kokoa.

Jos projektisi luo APK:n, käytä yllä olevaa build.gradle-koontiversioasetusta luodaksesi virheenkorjaussymbolien tiedoston erikseen. Lähetä virheenkorjaussymbolien tiedosto manuaalisesti Google Play Consoleen kohdassa Vaihe 2: Deobfuskointi- tai symbolointitiedoston lähettäminen kerrottujen ohjeiden mukaisesti. Osana koontiprosessia Android Gradle ‑laajennus näyttää tämän tiedoston seuraavassa projektin sijainnissa:

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

Android Gradle ‑laajennuksen versio 4.0 tai vanhempi (ja muut koontijärjestelmät)

Osana sovelluspaketin tai APK:n koontiprosessia Android Gradle ‑laajennus pitää kopion karsimattomista kirjastoista projektin hakemistossa. Hakemiston rakenne näyttää tämänkaltaiselta:

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

Huom. Jos käytät eri koontijärjestelmää, voit muokata sitä tallentaaksesi karsimattomia kirjastoja hakemistoon, jonka rakenne on yllä kuvatun kaltainen.

  1. Pakkaa tämän hakemiston sisältö:
    • $ cd app/build/intermediates/cmake/universal/release/obj
    • $ zip -r symbols.zip .
  2. Lähetä symbols.zip-tiedosto manuaalisesti Play Consoleen kohdassa Vaihe 2: Deobfuskointi- tai symbolointitiedoston lähettäminen kerrottujen ohjeiden mukaisesti.

Virheenkorjauksen symbolitiedoston enimmäiskoko on 800 Mt. Jos tiedostosi on liian iso, se johtuu todennäköisesti siitä, että .so-tiedostosi sisältävät symbolitaulukon (funktioiden nimet) sekä DWARF-virheenkorjaustiedot (tiedostojen nimet ja koodirivit). Näitä ei tarvita koodin symbolointiin, ja ne voidaan poistaa tällä komennolla:

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

Huom. $OBJCOPY osoittaa karsimasi ABI:n version, esimerkiksi:ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy

Vaihe 2: Deobfuskointi- tai symbolointitiedoston lähettäminen

Jotta voit deobfuskoida tai symboloida sovelluksesi tietyn version kaatumiset ja ANR:t, sinun on ensin lähetettävä kaikkien sovelluksen versioiden deobfuskointi- tai symbolointitiedostot.

Tärkeää: Tämä vaihe on pakollinen vain APK:ita käyttäville kehittäjille. Jos käytät sovelluspakettia ja Android Gradle ‑laajennuksen versiota 4.1 tai uudempaa, sinun ei tarvitse tehdä mitään. Saamme deobfuskointitiedoston automaattisesti paketista, ja sinä voit siirtyä kohtaan Vaihe 3: Kaatumisten deobfuskoitujen jäljityslistojen tarkastelu. Voit lukea lisää sovelluspaketeista Android-kehittäjien sivustolta.

Tiedostojen lataaminen Play Consolella

Näin lähetät deobfuskointi- tai symbolointitiedoston:

  1. Avaa Play Console.
  2. Valitse sovellus.
  3. Valitse vasemmasta valikosta Testaa ja julkaise > Sovelluspakettien hallinta.
  4. Valitse haluamasi artefakti oikean yläkulman valitsimella.
  5. Valitse Lataukset-välilehti ja vieritä alas Elementit-osioon.
  6. Klikkaa lähettämisnuolta mäppäystiedoston tai virheenkorjaussymbolien kohdalla sen mukaan, lähetätkö sovelluksesi versioon liittyvän deobfuskointi- vai symbolointitiedoston.
Tiedostojen lähettäminen Google Play ‑kehittäjien sovellusliittymällä

Lähetä tiedostoja Google Play ‑kehittäjien sovellusliittymällä siirtymällä Google-kehittäjien sivustolle.

Vaihe 3: Kaatumisten deobfuskoitujen jäljityslistojen tarkastelu

Kun olet lähettänyt sovelluksesi version ProGuard-mäppäystiedoston tai virheenkorjaussymbolien tiedoston, sen jälkeen tapahtuvat kaatumiset ja ANR:t deobfuskoidaan. Voit katsoa yksittäisten kaatumisten ja ANR:ien deobfuskoituja jäljityslistoja sovelluksen Kaatumiset ja ANR:t ‑sivulla.

  1. Avaa Play Console.
  2. Valitse sovellus.
  3. Valitse vasemmasta valikosta Seuraa ja paranna > Android Vitals > Kaatumiset ja ANR:t.
  4. Valitse kaatuminen.
  5. Jäljityslistat-osiossa näet deobfuskoidut ja symboloidut jäljityslistat.

Tärkeää: Kun olet lähettänyt sovelluksesi version mäppäystiedoston, vain sen jälkeen tapahtuvat kyseisen version kaatumiset ja ANR:t deobfuskoidaan. Ennen mäppäystiedoston lähettämistä tapahtuneita sovelluksesi version kaatumisia ja ANR:iä ei deobfuskoida.

Usein kysyttyä

En halua käyttää Play Consolen deobfuskointia/symbolointia. Voinko tehdä sen offline-tilassa?

Play Console käyttää ndk-stackia natiivisovellusten jäljityslistojen symbolisointiin ja ReTracea Java-kaatumisiin. Jos et halua jakaa deobfuskointitiedostojasi, voit kopioida deobfuskoidut kaatumisten kutsujäljet Play Consolesta ja symboloida ne haluamallasi offline-työkalulla. Tämä prosessi on kuitenkin tehtävä manuaalisesti jokaiselle kaatumisen kutsujäljelle, joten se on hidasta ja vie paljon aikaa. Jos lähetät deobfuskointitiedostosi, Play Console hoitaa tämän puolestasi.

Olen lähettänyt deobfuskointi-/symbolointitiedoston, joten miksi kaatumiseni ja ANR:ni ovat edelleen obfuskoituja?

Kun olet lähettänyt sovelluksesi version ProGuard-mäppäystiedoston tai virheenkorjaussymbolien tiedoston, vain sen jälkeen tapahtuvat kaatumiset ja ANR:t deobfuskoidaan. Sinun on odotettava jonkin aikaa, että käyttäjien laitteet ilmoittavat uusista kaatumisista ja ANR:istä, ennen kuin näet deobfuskoidut kaatumiset ja ANR:t Play Consolessa.

Olen lähettänyt deobfuskointi-/symbolointitiedoston, joten miksi kaatumiseni ja ANR:ni ovat vain osittain deobfuskoituja?

Tämä johtuu siitä, että lähetetty deobfuskointi-/symbolointitiedosto oli puutteellinen. Varmista, että lähetät kaikki sovelluksen symbolointitiedostot, erityisesti jos käytät monimutkaista tai monivaiheista prosessia. Yksi yleisimmistä syistä osittaiseen deobfuskointiin on kolmannen osapuolen kirjaston käyttäminen. Tässä tapauksessa voit ehkä saada deobfuskointitiedostot kirjaston tarjoajalta.

Miksi saan deobfuskointi-/symbolointitiedoston lähettämisen jälkeen vähemmän mutta vakavampia kaatumisia ja ANR:iä?

Ilman deobfuskointitiedostoja sama kaatuminen tai ANR 32-bittisellä ja 64-bittisellä laitteella tai ARM- ja Intel-laitteella näytetään erikseen. Deobfuskointitiedostojen avulla voimme niputtaa nämä kaatumiset yhteen, jolloin saat tarkemman kuvan sovellukseesi eniten vaikuttaneista kaatumisista ja ANR:istä.

Mitä tapahtuu, jos unohdan lähettää tiedoston?

Jos unohdat lähettää sovelluksesi uutta versiota vastaavan tiedoston, kaatumisia ja ANR:iä aletaan taas obfuskoida. Lähetä se nyt yllä olevien ohjeiden mukaisesti. Kun olet lähettänyt sovelluksesi version ProGuard-mäppäystiedoston tai virheenkorjaussymbolien tiedoston, vain sen jälkeen tapahtuvat kaatumiset ja ANR:t deobfuskoidaan. Sinun on odotettava jonkin aikaa, että käyttäjien laitteet ilmoittavat uusista kaatumisista ja ANR:istä, ennen kuin näet deobfuskoidut kaatumiset ja ANR:t Play Consolessa.

Jos et halua ottaa riskiä tiedoston lähettämisen unohtamisesta, harkitse koontiprosessin muuttamista niin, että käytät sovelluspaketteja, joiden Android Gradle ‑laajennuksen versio on 4.1 tai uudempi. Tässä tapauksessa voit sisällyttää virheekorjaussymbolien tiedoston automaattisesti sovelluspakettiin seuraamalla Android-kehittäjien sivustolla olevia ohjeita.

Mitä tapahtuu, jos lähetän väärän tiedoston?

Jos lähetät sovelluksesi versiosta väärän tiedoston, kaatumisia ja ANR:iä aletaan taas obfuskoida. Näin lähetät oikean version:

  1. Avaa Play Console.
  2. Valitse sovellus.
  3. Valitse vasemmasta valikosta Testaa ja julkaise > Sovelluspakettien hallinta.
  4. Valitse haluamasi artefakti oikean yläkulman valitsimella.
  5. Valitse Lataukset-välilehti ja vieritä alas Elementit-osioon.
  6. Klikkaa poistokuvaketta väärän deobfuskointi- tai symbolointitiedoston vierestä.
  7. Kun väärä versio on poistettu, klikkaa lähetyskuvaketta ja lähetä oikea sovelluksesi versiota vastaava tiedosto.

Kun olet lähettänyt oikean sovelluksesi version ProGuard-mäppäystiedoston tai virheenkorjaussymbolien tiedoston, vain sen jälkeen tapahtuvat kaatumiset ja ANR:t deobfuskoidaan. Sinun on odotettava jonkin aikaa, että käyttäjien laitteet ilmoittavat uusista kaatumisista ja ANR:istä, ennen kuin näet deobfuskoidut kaatumiset ja ANR:t Play Consolessa.

Vinkki: Jos et halua ottaa riskiä tiedoston väärän version lähettämisestä, harkitse koontiprosessin muuttamista niin, että käytät sovelluspaketteja, joiden Android Gradle ‑laajennuksen versio on 4.1 tai uudempi. Tässä tapauksessa voit sisällyttää virheekorjaussymbolien tiedoston automaattisesti sovelluspakettiin seuraamalla Android-kehittäjien sivustolla olevia ohjeita.

Käytän tällä hetkellä APK:ita. Miten vaihdan sovelluspaketteihin?

Aloita käymällä Android-kehittäjien sivustolla.

Sovellukseni sisältää sekä natiivi- että Java-koodia. Voinko lähettää sekä natiivisymbolointitiedoston että Java-deobfuskointitiedoston?

Kyllä.

Miksi joissain ANR:issä ei näy jäljityslistaa?

Joskus järjestelmä havaitsee ANR:n mutta ei pysty keräämään jäljityslistaa. Tässä tapauksessa ANR näytetään, jotta saat tarkemman käsityksen sovelluksesi vakaudesta, mutta itse jäljityslistaa ei voida näyttää. ANR:t ilman jäljityslistaa ryhmitellään tyypin ja tapahtuman mukaan. Samanlaisten ANR:ien tarkistaminen ja korjaaminen voi siis auttaa vähentämään ilman jäljityslistaa jääneiden ANR:ien määrää.

Oliko tästä apua?

Miten sivua voisi parantaa?

Tarvitsetko lisäapua?

Kokeile näitä vaiheita:

Haku
Tyhjennä haku
Sulje haku
Päävalikko
13638652135873253495
true
Ohjekeskushaku
true
true
true
true
true
92637
false
false