Blocările și erorile ANR de pe Android produc o urmărire a stivei: un instantaneu al succesiunii de funcții imbricate apelate în program până în momentul blocării. Aceste instantanee te pot ajuta să identifici și să remediezi problemele din sursă.
Dacă ai dezvoltat aplicația sau jocul cu Java și folosești ProGuard pentru a optimiza și a obscuriza aplicația, poți încărca un fișier de asociere ProGuard pentru fiecare versiune a aplicației în Play Console. Dacă ai dezvoltat aplicația sau jocul folosind cod nativ, cum ar fi C++, poți încărca un fișier cu simboluri de remediere a erorilor pentru fiecare versiune a aplicației în Play Console. Astfel, vei analiza și remedia mai ușor blocările și erorile ANR.
Important: numai fișierele de asociere compatibile cu ReTrace sunt acceptate pentru decodificarea aplicațiilor compilate în Java. Acesta este același format folosit de ProGuard sau R8.
Pasul 1: generați un fișier de decodificare sau de conversie în simboluri
Pentru a decodifica sau a converti în simboluri blocările și erorile ANR ale aplicației pentru o versiune a aplicației, trebuie mai întâi să generați fișierele necesare pentru aceeași versiune. Pentru ca decodificarea sau conversia în simboluri să funcționeze, trebuie să generați și să încărcați un fișier pentru fiecare versiune nouă a aplicației.
Java: generați un fișier de asociere ProGuardPentru a decodifica urmăririle stivelor Java, trebuie mai întâi să generați un fișier de asociere ProGuard. Pentru a afla cum, accesați site-ul Google Developers.
Pluginul Android Gradle versiunea 4.1 și versiunile ulterioare
Dacă proiectul creează un Android App Bundle, puteți include automat fișierul cu simbolurile de remediere a erorilor. Pentru a include acest fișier, adăugați următoarele informații în fișierul build.gradle
al aplicației:
android.defaultConfig.ndk.debugSymbolLevel = 'FULL'
Notă: limita pentru fișierul cu simboluri de remediere a erorilor este de 800 MB. Dacă amprenta simbolurilor de remediere a erorilor este prea mare, folosește SYMBOL_TABLE
în loc de FULL
pentru a reduce dimensiunea fișierului.
Dacă proiectul creează un APK, folosiți setarea build.gradle de mai sus pentru a genera separat fișierul cu simboluri de remediere a erorilor. Încărcați manual fișierul cu simboluri de remediere a erorilor în Google Play Console, după cum este descris mai jos, la Pasul 2: încărcați un fișier de decodificare sau de conversie în simboluri. În cadrul procesului de creare, pluginul Android Gradle trimite acest fișier în următoarea locație a proiectului:
app/build/outputs/native-debug-symbols/variant-name/native-debug-symbols.zip
Pluginul Android Gradle versiunea 4.0 și versiunile anterioare (și alte sisteme de versiune)
În cadrul procesului de creare a unui app bundle sau APK, pluginul Android Gradle păstrează o copie a bibliotecilor nesimplificate într-un director de proiect. Acest director urmează o structură similară cu:
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
Notă: dacă folosiți alt sistem de versiune, îl puteți modifica pentru a stoca bibliotecile nesimplificate într-un director cu structura necesară de mai sus.
- Arhivați conținutul acestui director:
$ cd app/build/intermediates/cmake/universal/release/obj
$ zip -r symbols.zip .
- Încarcă manual fișierul symbols.zip în Play Console, după cum este descris mai jos, la Pasul 2: încarcă un fișier de decodificare sau de conversie în simboluri.
Limita pentru fișierul cu simboluri de remediere a erorilor este de 800 MB. Dacă fișierul este prea mare, probabil fișierele .so conțin un tabel cu simboluri (nume de funcții) și informații de remediere a erorilor DWARF (nume de fișiere și linii de cod). Acestea nu sunt necesare pentru a face conversia în simboluri a codului și pot fi eliminate prin rularea acestei comenzi:
$OBJCOPY --strip-debug lib.so lib.so.sym
Notă: $OBJCOPY
trimite la versiunea specifică pentru interfața ABI pe care o simplificați, de exemplu:ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy
.
Pasul 2: încărcați un fișier de decodificare sau de conversie în simboluri
Pentru a decodifica sau a converti în simboluri blocările și erorile ANR ale aplicației pentru o versiune a acesteia, trebuie să încărcați fișierele de decodificare sau de conversie în simboluri pentru fiecare versiune a aplicației.
Important: acest pas este necesar numai pentru dezvoltatorii care folosesc APK-uri. Dacă folosești un app bundle și pluginul Android Gradle în versiunea 4.1 sau o versiune ulterioară, nu trebuie să faci nimic. Vom prelua automat fișierul de decodificare din grup și poți trece la Pasul 3: vezi urmăririle decodificate ale stivelor de blocări. Puteți afla mai multe despre app bundle-uri pe site-ul Android Developers.
Încărcați fișiere folosind Play ConsolePentru a încărca un fișier de decodificare sau de conversie în simboluri:
- deschide Play Console;
- selectează o aplicație;
- în meniul din stânga, selectează Testează și lansează > Explorator app bundle;
- folosind selectorul din colțul din dreapta sus, alege artefactul relevant;
- selectează fila Descărcări și derulează în jos la secțiunea Elemente;
- dă clic pe săgeata de încărcare pentru fișierul de asociere sau pe simbolurile de remediere a erorilor, după caz, pentru a încărca fișierul de decodificare sau de conversie în simboluri pentru versiunea aplicației.
Pentru a încărca fișierele folosind API-ul pentru dezvoltatori Google Play, accesați site-ul Google Developers.
Pasul 3: vedeți urmăririle decodificate ale stivelor de blocări
După ce încărcați un fișier de asociere ProGuard sau un fișier cu simboluri de remediere a erorilor pentru o versiune a aplicației, blocările și erorile ANR care apar ulterior vor fi decodificate. Puteți consulta urmăririle decodificate ale stivelor de blocări pentru anumite blocări și erori ANR pe pagina Blocări și erori ANR a aplicației.
- deschide Play Console;
- Selectează o aplicație.
- În meniul din stânga, selectează Monitorizează și îmbunătățește > Detalii de funcționare Android > Blocări și erori ANR.
- Selectează o blocare.
- În secțiunea „Urmăririle stivelor”, veți vedea urmăririle decodificate și convertite în simboluri ale stivelor.
Important: după ce încărcați un fișier de asociere pentru o versiune a aplicației, numai blocările și erorile ANR viitoare pentru versiunea respectivă vor fi decodificate. Blocările și erorile ANR pentru o versiune a aplicației care au loc înainte de a încărca fișierul de asociere respectiv nu vor fi decodificate.
Întrebări frecvente
Nu vreau să folosesc decodificarea / conversia în simboluri din Play Console. Pot face aceste lucruri offline?Play Console folosește ndk-stack pentru a simboliza urmăririle stivelor pentru aplicațiile native și ReTrace pentru blocările Java. Dacă alegi să nu trimiți fișierele de decodificare, poți să copiezi stivele de blocare codificate din Play Console și să folosești instrumentul adecvat offline pentru a le converti în simboluri. Totuși, acest proces trebuie realizat manual pentru fiecare stivă de blocări, lucru care îl încetinește și necesită timp. Dacă oferi fișierele de decodificare, Play Console va gestiona acest lucru pentru tine.
După ce încarci un fișier de asociere ProGuard sau un fișier cu simboluri de remediere a erorilor pentru o versiune a aplicației, numai blocările și erorile ANR care apar ulterior vor fi decodificate. Va trebui să aștepți ca noile blocări și erori ANR să fie raportate de dispozitivele utilizatorilor înainte de a vedea blocările și erorile ANR decodificate în Play Console.
Acest lucru este cauzat de încărcarea unui fișier incomplet de decodificare / conversie în simboluri. Asigurați-vă că includeți fișierele de conversie în simboluri pentru întreaga aplicație, mai ales dacă folosiți un proces de creare complex sau cu mai multe etape. Unul dintre cele mai frecvente motive pentru decodificarea parțială este folosirea unei biblioteci terță parte. În acest caz, puteți obține fișierele de decodificare de la furnizorul bibliotecii.
Fără fișiere de decodificare, aceeași blocare sau eroare ANR pe un dispozitiv pe 32 și pe 64 de biți sau pe un dispozitiv ARM și Intel se vor afișa separat. Dacă oferiți fișiere de decodificare, putem grupa blocările împreună, oferindu-vă o perspectivă mai bună asupra blocărilor și erorilor ANR celor mai importante pentru aplicația dvs.
Dacă uitați să încărcați fișierul pentru o nouă versiune a aplicației, blocările și erorile ANR vor fi din nou codificate. Urmați instrucțiunile de mai sus pentru a-l încărca acum. După ce încărcați un fișier de asociere ProGuard sau un fișier cu simboluri de remediere a erorilor pentru o versiune a aplicației, numai blocările și erorile ANR care apar ulterior vor fi decodificate. Va trebui să așteptați ca noile blocări și erori ANR să fie raportate de dispozitivele utilizatorilor înainte de a vedea blocările și erorile ANR decodificate în Play Console.
Pentru a evita riscul de a uita să încărcați fișierul, modificați procesul de creare pentru a folosi app bundle-uri cu pluginul Android Gradle versiunea 4.1 sau o versiune ulterioară. În acest caz, puteți include automat fișierul cu simboluri de remediere a erorilor în app bundle, urmând instrucțiunile de pe site-ul pentru dezvoltatori Android.
Dacă încărcați fișierul greșit pentru o versiune a aplicației, blocările și erorile ANR vor fi din nou codificate. Pentru a încărca o versiune corectată:
- deschide Play Console;
- selectează o aplicație;
- în meniul din stânga, selectează Testează și lansează > Explorator app bundle;
- folosind selectorul din colțul din dreapta sus, alege artefactul relevant;
- selectează fila Descărcări și derulează în jos la secțiunea Elemente;
- dă clic pe pictograma de ștergere de lângă fișierul incorect de decodificare sau conversie în simboluri.
- După ștergerea versiunii incorecte, dați clic pe pictograma de încărcare și încărcați fișierul corect pentru versiunea aplicației.
După ce încărcați fișierul de asociere ProGuard corect sau fișierul corect cu simboluri de remediere a erorilor pentru o versiune a aplicației, numai blocările și erorile ANR care apar ulterior vor fi decodificate. Va trebui să așteptați ca noile blocări și erori ANR să fie raportate de dispozitivele utilizatorilor înainte de a vedea blocările și erorile ANR decodificate în Play Console.
Sfat: pentru a evita riscul de a încărca o versiune incorectă a fișierului, modificați procesul de creare pentru a folosi app bundle-uri cu pluginul Android Gradle versiunea 4.1 sau o versiune ulterioară. În acest caz, puteți include automat fișierul cu simboluri de remediere a erorilor în app bundle, urmând instrucțiunile de pe site-ul pentru dezvoltatori Android.
Accesați site-ul pentru dezvoltatori Android ca să începeți.
Da.
Uneori, sistemul întâmpină o eroare ANR, însă nu poate să colecteze urmărirea stivei. În acest eveniment, eroarea ANR este afișată pentru o vizualizare mai amplă a stabilității aplicației, însă urmărirea stivei nu se poate afișa. Erorile ANR fără urmărirea stivei sunt grupate după tip și activitate, deci examinarea și remedierea erorilor ANR similare poate contribui la scăderea numărului de erori fără urmărirea stivei.