Як виконувати деобфускацію або символізацію записів трасування стека під час збоїв

Дані про збої і помилки ANR в Android утворюють трасування стека, тобто короткий огляд послідовності виклику вбудованих функцій у вашій програмі до того, як у ній сталася помилка. За допомогою цих даних ви можете виявляти й вирішувати будь-які проблеми вихідного коду.

Якщо додаток або гру розроблено на основі Java й ви виконуєте їх обфускацію і оптимізацію за допомогою ProGuard, ви можете додати файл зіставлення ProGuard для кожної версії свого додатка в Play Console. Якщо додаток або гру розроблено за допомогою нативного коду, як-от C++, додавайте натомість файли із символами налагодження. Так легше аналізувати й усувати збої і помилки 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 МБ. Якщо символи налагодження займають більше місця й потрібно зменшити розмір файлу, задайте значення SYMBOL_TABLE замість FULL.

Якщо для проекту створюється файл APK, окремо створіть файл із символами налагодження за допомогою вказаного вище параметра складання build.gradle. Вручну завантажте в Google Play Console файл із символами налагодження, як описано нижче в розділі Крок 2. Завантажте файл деобфускації або символізації. У процесі складання плагін Android Gradle виводить цей файл у такому розташуванні проекту:

  • app/build/outputs/native-debug-symbols/nazva_varianta/native-debug-symbols.zip

Плагін Android Gradle 4.0 і старіших версій (та інші системи складання)

Під час складання набору App Bundle або файлу 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 Console, як описано нижче в розділі Крок 2. Додайте файл деобфускації або символізації.

Максимальний розмір файлу із символами налагодження становить 800 МБ. Якщо ваш файл завеликий, імовірно, файли .so містять таблицю символів (назви функцій), а також інформацію про налагодження DWARF (назви файлів і рядки коду). Вони не потрібні для символізації коду, тому ви можете вилучити їх, виконавши таку команду:

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

Примітка: $OBTCOPY вказує на певну версію інтерфейсу ABI, який ви очищуєте, наприклад: ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy

Крок 2. Завантажте файл деобфускації або символізації

Щоб виконати деобфускацію або символізацію збоїв і помилок ANR певної версії свого додатка, спочатку завантажте файли деобфускації або символізації для кожної його версії.

Важливо: цей крок призначений лише для розробників, які використовують файли APK. Якщо ви використовуєте набір App Bundle і плагін Android Gradle 4.1 або новішої версії, вам не потрібно нічого робити: ми автоматично витягнемо файл деобфускації з набору. Ви можете перейти до дій, наведених у розділі Крок 3. Перегляньте деобфусковані трасування стеків під час збою. Дізнатися більше про набори App Bundle можна на сайті розробників Android.

Як завантажувати файли за допомогою Play Console

Щоб завантажити файл деобфускації або символізації:

  1. Відкрийте Play Console.
  2. Виберіть додаток.
  3. У меню ліворуч натисніть Випуск > App Bundle Explorer.
  4. У верхньому правому куті виберіть потрібний артефакт.
  5. Перейдіть на вкладку Завантаження й прокрутіть униз до розділу "Об’єкти".
  6. Натисніть стрілку додавання файлу зіставлення або символів налагодження, щоб передати відповідний файл для своєї версії додатка.
Як завантажувати файли за допомогою Google Play Developer API

Щоб завантажити файли за допомогою Google Play Developer API, перейдіть на сайт Google Developers.

Крок 3. Перегляньте деобфусковані записи трасування стека під час збою

Коли ви завантажите файл зіставлення ProGuard або файл із символами налагодження для версії свого додатка, подальші збої та помилки ANR деобфускуватимуться. На сторінці Збої та помилки ANR можна переглянути деобфусковані записи трасування стека для окремих подій.

  1. Відкрийте Play Console.
  2. Виберіть додаток.
  3. У меню ліворуч виберіть Якість > Android Vitals > Збої та помилки ANR.
  4. Виберіть збій.
  5. У розділі "Трасування стека" ви побачите деобфусковані й символізовані записи.

Важливо: коли ви завантажите файл зіставлення для версії свого додатка, деобфускуватимуться лише її майбутні збої та помилки ANR. Дані про проблеми, які виникли до завантаження відповідного файлу зіставлення, не буде деобфусковано.

Поширені запитання

Я не хочу використовувати деобфускацію або символізацію в Play Console. Чи можна це зробити офлайн?

Play Console символізує трасування стеків для нативних додатків за допомогою інструмента ndk-stack і збої в Java за допомогою ReTrace. Якщо ви не хочете ділитися своїми файлами деобфускації, скопіюйте обфусковані стеки збоїв із Play Console і символізуйте їх офлайн за допомогою відповідного інструмента. Однак ці дії потрібно виконувати вручну для кожного стека збою, що займає чимало часу. Використовуючи ваші файли деобфускації, Play Console зробить це за вас.

