Összeomlási veremkivonatok deobfuszkálása és szimbolizálása

Az összeomlások és ANR-ek Androidon veremkivonatot hoznak létre, amely a programodban a program összeomlása pillanatáig behívott beágyazott függvények sorozatának a pillanatképe. Ezeknek a pillanatképeknek a segítségével azonosíthatod és kijavíthatod a forrásban lévő esetleges problémákat.

Ha az alkalmazásodat vagy játékodat Java segítségével fejlesztetted, és a ProGuardot használod az alkalmazásod optimalizálására és obfuszkálására, lehetőséged van arra, hogy a Play Console felületén az alkalmazás minden egyes verziójához feltölts ProGuard hozzárendelési fájlt. Ha az alkalmazásodat vagy játékodat natív kód, például C++ segítségével fejlesztetted, lehetőséged van arra, hogy a Play Console felületén az alkalmazás minden egyes verziójához feltölts szimbolizációs fájlt hibaelhárításhoz. Ez megkönnyíti az összeomlások és ANR-hibák elemzését és javítását.

Fontos: A deobfuszkálással kapcsolatban a rendszer csak a ReTrace-kompatibilis hozzárendelési fájlokat támogatja. Ez az a formátum, amelyet a ProGuard és az R8 is használ.

1. lépés: Deobfuszkációs vagy szimbolizációs fájl létrehozása

Az alkalmazásod bármely verziójánál az összeomlások és ANR-ek deobfuszkálásához vagy szimbolizálásához először létre kell hoznod a szükséges fájlokat az adott verzióhoz. Ahhoz, hogy a deobfuszkálás vagy a szimbolizálás működjön, az alkalmazásod minden egyes új verziójához fel kell töltened egy fájlt.

Java: ProGuard hozzárendelési fájl létrehozása

Java-veremkivonatok deobfuszkálásához először ProGuard hozzárendelési fájlt kell létrehoznod. Ennek lépéseiről a Google Developers webhelyén találsz további információkat.

Natív: Hibakeresési szimbólumokat tartalmazó fájl létrehozása

Androidos Gradle beépülő modul 4.1-es vagy későbbi verzió

Ha a projekted Android App Bundle csomagokat használ a buildkészítési folyamat során, akkor azokba automatikusan beleteheted a hibakeresési szimbólumokat tartalmazó fájlt. A fájl beillesztéséhez add hozzá a következőt az alkalmazásod build.gradle fájljához:

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

Megjegyzés: A hibaelhárítási szimbolizációs fájl maximális mérete 800 MB. Ha a hibakeresési szimbólumkészleted túl nagy, akkor a fájl méretének csökkentéséhez a FULL helyett használd a SYMBOL_TABLE kódrészletet.

Ha a projekted APK-t használ a buildkészítési folyamat során, akkor a fenti build.gradle buildbeállítás segítségével hozd létre külön a hibakeresési szimbólumokat tartalmazó fájlt. A hibakeresési szimbólumokat tartalmazó fájlt manuálisan töltsd fel a Google Play Console felületére az alábbi 2. lépésben (Deobfuszkációs vagy szimbolizációs fájl feltöltése) leírtak szerint. A buildkészítési folyamat során az Androidos Gradle beépülő modul a következő projekthelyen jeleníti meg a fájlt:

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

Androidos Gradle beépülő modul 4.0-s vagy korábbi verzió (és más buildrendszerek)

Alkalmazáscsomag vagy APK buildkészítési folyamata során az Androidos Gradle beépülő modul a nem stripped állapotú függvénytárak egy példányát projektkönyvtárba helyezi. A könyvtár felépítése valahogy így néz ki:

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

Megjegyzés: Ha más buildrendszert használsz, akkor módosíthatod azt is úgy, hogy a nem stripped állapotú függvénytárakat a fenti (kötelezően alkalmazandó) felépítéshez hasonló könyvtárban tárolja.

  1. Csomagold be a könyvtár tartalmát egy ZIP-fájlba:
    • $ cd app/build/intermediates/cmake/universal/release/obj
    • $ zip -r symbols.zip .
  2. A symbols.zip fájlt manuálisan töltsd fel a Play Console felületére az alábbi 2. lépésben (Deobfuszkációs vagy szimbolizációs fájl feltöltése) leírtak szerint.

A hibaelhárítási szimbolizációs fájl maximális mérete 800 MB. Ha a fájlod túl nagy, akkor az valószínűleg azért van, mert az .so fájljaid szimbólumtáblázatot (függvénynevek) és DWARF hibakeresési információkat (fájlnevek és kódsorok) is tartalmaznak. Ezekre nincs szükség a kód szimbolizálásához, és a következő parancs futtatásával eltávolíthatod őket:

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

Megjegyzés: Az $OBJCOPY az ABI interfésznek arra a konkrét verziójára mutat, amelyet éppen strippelsz, például: ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-objcopy

2. lépés: Deobfuszkációs vagy szimbolizációs fájl feltöltése

Az alkalmazásod bármely verziójánál az összeomlások vagy ANR-ek deobfuszkálásához fel kell töltened a deobfuszkációs vagy szimbolizációs fájlokat az alkalmazásod minden egyes verziójához.

