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 luominenJotta voit deobfuskoida Java-jäljityslistoja, sinun on ensin luotava ProGuard-mäppäystiedosto. Katso ohjeet Google-kehittäjien sivustolta.
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.
- Pakkaa tämän hakemiston sisältö:
$ cd app/build/intermediates/cmake/universal/release/obj
$ zip -r symbols.zip .
- 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 ConsolellaNäin lähetät deobfuskointi- tai symbolointitiedoston:
- Avaa Play Console.
- Valitse sovellus.
- Valitse vasemmasta valikosta Testaa ja julkaise > Sovelluspakettien hallinta.
- Valitse haluamasi artefakti oikean yläkulman valitsimella.
- Valitse Lataukset-välilehti ja vieritä alas Elementit-osioon.
- Klikkaa lähettämisnuolta mäppäystiedoston tai virheenkorjaussymbolien kohdalla sen mukaan, lähetätkö sovelluksesi versioon liittyvän deobfuskointi- vai symbolointitiedoston.
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.
- Avaa Play Console.
- Valitse sovellus.
- Valitse vasemmasta valikosta Seuraa ja paranna > Android Vitals > Kaatumiset ja ANR:t.
- Valitse kaatuminen.
- 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.
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.
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.
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ä.
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.
Jos lähetät sovelluksesi versiosta väärän tiedoston, kaatumisia ja ANR:iä aletaan taas obfuskoida. Näin lähetät oikean version:
- Avaa Play Console.
- Valitse sovellus.
- Valitse vasemmasta valikosta Testaa ja julkaise > Sovelluspakettien hallinta.
- Valitse haluamasi artefakti oikean yläkulman valitsimella.
- Valitse Lataukset-välilehti ja vieritä alas Elementit-osioon.
- Klikkaa poistokuvaketta väärän deobfuskointi- tai symbolointitiedoston vierestä.
- 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.
Aloita käymällä Android-kehittäjien sivustolla.
Kyllä.
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ää.