Файл деобфускації або символізації додано, але дані про мої збої і помилки ANR досі обфусковані. Чому?

Коли ви додасте файл зіставлення ProGuard або файл із символами налагодження для версії свого додатка, деобфускуватимуться лише дані майбутніх збоїв і помилок ANR. Може пройти деякий час, перш ніж пристрої користувачів почнуть повідомляти про нові збої і помилки ANR. Тому деобфусковані дані з’являться в Play Console не одразу.

Чому після додавання файлу деобфускації або символізації дані про мої збої і помилки ANR деобфусковано лише частково?

Причиною цього може бути завантаження неповного файлу деобфускації або символізації. Переконайтеся, що ви включили файли символізації для цілого додатка, особливо якщо ви використовуєте багатокомпонентний або багатоетапний процес складання. Одна з найтиповіших причин часткової деобфускації – використання бібліотек сторонніх розробників. У такому разі ви можете отримати файли деобфускації від розробника бібліотеки.

Після завантаження файлу деобфускації або символізації спостерігається менше збоїв або помилок ANR, однак вони серйозніші. Чому?

Без файлів деобфускації ті самі збої чи помилки ANR на 32- і 64-бітовому пристроях або на пристроях ARM та Intel відображаються окремо. За допомогою таких файлів ми можемо об’єднувати ці помилки, щоб ви мали краще уявлення про ті з них, які найбільше впливають на ваш додаток.

Що трапиться, якщо я забуду завантажити файл?

Якщо ви забудете завантажити файл для нової версії свого додатка, збої та помилки ANR будуть обфусковані. Щоб завантажити його зараз, виконайте наведені вище дії. Коли ви завантажите файл зіставлення ProGuard або файл із символами налагодження для версії свого додатка, деобфускуватимуться лише дані майбутніх збоїв і помилок ANR. Може пройти деякий час, перш ніж пристрої користувачів почнуть повідомляти про нові збої і помилки ANR. Тому деобфусковані дані з’являться в Play Console не одразу.

Щоб ви не забули завантажити файл, радимо змінити процес складання так, щоб використовувати набори App Bundle із плагіном Android Gradle 4.1 або новішої версії. У такому разі ви зможете автоматично включити файл із символами налагодження в набір App Bundle, виконавши вказівки на сайті розробників Android.

Що буде, якщо я завантажу неправильний файл?

Якщо ви завантажите неправильний файл для версії свого додатка, збої та помилки ANR будуть обфусковані. Щоб завантажити правильну версію:

  1. Відкрийте Play Console.
  2. Виберіть додаток.
  3. У меню ліворуч натисніть Випуск > App Bundle Explorer.
  4. У верхньому правому куті виберіть потрібний артефакт.
  5. Перейдіть на вкладку Завантаження й прокрутіть униз до розділу "Об’єкти".
  6. Натисніть значок видалення поруч із неправильним файлом деобфускації або символізації.
  7. Видаливши неправильний файл, натисніть значок завантаження й надайте потрібний файл для версії додатка.

Коли ви завантажите правильний файл зіставлення ProGuard або файл із символами налагодження для версії свого додатка, деобфускуватимуться лише майбутні збої та помилки ANR. Може пройти деякий час, перш ніж пристрої користувачів почнуть повідомляти про нові збої та помилки ANR. Тому деобфусковані дані з’являться в Play Console не відразу.

Порада: щоб зменшити ймовірність завантаження неправильної версії файлу, радимо змінити процес складання додатка так, щоб використовувати набори App Bundle із плагіном Android Gradle 4.1 або новішої версії. У такому разі ви зможете автоматично включити файл із символами налагодження в набір App Bundle, виконавши вказівки на сайті розробників Android.

Зараз я використовую файли APK. Як перейти на набори App Bundle?

Потрібну інформацію ви знайдете на сайті розробників Android.

Мій додаток містить нативний код і код Java. Чи можна завантажити нативний файл символізації та файл деобфускації Java?

Так.

Чому для деяких помилок ANR не відображаються записи трасування стека?

Іноді система не може записати трасування стека, коли в ній стається помилка ANR. У такому разі реєструється помилка ANR (щоб дати вам повніше уявлення про стабільність додатка), але трасування стека не виводиться. Помилки ANR без записів трасування стека групуються за типами й діями. Тому ви можете зменшувати їх кількість, переглядаючи та виправляючи схожі помилки.

Чи корисна ця інформація?

Як можна її покращити?

Потрібна додаткова допомога?

Спробуйте дії нижче.

Пошук
Очистити пошук
Закрити пошук
Головне меню
14713788421054277604
true
Пошук у довідковому центрі
true
true
true
true
true
92637
false
false