Fontos: Ez a lépés csak az APK-t használó fejlesztők esetében szükséges. Ha alkalmazáscsomagot és legalább 4.1-es verziószámú Androidos Gradle beépülő modult használsz, akkor nincs teendőd. Automatikusan beolvassuk a deobfuszkációs fájlt a csomagból, te pedig a 3. lépésre (Deobfuszkált összeomlási veremkivonatok megtekintése) ugorhatsz. Az Android-fejlesztők webhelyén további információt találhatsz az alkalmazáscsomagokról.

Fájlok feltöltése a Play Console segítségével

Deobfuszkációs vagy szimbolizációs fájl feltöltéséhez a következőt kell tenned:

  1. Nyisd meg a Play Console oldalát.
  2. Válaszd ki az alkalmazást.
  3. A bal oldali menüben válaszd a Kiadás > Alkalmazáscsomag-kezelő lehetőséget.
  4. A jobb felső sarokban található választó segítségével válaszd ki a kívánt köztes terméket.
  5. A Letöltések lapon görgess le a „Tartalmak” szakaszhoz.
  6. Kattints a hozzárendelési fájlhoz vagy a hibakeresési szimbólumokat tartalmazó fájlhoz tartozó feltöltési nyílra, hogy feltöltsd a deobfuszkációs vagy szimbolizációs fájlt az alkalmazásod verziójához.
Fájlok feltöltése a Google Play Developer API segítségével

Ha a Google Play Developer API segítségével szeretnél fájlokat feltölteni, lépj a Google Developers webhelyre.

3. lépés: Deobfuszkált összeomlási veremkivonatok megtekintése

Miután feltöltötted a ProGuard hozzárendelési fájlt vagy a hibakeresési szimbólumokat tartalmazó fájlt az alkalmazásod valamelyik verziójához, akkor ezt követően az összeomlások és ANR-hibák deobfuszkálva lesznek. Az egyes összeomlások és ANR-ek deobfuszkált veremkivonatait áttekintheted az alkalmazásod Összeomlások és ANR-ek oldalán.

  1. Nyisd meg a Play Console oldalát.
  2. Válaszd ki az alkalmazást.
  3. A bal oldali menüben válaszd a Minőség > Android vitals> Összeomlások és ANR-ek lehetőséget.
  4. Válaszd ki a kívánt összeomlást.
  5. A „Veremkivonatok” szakaszban láthatod a deobfuszkált és szimbolizált veremkivonataidat.

Fontos: Miután feltöltötted a hozzárendelési fájlt az alkalmazásod valamelyik verziójához, akkor az alkalmazásod azon verziójánál csak a jövőbeni összeomlások és ANR-ek lesznek deobfuszkálva. Nem lesznek deobfuszkálva az alkalmazásod valamely verziójának azon összeomlásai és ANR-hibái, amelyek azelőtt történnek, hogy feltöltöd a vonatkozó hozzárendelési fájlt.

Gyakran ismételt kérdések

Nem szeretném használni a Play Console felületét a deobfuszkációra/szimbolizációra. Nem végezhetném el esetleg offline?

A Play Console ndk-stack segítségével szimbolizálja a veremkivonatokat natív alkalmazások esetén, illetve ReTrace fájlokat használ Java-összeomlásokhoz. Ha úgy döntesz, hogy nem szeretnéd megosztani deobfuszkációs fájljaidat, akkor az obfuszkált összeomlási veremkivonatokat átmásolhatod a Play Console felületéről, és a megfelelő eszközzel offline is szimbolizálhatod őket. Ezt a folyamatot azonban manuálisan kell elvégezni minden összeomlási veremkivonatnál, ezért lassú és időigényes. A deobfuszkációs fájljaid megadásával a Play Console ezt megoldja helyetted.

Miért van az, hogy feltöltöttem a deobfuszkációs/szimbolizációs fájlokat, de az összeomlások és ANR-ek továbbra is obfuszkáltak?

Miután feltöltötted a ProGuard hozzárendelési fájlt vagy a hibaelhárítási szimbolizációs fájlt az alkalmazásod valamelyik verziójához, akkor csak az ezután bekövetkező összeomlások és ANR-hibák lesznek deobfuszkálva. Hagynod kell egy kis időt, hogy a felhasználók eszközei új összeomlásokat és ANR-eket jelentsenek, mielőtt deobfuszkált összeomlások és ANR-ek jelennek meg a Play Console felületén.

A deobfuszkációs/szimbolizációs fájl feltöltése után miért csak részben vannak deobfuszkálva az összeomlások és ANR-ek?

Ez azért van, mert hiányos deobfuszkációs/szimbolizációs fájlt töltöttél fel. Fontos, hogy a szimbolizációs fájlok az egész alkalmazásra vonatkozzanak, különösen akkor, ha összetett vagy többlépcsős buildkészítési folyamatot alkalmazol. Az egyik leggyakoribb oka a részleges deobfuszkációnak az, ha harmadik fél függvénytárát használod. Ebben az esetben esetleg a könyvtár szolgáltatójától szerezheted be a deobfuszkációs fájlokat.

