Sobes.tech
Middle+

Wat zou je doen als de release-build van de applicatie op de plek vastloopt waar de debug-build correct werkt?

sobes.tech AI

Antwoord van AI

  1. Logs en crashrapporten verzamelen: Activeer en controleer de logging in de release-build (bijvoorbeeld met Firebase Crashlytics of analyse). Verzamel alle beschikbare crashrapporten.

  2. Analyseer verschillen tussen builds:

    • Compileroptimalisaties: De release-build gebruikt vaak ProGuard/R8 om code te obfuscaten, minimaliseren en optimaliseren. Controleer de ProGuard/R8-regels op fouten die noodzakelijke code of resources kunnen hebben verwijderd of het gedrag van de app hebben gewijzigd. Bestudeer het gegenereerde mapping.txt-bestand om stack traces te deobfuscaten.
    • Handtekeningen (signing): Zorg dat de release-build is ondertekend met de juiste sleutel.
    • Debuggable-vlag: Zorg dat in de release-build android:debuggable op false staat.
    • Verschillen in afhankelijkheden: Controleer de versies van de bibliotheken die in beide build-typen worden gebruikt.
    • Buildconfiguraties (build flavors/types): Bekijk de gradle-bestanden op specifieke instellingen voor de release die het gedrag kunnen beïnvloeden (bijvoorbeeld verschillende API-URL's, uitgeschakelde functies).
    • Controleer resources: Zorg dat alle benodigde resources (drawable, layout, strings) aanwezig en toegankelijk zijn in de release-build.
  3. Deobfuscatie van stack traces: Als de crash plaatsvindt in geobfusceerde code, gebruik mapping.txt om de stack trace te deobfuscaten en te begrijpen waar de fout optreedt.

  4. Herhaal de fout onder omstandigheden die lijken op de release:

    • Probeer een release-build te maken met gedeactiveerde delen van ProGuard/R8 om de zoekruimte te verkleinen.
    • Maak een lokale testbuild die zo dicht mogelijk bij de release ligt (bijvoorbeeld met ProGuard/R8, maar zonder release-ondertekening).
  5. Deactiveer optimalisaties en obfuscatie: Schakel gradueel de optimalisaties van ProGuard/R8 uit in de release (bijvoorbeeld, deobfuscatie uitschakelen, daarna minimalisatie), om te bepalen welke optimalisatie het probleem veroorzaakt.

  6. Logging in de release-build: Voeg tijdelijk logging toe in kritieke delen van de code in de release-build om de uitvoering tot de crash te volgen.

  7. Controleer externe factoren: Houd er rekening mee dat het gedrag afhankelijk kan zijn van de omgeving (bijvoorbeeld internetverbinding, OS-versie op het apparaat van de gebruiker).

  8. Gebruik de debugger: Als het mogelijk is, sluit aan op de release-build op het apparaat (wat moeilijk kan zijn als debuggable op false staat) of gebruik een emulator om het probleem te reproduceren en te debuggen.

  9. Regressie (indien mogelijk): Controleer wanneer het probleem is ontstaan (bijvoorbeeld na het toevoegen van een nieuwe functie of het bijwerken van een bibliotheek).

  10. Zoek naar bekende problemen: Controleer bekende problemen met ProGuard/R8 in de gebruikte bibliotheken.

android {
    buildTypes {
        release {
            // Voorbeeld van tijdelijke uitschakeling van obfuscatie voor debugging
            minifyEnabled true // Minimale code
            shrinkResources true // Resources comprimeren
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            // tijdelijk uitschakelen van obfuscatie voor debugging
            // consumerProguardFiles 'proguard-debug.pro' // Voeg indien nodig debuggingregels toe
        }
    }
}