Одмаскиравајте стања стекова о отказивањима или их преводите у симболе

Отказивања и ANR-ови на Android-у праве стање стека, што је преглед секвенце угнежђених функција позваних у програму до тренутка када је отказао. Ови прегледи могу да вам помогну да идентификујете и решите проблеме у извору.

Ако сте апликацију или игру програмирали у Java-и и ако користите ProGuard за оптимизацију и маскирање апликација, можете да отпремите ProGuard фајл мапирања за сваку верзију апликације у Play конзоли. Ако сте апликацију или игру програмирали помоћу матичног кода, попут C++, можете да отпремите фајл са симболима за отклањање грешака за сваку верзију апликације у Play конзоли. То олакшава анализу и исправљање отказивања и ANR-ова.

Важно: За одмаскиравање апликација компајлираних у Java-и подржане су само датотеке за мапирање које су компатибилне са ReTrace-ом. Исти формат користи ProGuard или R8.

1. корак: Генеришите датотеку за одмаскиравање или превођење у симболе

Да бисте одмаскирали отказивања и ANR-ове за верзију апликације или их превели у симболе, прво морате да генеришете потребне датотеке за исту верзију апликације. Морате да генеришете и отпремите датотеку за сваку нову верзију апликације да би одмаскиравање или превођење у симболе функционисали.

Java: Генеришите ProGuard датотеку за мапирање

Да бисте одмаскирали Java стања стекова, прво морате да генеришете ProGuard датотеку за мапирање. Да бисте сазнали како, идите на сајт Google Developers.

Изорни кôд: Генеришите датотеку са симболима за отклањање грешака

Додатна компонента за Android Gradle верзије 4.1 и новијих верзија

Ако пројекат прави Android App Bundle, можете аутоматски да уврстите фајл симбола отклањања грешака у њега. Да бисте уврстили овај фајл, у фајл build.gradle апликације додајте:

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

Напомена: Ограничење за фајл симбола отклањања грешака је 800 MB. Ако симболи за отклањање грешака захтевају превише простора, користите SYMBOL_TABLE уместо FULL да бисте смањили величину фајла.

Ако пројекат прави APK, користите подешавање верзије build.gradle наведено изнад да бисте посебно генерисали датотеку са симболима за отклањање грешака. Ручно отпремите датотеку са симболима за отклањање грешака у Google Play конзолу као што је описано испод у одељку 2. корак: Отпремите датотеку за одмаскиравање или превођење у симболе. Као део превођења и повезивања, додатна компонента за Android Gradle прави ову датотеку на следећој локацији пројекта:

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

Додатна компонента за Android Gradle верзије 4.0 и старијих (и други системи за превођење и повезивање)

Као део процеса превођења и повезивања за скуп апликација или APK, додатна компонента за Android Gradle чува копију непоједностављених библиотека у директоријуму пројекта. Овај директоријум има структуру сличну овој:

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

Напомена: Ако користите други систем за превођење и повезивање, можете да га измените тако да чува непоједностављене библиотеке у директоријуму са захтеваном структуром наведеном изнад.

  1. Компримујте садржај овог директоријума:
    • $ cd app/build/intermediates/cmake/universal/release/obj
    • $ zip -r symbols.zip .
  2. Ручно отпремите фајл symbols.zip у Play конзолу на начин описан испод у одељку 2. корак: Отпремите фајл за одмаскирање или превођење у симболе.

Ограничење за фајл симбола отклањања грешака је 800 MB. Ако је фајл превелик, то је вероватно зато што .so фајлови садрже табелу са симболима (називи функција) и DWARF информације о отклањању грешака (називе фајлова и редове кода). Тај садржај вам није потребан да бисте превели кôд у симболе и можете да га уклоните ако покренете ову команду:

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

Напомена: $OBJCOPY указује на конкретну верзију ABI-ја који уклањате, на пример, ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy

2. корак: Отпремите датотеку за одмаскиравање или превођење у симболе

