Sobes.tech
Middle+

Какво бихте направили, ако изданието на приложението се срива там, където работи правилно дебъг версията?

sobes.tech AI

Отговор от AI

  1. Събиране на логове и отчети за сривове: Активирайте и проверете логването в издадената версия (например с Firebase Crashlytics или аналитика). Съберете всички налични отчети за сривове.

  2. Анализ на разликите между билдовете:

    • Оптимизации на компилатора: Издадената версия често използва ProGuard/R8 за обфускиране, минимизиране и оптимизация на кода. Проверете правилата на ProGuard/R8 за грешки, които може да са премахнали необходим код или ресурси, или да са променили поведението на приложението. Изучете генерирания файл mapping.txt за деобфускиране на стек траси.
    • Подписване (signing): Уверете се, че издадената версия е подписана с правилния ключ.
    • Флаг за дебъгване: Уверете се, че в издадената версия android:debuggable е настроен на false.
    • Различия в зависимостите: Проверете версиите на библиотеките, използвани в двата типа билдове.
    • Конфигурации на билдовете (build flavors/types): Изучете gradle файловете за наличието на специфични настройки за издадената версия, които могат да влияят на поведението (например, различни URL адреси на API, изключени функции).
    • Проверка на ресурсите: Уверете се, че всички необходими ресурси (drawable, layout, strings) са налични и достъпни в издадената версия.
  3. Деобфускиране на стек траси: Ако сривът се случва в обфусциран код, използвайте mapping.txt за деобфускиране, за да разберете в коя част от кода става грешката.

  4. Възпроизвеждане на грешката при условия, близки до издаването:

    • Опитайте да съберете издадената версия с деактивирани части на ProGuard/R8, за да стесните търсенето.
    • Създайте локална тестова версия, максимално близка до издадената (например, с използване на ProGuard/R8, но без подписване).
  5. Деактивиране на оптимизации и обфускане: Постепенно изключвайте оптимизациите на ProGuard/R8 в издадената версия (например, изключете обфускането, след това минимизацията), за да определите коя оптимизация причинява проблема.

  6. Логиране в издадената версия: Временно добавете логиране в критичните части на кода в издадената версия, за да проследите изпълнението преди срив.

  7. Външни фактори: Вземете предвид, че поведението може да зависи от средата (например, наличието на интернет връзка, версия на ОС на устройството на потребителя).

  8. Използване на дебъгър: Ако е възможно, свържете се към издадената версия на устройството (което може да е трудно, ако debuggable е false) или използвайте емулатор за опит за възпроизвеждане и отстраняване.

  9. Регресия: Проверете кога е възникнала проблемът (например, след добавяне на нова функция или актуализация на библиотека).

  10. Търсене на известни проблеми: Проверете за известни проблеми с ProGuard/R8 и използваните библиотеки.

android {
    buildTypes {
        release {
            // Временен отказ от обфускане за отстраняване на грешки
            minifyEnabled true // Оставяме минимизацията
            shrinkResources true // Оставяме компресирането на ресурсите
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            // временно изключване на обфускането за отстраняване на грешки
            // consumerProguardFiles 'proguard-debug.pro' // Добавете правила за отстраняване на грешки, ако е необходимо
        }
    }
}