I-deobfuscate o i-symbolicate ang mga stack trace ng pag-crash

Bumubuo ng stack trace ang mga pag-crash at ANR sa Android, na snapshot ng mga pagkakasunod-sunod na naka-nest na function na tinukoy sa iyong program hanggang sa sandaling nag-crash ito. Makakatulong sa iyo ang mga snapshot na ito na matukoy at maayos ang anumang problema sa source.

Kung na-develop ang iyong app o laro gamit ang Java at gumagamit ka ng ProGuard para i-optimize at i-obfuscate ang mga app mo, puwede kang mag-upload ng ProGuard mapping file para sa bawat bersyon ng iyong app sa Play Console. Kung na-develop ang iyong app o laro sa pamamagitan ng native code, tulad ng C++, makakapag-upload ka ng file ng mga debug symbol para sa bawat bersyon ng app mo sa Play Console. Mas pinapadali nitong masuri at maayos ang iyong mga pag-crash at ANR.

Mahalaga: Ang mga mapping file na compatible sa ReTrace lang ang sinusuportahan para sa deobfuscation ng mga app na na-compile sa Java. Katulad nito ang format na ginagamit ng ProGuard o R8.

Hakbang 1: Bumuo ng file ng deobfuscation o symbolication

Para i-deobfuscate o i-symbolicate ang mga pag-crash at ANR ng iyong app para sa isang bersyon ng app mo, kailangan mo munang buuin ang mga kinakailangang file para sa parehong bersyon ng iyong app. Dapat kang bumuo o mag-upload ng file para sa bawat bagong beryson ng iyong app para gumana ang deobfuscation o symbolication.

Java: Bumuo ng ProGuard mapping file

Para i-deobfuscate ang mga stack trace sa Java, kailangan mo munang bumuo ng ProGuard mapping file. Para matuto kung paano bumuo nito, pumunta sa site ng Google Developers.

Native: Bumuo ng file ng mga debug symbol

Bersyon ng plugin ng Android Gradle na 4.1 at mas bago

Kung bubuo ang iyong proyekto ng Android App Bundle, puwede kang awtomatikong magsama ng file ng mga debug symbol dito. Para isama ang file na ito, idagdag sa file na build.gradle ng iyong app ang mga sumusunod:

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

Tandaan: Ang limitasyon para sa file ng mga debug symbol ay 800 MB. Kung masyadong malaki ang footprint ng mga debug symbol mo, gamitin ang SYMBOL_TABLE sa halip na FULL para mabawasan ang laki ng file.

Kung bubuo ang iyong proyekto ng APK, gamitin ang setting ng build na build.gradle sa itaas para mabuo ang file ng mga debug symbol nang magkahiwalay. Manual na i-upload ang file ng mga debug symbol sa Google Play Console gaya ng inilalarawan sa ibaba sa Hakbang 2: Mag-upload ng file ng deobfuscation o symbolication. Bilang bahagi ng proseso ng build, ilalabas ng plugin ng Android Gradle ang file na ito sa sumusunod na lokasyon ng proyekto:

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

Bersyon ng plugin ng Android Gradle na 4.0 at mas luma (at iba pang system ng build)

Bilang bahagi ng proseso ng build para sa isang app bundle o APK, nagtatabi ang plugin ng Android Gradle ng kopya ng mga na-unstrip na library sa isang directory ng proyekto. Ang directory na ito ay mayroong sinusunod na istrukturang katulad nito:

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

Tandaan: Kung gagamit ka ng ibang system ng build, puwede mo itong baguhin para mag-store ng mga na-unstrip na library sa isang directory gamit ang kinakailangang istruktura sa itaas.

  1. I-zip ang mga content ng directory na ito:
    • $ cd app/build/intermediates/cmake/universal/release/obj
    • $ zip -r symbols.zip .
  2. Manual na i-upload ang file na symbols.zip sa Play Console gaya ng inilalarawan sa ibaba sa Hakbang 2: Mag-upload ng file ng deobfuscation o symbolication.

Ang limitasyon para sa file ng mga debug symbol ay 800 MB. Kung masyadong malaki ang file mo, malamang na dahil ito sa naglalaman ang iyong mga .so na file ng talahanayan ng symbol (mga pangalan ng function), at impormasyon sa pag-debug ng DWARF (mga pangalan ng file at linya ng code). Hindi kailangan ang mga ito para i-symbolicate ang iyong code, at maaalis ang mga ito sa pamamagitan ng paggamit sa command na ito:

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

Tandaan: Nakatuon ang $OBJCOPY sa partikular na bersyon ng ABI na sini-strip mo, halimbawa:ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy

Hakbang 2: Mag-upload ng file ng deobfuscation o symbolication

Para i-deobfuscate o i-symbolicate ang mga pag-crash at ANR ng app mo para sa isang bersyon ng iyong app, dapat mong i-upload ang mga file ng deobfuscation o symbolication para sa bawat bersyon ng iyong app.