Да бисте одмаскирали отказивања и ANR-ове апликације за неку њену верзију или их превели у симболе, морате да отпремите датотеке за одмаскиравање или превођење у симболе за сваку верзију апликације.

Важно: Овај корак треба да обаве само програмери који користе APK-ове. Ако користите скуп апликација и додатну компоненту за Android Gradle верзије 4.1 или новије, не морате да радите ништа. Аутоматски ћемо преузети фајл за одмаскирање из пакета и можете да пређете на одељак 3. корак: Прегледајте одмаскирана стања стекова отказивања. Можете да сазнате више о скуповима апликација на сајту за Android програмере.

Отпремајте фајлове помоћу Play конзоле

Да бисте отпремили фајл за одмаскиравање или превођење у симболе:

  1. Отворите Play конзолу.
  2. Изаберите апликацију.
  3. У левом менију изаберите Тестирајте и објавите > Истраживач за скуп апликација.
  4. Помоћу бирача у горњем десном углу изаберите релевантан артефакт.
  5. Изаберите картицу Преузимања и скролујте надоле до одељка Елементи.
  6. Кликните на стрелицу отпремања за фајл за мапирање или симболе за отклањање грешака да бисте отпремили фајл за одмаскирање или превођење у симболе за верзију апликације.
Отпремајте датотеке помоћу Google Play Developer API-ја

Да бисте отпремали датотеке помоћу Google Play Developer API-ја, идите на сајт Google Developers.

3. корак: Прегледајте одмаскирана стања стекова о отказивањима

Када отпремите ProGuard датотеку за мапирање или датотеку са симболима за отклањање грешака за верзију апликације, одмаскиравају се отказивања и ANR-ови до којих дође после тога. Можете да потражите појединачна отказивања и ANR-ове у одмаскираним стањима стекова на страници Отказивања и ANR-ови апликације.

  1. Отворите Play конзолу.
  2. Изаберите апликацију.
  3. У левом менију изаберите Надгледајте и побољшавајте > Android vitals > Отказивања и ANR-ови.
  4. Изаберите отказивање.
  5. У одељку „Стања стекова“ приказују се одмаскирана стања стекова и стања стекова преведена у симболе.

Важно: Када отпремите датотеку за мапирање за верзију апликације, одмаскиравају се само будућа отказивања и ANR-ови за ту верзију апликације. Отказивања и ANR-ови за верзију апликације до којих дође пре него што отпремите одговарајућу датотеку за мапирање се не одмаскиравају.

Честа питања

Не желим да користим одмаскиравање или превођење у симболе у Play конзоли. Да ли то могу да радим офлајн?

Play конзола користи ndk-stack за симболизацију стања стекова за основне апликације и ReTrace за Java отказивања. Ако одлучите да не делите фајлове за одмаскирање, можете да копирате маскиране стекове отказивања из Play конзоле и користите одговарајућу алатку офлајн да бисте их превели у симболе. Али, овај процес мора да се обави ручно за сваки стек отказивања, што је споро и дуготрајно. Ако наведете фајлове за одмаскирање, Play конзола ће то радити уместо вас.

Отпремио/ла сам фајл за одмаскирање или превођење у симболе. Зашто су отказивања и ANR-ови и даље маскирани?

Када за верзију апликације отпремите ProGuard фајл за мапирање или фајл са симболима за отклањање грешака, само отказивања и ANR-ови до којих дође после тога ће бити одмаскирани. Треба да сачекате да уређаји корисника пријаве нова отказивања и ANR-ове да бисте видели одмаскирана отказивања и ANR-ове у Play конзоли.

Зашто су, после отпремања фајла за одмаскирање или превођење у симболе, отказивања и ANR-ови само делимично одмаскирани?

Разлог је то што сте отпремили непотпуни фајл за одмаскиравање или превођење у симболе. Обавезно уврстите фајлове за превођење у симболе за целу апликацију, нарочито ако користите сложено превођење и повезивање или ако се оно састоји од више фаза. До делимичног одмаскиравања најчешће долази када се користи независна библиотека. У том случају можете да преузмете фајлове за одмаскиравање од добављача библиотеке.