A deobfuszkációs/szimbolizációs fájl feltöltése után miért van az, hogy látszólag kevesebb, de súlyosabb összeomlásokat és ANR-eket kapok?

Deobfuszkációs fájlok nélkül ugyanaz az összeomlás vagy ANR külön jelenik meg 32 bites és 64 bites eszközökön, illetve ARM és Intel eszközökön. Deobfuszkációs fájlok megadásával összefűzhetjük ezeket az összeomlásokat, ezáltal pedig jobb rálátást biztosítunk neked az alkalmazásodra legnagyobb hatást gyakorló összeomlásokra és ANR-ekre.

Mi történik, ha elfelejtem feltölteni a fájlt?

Ha elfelejted feltölteni a fájlt az alkalmazásod új verziójához, akkor az összeomlások és ANR-ek újra obfuszkálva lesznek. Kövesd a fenti utasításokat, hogy feltölthesd a fájlt most. Miután feltöltötted a ProGuard hozzárendelési fájlt vagy a hibaelhárítási szimbolizációs fájlt az alkalmazásod valamelyik verziójához, akkor csak az ezután bekövetkező összeomlások és ANR-hibák lesznek deobfuszkálva. Hagynod kell egy kis időt, hogy a felhasználók eszközei új összeomlásokat és ANR-eket jelentsenek, mielőtt deobfuszkált összeomlások és ANR-ek jelennek meg a Play Console felületén.

Hogy elkerüld a kockázatát annak, hogy elfelejted feltölteni a fájlt, fontold meg a buildkészítési folyamatod módosítását, és használj alkalmazáscsomagokat az Androidos Gradle beépülő modul legalább 4.1-es verziójával. Ebben az esetben automatikusan belefoglalhatod a hibakeresési szimbólumokat tartalmazó fájlt az alkalmazáscsomagba, ha követed az Android-fejlesztők webhelyén lévő utasításokat.

Mi történik, ha rossz fájlt töltök fel?

Ha rossz fájlt töltesz fel az alkalmazásod bármely verziójához, akkor az összeomlások és ANR-ek újra obfuszkálva lesznek. A javított verzió feltöltéséhez kövesd az alábbi lépéseket:

  1. Nyisd meg a Play Console oldalát.
  2. Válaszd ki az alkalmazást.
  3. A bal oldali menüben válaszd a Kiadás > Alkalmazáscsomag-kezelő lehetőséget
  4. A jobb felső sarokban található választó segítségével válaszd ki a kívánt köztes terméket.
  5. A Letöltések lapon görgess le a „Tartalmak” szakaszhoz.
  6. A helytelen deobfuszkációs vagy szimbolizációs fájl mellett kattints a törlés ikonra.
  7. Miután törölted a helytelen verziót, kattints a feltöltés ikonra, és töltsd fel a helyes fájlt az alkalmazásod adott verziójához.

Miután feltöltötted a helyes ProGuard hozzárendelési fájlt vagy a hibakeresési szimbólumokat tartalmazó fájlt az alkalmazásod valamelyik verziójához, csak az ezt követően bekövetkező összeomlások és ANR-hibák lesznek deobfuszkálva. Hagynod kell egy kis időt, hogy a felhasználók eszközei új összeomlásokat és ANR-eket jelentsenek, mielőtt deobfuszkált összeomlások és ANR-ek jelennek meg a Play Console felületén.

Tipp: Hogy elkerüld a kockázatát annak, hogy rossz fájlt töltesz fel, fontold meg a buildkészítési folyamatod módosítását, és használj alkalmazáscsomagokat az Androidos Gradle beépülő modul legalább 4.1-es verziójával. Ebben az esetben automatikusan belefoglalhatod a hibakeresési szimbólumokat tartalmazó fájlt az alkalmazáscsomagba, ha követed az Android-fejlesztők webhelyén lévő utasításokat.

Jelenleg APK-kat használok. Hogyan válthatok át alkalmazáscsomagok használatára?

A kezdő lépésekhez látogass el az Android-fejlesztők webhelyére.

Az alkalmazásom natív és Java-kódokat is tartalmaz. Feltölthetek natív szimbolizációs fájlt és Java deobfuszkációs fájlt is?

Igen.

Miért nem jelenik meg egyes ANR-ek esetében a veremkivonat?

A rendszer időnként ANR-t észlel, a veremkivonat gyűjtésére azonban nem alkalmas. Ebben az esetben a megjelenő ANR teljesebb képet nyújt az alkalmazásod stabilitásáról, maga a veremkivonat viszont nem jeleníthető meg. A veremkivonatok nélküli ANR-eket típus és tevékenység alapján csoportosítja a rendszer, így a hasonló ANR-ek áttekintése és kijavítása segíthet csökkenteni a veremkivonatot nem tartalmazók számát.

Hasznosnak találta?

Hogyan fejleszthetnénk?

További segítségre van szüksége?

Próbálja ki a következő lépéseket:

Keresés
Keresés törlése
A keresés bezárása
Főmenü
6101830519785950468
true
Keresés a Súgóoldalakon
true
true
true
true
true
92637
false
false