Mahalaga: Kinakailangan lang ang hakbang na ito para sa mga developer na gumagamit ng mga APK. Kung gumagamit ka ng app bundle at bersyon ng plugin ng Android Gradle na 4.1 o mas bago, wala ka nang gagawin. Awtomatiko naming kukunin ang file ng deobfuscation mula sa bundle at makakalaktaw ka sa Hakbang 3: Tingnan ang mga na-deobfuscate na stack trace ng pag-crash. Puwede kang matuto pa tungkol sa mga app bundle sa site ng Mga Developer ng Android.

Mag-upload ng mga file gamit ang Play Console

Para mag-upload ng file ng deobfuscation o symbolication:

  1. Buksan ang Play Console.
  2. Pumili ng app.
  3. Sa kaliwang menu, piliin ang Release > Explorer ng app bundle.
  4. Gamit ang picker sa kanang sulok sa itaas, piliin ang nauugnay na artifact.
  5. Piliin ang tab na Mga Download at mag-scroll pababa sa seksyong "Mga Asset."
  6. I-click ang arrow ng pag-upload para sa mapping file o sa mga debug symbol kung naaangkop para i-upload ang file ng deobfuscation o symbolication para sa bersyon ng iyong app.
Mag-upload ng mga file gamit ang Google Play Developer API

Para mag-upload ng mga file gamit ang Google Play Developer API, pumunta sa site ng Google Developers.

Hakbang 3: Tingnan ang mga na-deobfuscate na stack trace ng pag-crash

Pagkatapos mong mag-upload ng ProGuard mapping file o file ng mga debug symbol para sa isang bersyon ng iyong app, made-deobfuscate ang mga pag-crash at ANR na mangyayari pagkatapos nito. Masusuri mo ang mga na-deobfuscate na stack trace para sa mga indibidwal na pag-crash at ANR sa page ng Mga Pag-crash at ANR ng iyong app.

  1. Buksan ang Play Console.
  2. Pumili ng app.
  3. Sa kaliwang menu, piliin ang Kalidad > vitals ng Android > Mga Pag-crash at ANR.
  4. Pumili ng pag-crash.
  5. Sa seksyong "Mga Stack Trace," makikita mo ang iyong mga na-deobfuscate at na-symbolicate na stack trace.

Mahalaga: Kapag nakapag-upload ka na ng mapping file para sa isang bersyon ng iyong app, ang mga pag-crash at ANR lang sa hinaharap para sa bersyong iyon ng app mo ang made-deobfuscate. Hindi made-deobfuscate ang mga pag-crash at ANR para sa isang bersyon ng iyong app na nangyari bago mo ma-upload ang kaukulang mapping file nito.

Mga madalas itanong (FAQ)

Ayaw kong gamitin ang deobfuscation/symbolication ng Play Console. Puwede ko bang gawin na lang ito offline?

Ginagamit ng Play Console ang ndk-stack para i-symbolize ang mga stack trace para sa mga native na app, at ReTrace para sa mga pag-crash sa Java. Kung pipiliin mong hindi ibahagi ang iyong mga file ng deobfuscation, makokopya mo ang mga na-obfuscate na stack ng pag-crash mula sa Play Console at magagamit mo ang naaangkop na tool offline para i-symbolicate ang mga ito. Gayunpaman, dapat gawin ang prosesong ito nang manual para sa bawat stack ng pag-crash, na magpapabagal dito at makakaubos ng oras. Sa pamamagitan ng pagbibigay ng iyong mga file ng deobfuscation, papangasiwaan ito ng Play Console para sa iyo.

Na-upload ko na ang file ng deobfuscation/symbolication, pero bakit na-obfuscate pa rin ang mga pag-crash at ANR ko?

Pagkatapos mong mag-upload ng ProGuard mapping file o file ng mga debug symbol para sa isang bersyon ng iyong app, ang mga pag-crash at ANR lang na mangyayari pagkatapos nito ang made-deobfuscate. Kakailanganin mong hintaying iulat ng mga device ng mga user ang mga bagong pag-crash at ANR bago mo makita ang mga na-deobfuscate na pag-crash at ANR sa Play Console.

Pagkatapos i-upload ang file ng deobfuscation/symbolication, bakit bahagyang na-deobfuscate lang ang mga pag-crash at ANR ko?

Dulot ito ng pag-upload ng hindi kumpletong file ng deobfuscation/symbolication. Tiyaking isasama mo ang mga file ng symbolication para sa iyong buong app, lalo na kung gagamit ka ng kumplikado o proseso ng build na may maraming yugto. Isa sa pinakakaraniwang dahilan ng bahagyang deobfuscation ay kung gumagamit ka ng third-party na library. Sa sitwasyong ito, posible mong makuha ang mga file ng deobfuscation mula sa provider ng library.