Зашто после отпремања фајла за одмаскиравање или превођење у симболе добијам мање отказивања и ANR-ова, али су они озбиљнији?

Ако немате фајлове за одмаскиравање, исто отказивање или ANR на 32-битном и 64-битном уређају или на ARM и Intel уређају приказује се одвојено. Ако наведете датотеке за одмаскиравање, ова отказивања можемо да групишемо и да вам пружамо бољи увид у најзначајнија отказивања и ANR-ове за апликацију.

Шта се дешава ако заборавим да отпремим датотеку?

Ако заборавите да отпремите датотеку за нову верзију апликације, отказивања и ANR-ови поново постају маскирани. Пратите претходно наведена упутства да бисте је отпремили сада. Када за верзију апликације отпремите ProGuard фајл за мапирање или фајл са симболима за отклањање грешака, одмаскиравају се само отказивања и ANR-ови до којих дође после тога. Треба да сачекате да уређаји корисника пријаве нова отказивања и ANR-ове да бисте видели одмаскирана отказивања и ANR-ове у Play конзоли.

Да не бисте заборавили да отпремите датотеку, размислите о томе да промените превођење и повезивање тако да се користе скупови апликација са додатном компонентом за Android Gradle верзије 4.1 или новије. У том случају, можете аутоматски да уврстите датотеку са симболима за отклањање грешака у скуп апликација пратећи упутства на сајту за Android програмере.

Шта се догађа ако отпремим погрешну датотеку?

Ако отпремите погрешну датотеку за верзију апликације, отказивања и ANR-ови поново постају маскирани. Да бисте отпремили исправљену верзију:

  1. Отворите Play конзолу.
  2. Изаберите апликацију.
  3. У левом менију изаберите Тестирајте и објавите > Истраживач за скуп апликација
  4. Помоћу бирача у горњем десном углу изаберите релевантан артефакт.
  5. Изаберите картицу Преузимања и скролујте надоле до одељка Елементи.
  6. Кликните на икону за брисање поред неисправног фајла за одмаскирање или превођење у симболе.
  7. Када избришете неисправну верзију, кликните на икону за отпремање и отпремите исправну датотеку за верзију апликације.

Када отпремите одговарајућу ProGuard датотеку за мапирање или датотеку са симболима за отклањање грешака за верзију апликације, одмаскиравају се само отказивања и ANR-ови до којих дође после тога. Треба да сачекате да уређаји корисника пријаве нова отказивања и ANR-ове да бисте видели одмаскирана отказивања и ANR-ове у Play конзоли.

Савет: Да вам се не би десило да отпремите неисправну верзију датотеке, не би било лоше да промените превођење и повезивање тако да се користе скупови апликација са додатном компонентом за Android Gradle верзије 4.1 или новије. У том случају, можете аутоматски да уврстите датотеку са симболима за отклањање грешака у скуп апликација пратећи упутства на сајту за Android програмере.

Тренутно користим APK-ове. Како да пређем на коришћење скупова апликација?

За почетак посетите сајт за Android програмере.

Моја апликација садржи и изворни и Java кôд. Могу ли да отпремим изворну датотеку за превођење у симболе и Java датотеку за одмаскиравање?

Да.

Зашто неки ANR-ови не приказују стање стека?

Систем повремено наиђе на ANR, али не може да прикупи стање стека. У овом случају, ANR се приказује да бисте добили потпунији преглед стабилности апликације, али стање стека не може да се прикаже. ANR-ови без стања стека се групишу према типу и активности, па прегледање и исправљање сличних ANR-ова може да помогне у смањењу броја оних без стања стека.

Да ли вам је ово било корисно?

Како то можемо да побољшамо?

Треба вам додатна помоћ?

Пробајте следеће кораке:

Претрага
Обриши претрагу
Затвори претрагу
Главни мени
3649093140445668896
true
Центар за помоћ за претрагу
true
true
true
true
true
92637
false
false