Els bloquejos i ANR d'Android produeixen una traça de la pila, que és una instantània de la seqüència de funcions imbricades que s'han cridat al programa fins al moment del bloqueig. Aquestes instantànies et poden ajudar a identificar i resoldre qualsevol problema de la font.
Si l'aplicació o el joc s'ha desenvolupat amb Java i utilitzes ProGuard per optimitzar i ofuscar l'aplicació, pots penjar un fitxer de mapatge de ProGuard per a cada versió de l'aplicació a Play Console. Si l'aplicació o el joc s'han desenvolupat amb un codi natiu, com ara C++, pots penjar un fitxer de símbols de depuració per a cada versió de l'aplicació que hi hagi a Play Console. Això facilita l'anàlisi i la correcció dels bloquejos i dels ANR.
Important: només s'admeten fitxers de mapatge compatibles amb ReTrace per desofuscar aplicacions compilades a Java. És el mateix format que utilitza ProGuard o R8.
Pas 1: genera un fitxer de desofuscament o de simbolització
Per desofuscar o simbolitzar els bloquejos i els ANR de l'aplicació, primer has de generar els fitxers necessaris per a la mateixa versió de l'aplicació. Has de generar i pujar un fitxer per a cada versió nova de l'aplicació perquè el desofuscament o la simbolització funcionin.
Java: genera un fitxer de mapatge de ProGuardPer desofuscar traces de pila de Java, primer has de generar un fitxer de mapatge de ProGuard. Per obtenir informació sobre com pots fer-ho, ves al lloc web de Google Developers.
Connector d'Android Gradle 4.1 i versions posteriors
Si el teu projecte crea un Android App Bundle, pots incloure-hi automàticament el fitxer de símbols de depuració. Per incloure-hi aquest fitxer, afegeix la línia següent al fitxer build.gradle
de l'aplicació:
android.defaultConfig.ndk.debugSymbolLevel = 'FULL'
Nota: el límit del fitxer de símbols de depuració és de 800 MB. Si la petjada dels símbols de depuració és massa gran, utilitza SYMBOL_TABLE
en lloc de FULL
per reduir la mida del fitxer.
Si el teu projecte crea un APK, utilitza la configuració de compilació build.grade anterior per generar el fitxer de símbols de depuració per separat. Penja manualment el fitxer de símbols de depuració a Google Play Console, tal com es descriu a continuació al Pas 2: penja un fitxer de desofuscament o de simbolització. Com a part del procés de creació, el connector d'Android Gradle envia aquest fitxer a la ubicació de projecte següent:
app/build/outputs/native-debug-symbols/variant-name/native-debug-symbols.zip
Connector d'Android Gradle 4.0 i versions anteriors (i altres sistemes de compilació)
Com a part del procés de compilació d'un app bundle o d'un APK, el connector d'Android Gradle manté una còpia de les biblioteques sense desmuntar en un directori del projecte. Aquest directori té una estructura similar a aquesta:
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
Nota: si utilitzes un altre sistema de compilació, pots modificar-lo per emmagatzemar les biblioteques sense desmuntar en un directori amb l'estructura requerida que s'ha indicat més amunt.
- Comprimeix el contingut d'aquest directori:
$ cd app/build/intermediates/cmake/universal/release/obj
$ zip -r symbols.zip .
- Penja manualment el fitxer symbols.zip a Play Console, tal com es descriu a continuació al Pas 2: penja un fitxer de desofuscament o de simbolització.
El límit del fitxer de símbols de depuració és de 800 MB. Si el fitxer és massa gran, probablement és perquè els fitxers .so contenen una taula de símbols (noms de funcions) i també informació de depuració de DWARF (noms de fitxers i línies de codi). Aquests elements no són necessaris per simbolitzar el codi i pots suprimir-los executant aquesta ordre:
$OBJCOPY --strip-debug lib.so lib.so.sym
Nota: $OBJCOPY
apunta a la versió específica de l'ABI que estàs suprimint, per exemple:ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy
Pas 2: penja un fitxer de desofuscament o de simbolització
Per desofuscar o simbolitzar els bloquejos i ANR d'una versió de l'aplicació, has de penjar els fitxers de desofuscament o de simbolització de cada versió de l'aplicació.
Important: aquest pas només és obligatori per als desenvolupadors que utilitzen APK. Si fas servir un app bundle i un connector d'Android Gradle 4.1 o versions posteriors, no cal que facis res. Agafarem automàticament el fitxer de desofuscament del paquet i podràs anar al Pas 3: consulta les traces de la pila fallides desofuscades. Pots obtenir més informació sobre els app bundles al lloc web per a desenvolupadors d'Android.
Penjar fitxers amb Play ConsolePer penjar un fitxer de desofuscament o de simbolització:
- Obre Play Console.
- Selecciona una aplicació.
- Al menú de l'esquerra, selecciona
Provar i llançar
> Explorador d'app bundles. - Amb el selector de l'extrem superior dret, tria l'artefacte rellevant.
- Selecciona la pestanya Baixades i desplaça't cap avall fins a la secció "Recursos".
- Fes clic a la fletxa de pujada del fitxer de mapatge o als símbols de depuració segons correspongui per penjar el fitxer de desofuscament o de simbolització de la versió de l'aplicació.
Per penjar fitxers mitjançant l'API Developer de Google Play, ves al lloc web Google Developers.
Pas 3: consulta les traces de la pila fallides desofuscades
Després de penjar un fitxer de mapatge de ProGuard o un fitxer de símbols de depuració per a una versió de l'aplicació, els bloquejos i els ANR que es produeixin posteriorment es desofuscaran. A la pàgina Bloquejos i ANR de l'aplicació, pots consultar les traces de la pila que s'hi hagin desofuscat per a bloquejos i ANR individuals.
- Obre Play Console.
- Selecciona una aplicació.
- Al menú de l'esquerra, selecciona Monitorar i millorar > Android vitals > Bloquejos i ANR.
- Selecciona un bloqueig.
- A la secció "Traces de la pila", veuràs les teves traces de la pila que s'hagin desofuscat o simbolitzat.
Important: després de penjar un fitxer de mapatge d'una versió de l'aplicació, només es desofuscaran els bloquejos i els ANR que es produeixin amb posterioritat. Els bloquejos i ANR d'una versió de l'aplicació que es produeixin abans de penjar el fitxer de mapatge corresponent no es desofuscaran.
Preguntes freqüents
No vull utilitzar el desofuscament o la simbolització de Play Console. Puc fer-ho sense connexió?Play Console utilitza ndk-stack per simbolitzar les traces de la pila en aplicacions natives i ReTrace per als bloquejos de Java. Si decideixes no compartir els fitxers de desofuscament, pots copiar les piles de bloquejos ofuscades de Play Console i utilitzar l'eina adequada sense connexió per simbolitzar-les. Tanmateix, aquest procés s'ha de fer manualment per a cada pila de bloquejos i, per tant, és lent i requereix molt de temps. Si proporciones els fitxers de desofuscament, Play Console durà a terme aquesta tasca.
Després de penjar un fitxer de mapatge de ProGuard o un fitxer de símbols de depuració d'una versió de l'aplicació, només es desofuscaran els bloquejos i ANR que es produeixin amb posterioritat. Hauràs d'esperar un temps que els dispositius dels usuaris informin de bloquejos i ANR nous per poder veure els bloquejos i ANR desofuscats a Play Console.
Això passa perquè s'ha penjat un fitxer de desofuscament o de simbolització incomplet. Assegura't d'incloure els fitxers de simbolització de tota l'aplicació, especialment si fas servir un procés de compilació complex o multifàsic. Una de les raons més habituals per les quals es desofusca parcialment és l'ús d'una biblioteca de tercers. En aquest cas, és possible que puguis obtenir els fitxers de desofuscament del proveïdor de la biblioteca.
Sense fitxers de desofuscament, el mateix bloqueig o ANR en un dispositiu de 32 i de 64 bits, o en un dispositiu ARM i Intel, es mostra per separat. En proporcionar fitxers de desofuscament, podem agrupar aquests bloquejos i oferir-te una perspectiva més completa dels bloquejos i ANR més impactants de la teva aplicació.
Si t'oblides de penjar el fitxer d'una versió nova de l'aplicació, els bloquejos i ANR es tornaran a ofuscar. Segueix les instruccions anteriors per penjar-lo ara. Després de penjar un fitxer de mapatge de ProGuard o un fitxer de símbols de depuració d'una versió de l'aplicació, només es desofuscaran els bloquejos i ANR que es produeixin amb posterioritat. Hauràs d'esperar un temps que els dispositius dels usuaris informin de bloquejos i ANR nous per poder veure els bloquejos i ANR desofuscats a Play Console.
Per evitar el risc d'oblidar-te de penjar el fitxer, et recomanem que canviïs el procés de compilació per utilitzar app bundles amb el connector d'Android Gradle 4.1 o versions posteriors. En aquest cas, pots incloure automàticament el fitxer de símbols de depuració a l'app bundle seguint les instruccions del lloc web de desenvolupadors d'Android.
Si penges un fitxer incorrecte per a una versió de l'aplicació, els bloquejos i ANR es tornaran a ofuscar. Per penjar una versió corregida:
- Obre Play Console.
- Selecciona una aplicació.
- Al menú de l'esquerra, selecciona
Provar i llançar
> Explorador d'app bundles. - Amb el selector de l'extrem superior dret, tria l'artefacte rellevant.
- Selecciona la pestanya Baixades i desplaça't cap avall fins a la secció "Recursos".
- Fes clic a la icona de supressió que hi ha al costat del fitxer de desofuscament o de simbolització incorrecte.
- Un cop suprimida la versió incorrecta, fes clic a la icona de pujada i penja el fitxer correcte per a la versió de l'aplicació.
Després de penjar el fitxer de mapatge de ProGuard o el fitxer de símbols de depuració correcte d'una versió de l'aplicació, només es desofuscaran els bloquejos i ANR que es produeixin amb posterioritat. Hauràs d'esperar un temps que els dispositius dels usuaris informin de bloquejos i ANR nous per poder veure els bloquejos i ANR desofuscats a Play Console.
Consell: per evitar el risc de penjar una versió incorrecta del fitxer, et recomanem que canviïs el procés de compilació per utilitzar app bundles amb el connector d'Android Gradle 4.1 o versions posteriors. En aquest cas, pots incloure automàticament el fitxer de símbols de depuració a l'app bundle seguint les instruccions del lloc web de desenvolupadors d'Android.
Visita el lloc web de desenvolupadors d'Android per començar.
Sí.
De vegades, el sistema pateix un ANR sense poder recollir la traça de la pila. En aquest cas, es mostra l'ANR per oferir-te una visualització més completa de l'estabilitat de l'aplicació, però la traça de la pila no es pot mostrar. Els ANR sense traces de la pila estan agrupats per tipus i activitat, de manera que revisar i corregir els ANR similars pot ajudar a reduir el nombre dels que no tenen traces de la pila.