Pagkatapos i-upload ang file ng deobfuscation/symbolication, bakit mukhang nakakakuha ako ng mas kaunti, pero mas malalang pag-crash at ANR?

Kung walang file ng deobfuscation, ipapakita nang hiwalay ang parehong pag-crash o ANR sa 32-bit at 64-bit na device, o sa ARM at Intel device. Sa pamamagitan ng pagbibigay ng mga file ng deobfuscation, puwede naming pagsama-samahin ang mga pag-crash na ito, na mabigyan ka ng mas magandang pananaw ng mga pag-crash at ANR na may pinakamalaking epekto para sa iyong app.

Ano ang mangyayari kung makakalimutan kong i-upload ang file?

Kung makakalimutan mong i-upload ang file para sa bagong bersyon ng iyong app, babalik sa pagiging nao-obfuscate ang mga pag-crash at ANR. Sundin ang mga tagubilin sa itaas para i-upload ito ngayon. Pagkatapos mong mag-upload ng ProGuard mapping file o file ng mga debug symbol para sa isang bersyon ng iyong app, ang mga pag-crash at ANR lang na mangyayari pagkatapos nito ang made-deobfuscate. Kakailanganin mong hintaying iulat ng mga device ng mga user ang mga bagong pag-crash at ANR bago mo makita ang mga na-deobfuscate na pag-crash at ANR sa Play Console.

Para maiwasan ang panganib na makalimutang i-upload ang file, pag-isipang palitan ang iyong proseso ng build para gumamit ng mga app bundle na may bersyon ng plugin ng Android Gradle na 4.1 o mas bago. Sa sitwasyong ito, puwede mong awtomatikong isama sa app bundle ang file ng mga debug symbol sa pamamagitan ng pagsasagawa sa mga tagubilin sa site ng Mga Developer ng Android.

Anong mangyayari kung maling file ang maa-upload ko?

Kung maling file ang maa-upload mo para sa isang bersyon ng iyong app, babalik sa pagiging na-obfuscate ng mga pag-crash at ANR. Para mag-upload ng naitamang bersyon:

  1. Buksan ang Play Console.
  2. Pumili ng app.
  3. Sa kaliwang menu, piliin ang Release > Explorer ng app bundle
  4. Gamit ang picker sa kanang sulok sa itaas, piliin ang nauugnay na artifact.
  5. Piliin ang tab na Mga Download at mag-scroll pababa sa seksyong "Mga Asset."
  6. I-click ang icon ng i-delete sa tabi ng maling file ng deobfuscation o symbolication.
  7. Kapag na-delete na ang maling bersyon, i-click ang icon ng i-upload at i-upload ang tamang file para sa bersyon ng iyong app.

Pagkatapos mong i-upload ang tamang ProGuard mapping file o file ng mga debug symbol para sa isang bersyon ng iyong app, ang mga pag-crash at ANR lang na mangyayari pagkatapos nito ang made-deobfuscate. Kakailanganin mong hintaying iulat ng mga device ng mga user ang mga bagong pag-crash at ANR bago mo makita ang mga na-deobfuscate na pag-crash at ANR sa Play Console.

Tip: Para maiwasan ang panganib na makalimutang i-upload ang file, pag-isipang palitan ang iyong proseso ng build para gumamit ng mga app bundle na may bersyon ng plugin ng Android Gradle na 4.1 o mas bago. Sa sitwasyong ito, puwede mong awtomatikong isama sa app bundle ang file ng mga debug symbol sa pamamagitan ng pagsasagawa sa mga tagubilin sa site ng Mga Developer ng Android.

Kasalukuyan akong gumagamit ng mga APK. Paano ako makakalipat sa paggamit ng mga app bundle?

Bisitahin ang site ng Mga Developer ng Android para magsimula.

May native at Java code ang app ko. Puwede ko bang i-upload ang native na file ng symbolication at file ng deobfuscation sa Java?

Oo.

Bakit walang ipinapakitang stack trace ang ilang ANR?

Paminsan-minsan, nakakaranas ng ANR ang system pero hindi nito nakukuha ang stack trace. Sa ganitong sitwasyon, ipapakita ang ANR para magbigay sa iyo ng mas kumpletong pananaw sa stability ng app mo, pero hindi maipapakita ang mismong stack trace. Nakagrupo ang mga ANR na walang stack trace ayon sa uri at aktibidad, kaya posibleng makatulong ang pagsusuri at pag-aayos ng magkakatulad na ANR na mabawasan ang bilang ng walang stack trace.

Nakatulong ba ito?

Paano namin mapapaganda ito?

Kailangan ng higit pang tulong?

Subukan ang mga susunod na hakbang na ito:

Search
I-clear ang paghahanap
Isara ang paghahanap
Pangunahing menu
4105376866932292492
true
Maghanap sa Help Center
true
true
true
true
true
92637
false
false