A sérült APK-fájlok javítása és az eszközök kibontása

A smartphone showing a file error with a small toolbox, illustrating fixing a corrupt APK

Órákig töltöttél egy 2 GB-os játékcsomag letöltésével, de a böngészőben 99%-nál a „Letöltés sikertelen” üzenet jelenik meg, vagy ami még rosszabb, hogy az Android azt kiabálja, hogy "Elemzési hiba: Hiba történt a csomag elemzése során." A sérült APK nem feltétlenül halott fájl. Mivel az APK-k a ZIP-tömörítési szabványra épülnek, gyakran javíthatók, legalább annyira, hogy kinyerjük a benne lévő értékes eszközöket.

Az alábbiakban bemutatjuk, hogy valójában mi tönkremegy egy APK-ban, milyen javítóeszközökhöz érdemes nyúlni, és hogyan segíthet a XAPK konverter, ha törött csomaggal van dolgod.

Gyors összefoglaló. Öt másodperces összefoglaló: A legtöbb sérült APK-ban sérülés van a ZIP központi könyvtárában vagy benne classes.dex. ZIP-szintű sérülések javíthatók zip -FF vagy 7-Zip. DEX szintű sérülés nem; ebben az esetben állítsa vissza az elérhető eszközöket, és töltsön le újra egy tiszta APK-t. zipalign A hibák nem valódi korrupciók, és egyetlen paranccsal javíthatók.

Az APK korrupció anatómiája

Az APK lényegében egy meghatározott szerkezetű ZIP-archívum. A korrupció általában három hely egyikén történik:

  1. A fejléc: A fájl legelején lévő bájtok hiányoznak vagy megváltoztak.
  2. A Manifest (XML): A AndroidManifest.xml rosszul formázott, vagy nem támogatott kódolást használ.
  3. A DEX kód: A tényleges Java/Kotlin bájtkód csonkolt, így az alkalmazás futtathatatlan.

1. módszer: Fej nélküli ZIP-javítás (a legegyszerűbb)

Ha a fájl „olvasható”, de nem nyílik meg, használjon olyan eszközt, mint a DiskInternals ZIP javítás (ingyenes), vagy a parancssori zip -FF parancsot Linux/macOS rendszerben. Ezek az eszközök átvizsgálják a fájlt a fájlok "aláírásai" után, és a központi könyvtárat a semmiből felépítik.

Kód a terminál felhasználóinak: zip -FF corrupt_app.apk --out fixed_app.apk

2. módszer: Zipalign/Alignment rögzítése

Néha egy APK „sérült”, mert nem igazodik a 4 bájtos határokhoz. Az Android memóriakezeléséhez ez szükséges. Ezt az Android SDK zipalign eszközével javíthatja:

zipalign -v 4 input.apk output.apk

Bit-rot figyelmeztetés

Ha magából a DEX (osztályok.dex) fájlból hiányoznak az adatok, akkor semmilyen ZIP-javítás nem fogja az alkalmazást működni. Ebben az esetben az egyetlen cél a Eszközök/Források kibontása és az alkalmazás új példányának megkeresése.

Hogyan lehet megmondani, hogy valójában mi a baj

A javítószerszám kiválasztása előtt azonosítsa a hibát. Az Android (vagy az archiváló eszköz) által megjelenített hibaüzenet általában egy nyom:

Tünet, amit lát Mit jelent általában Mit érdemes először kipróbálni
„A csomag elemzése” nem sikerült (Android) A ZIP központi könyvtára olvashatatlan, vagy a jegyzék verziója nem egyezik ZIP-fejléc javítása (1. módszer)
"Hiba történt a csomag elemzésekor" + az APK valamivel kisebb a vártnál Csonka letöltés: az utolsó néhány KB nem érkezett meg Letöltés újra ugyanabból a forrásból; ZIP javítás, ha az újraletöltés nem érhető el
7-Zip / WinRAR megnyitja, de "CRC hibát" jelent az egyes fájlokon A ZIP-ben lévő egyes fájl sérült Csomagoljon ki mindent kivéve a sérült elemet, majd nézze meg, mi hiányzik
"Az alkalmazás nincs telepítve" további részletek nélkül Gyakran aláírási eltérés vagy igazítási probléma, nem valódi korrupció zipalign + aláírás újbóli ellenőrzése (2. módszer)
A java.lang.VerifyError telepítése után azonnal összeomlik A classes.dex bájtkód sérült vagy verzióval nem kompatibilis Javítással nem helyreállítható. Szerezzen be újra egy tiszta másolatot.

Konkrét átjárás

Képzeld el, hogy egy 320 MB-os APK-hoz jutottál, amelynek letöltése nagyjából 99%-ban megszakadt. A telefon megtagadja a telepítést a „A csomag elemzése nem sikerült” üzenettel. Így támadhatja meg Windows vagy macOS munkaállomáson, abban a sorrendben, ahogyan ténylegesen kipróbálná a dolgokat.

1. lépés: Győződjön meg arról, hogy a fájl legalább nagyrészt ott van

Hasonlítsa össze a fájlméretet a forrásoldalon feltüntetett adattal. Ha a fájl jóval kisebb (például 320 MB helyett csak 220 MB), a letöltés félbeszakadt, és nincs értelme a csomag javításával próbálkozni, mivel a classes.dex vagy az erőforrások jelentős része egyszerűen hiányzik. Ilyen esetben indítsa újra a letöltést.

2. lépés Tesztelje a ZIP-struktúrát

Nyisson meg egy terminált az APK-t tartalmazó mappában, és futtassa MacOS vagy Linux rendszeren:

unzip -t broken.apk

Az eszköz minden, az archívumban lévő fájlt és a CRC-hibákat jelenteni fogja. Ha csak néhány bejegyzés hibázik, és azok nem classes*.dex vagy resources.arsc, akkor megfelelő esélye van a működő telepítésre.

3. lépés: Építse újra a központi könyvtárat

Ha a unzip -t magával a központi címtárral kapcsolatban panaszkodik ("a központi könyvtár végének aláírása nem található", "1 EOCD hiányzik"), használja a "javítás" módot:

zip -FF broken.apk --out fixed.apk

A -FF jelző utasítja a zip-t, hogy vizsgálja meg a fájlt helyi fájlfejléc-aláírások után, és bejegyzésenként építse újra a könyvtárat. A kimenet, a fixed.apk, az, amit valójában telepíteni próbál.

4. lépés: Igazítsa újra, és szükség esetén írja alá újra

Bármilyen szerkezeti változtatás után az APK aláírása már nem érvényes, mert akár egy bájt módosítása érvényteleníti a v2/v3 aláírásblokkokat. Ha van saját aláíró kulcsa (ez megfelelő a saját buildjeihez), igazítsa be, és írja alá újra:

zipalign -v 4 fixed.apk aligned.apk
apksigner sign --ks my.keystore aligned.apk

Saját kulcs nélkül a fájl telepítésének egyetlen módja a létező telepítés ugyanazzal az aláíró tanúsítvánnyal, ami azt jelenti, hogy a harmadik féltől származó javított APK nem települ a Play Áruház meglévő telepítésére, mivel az aláírási lánc megváltozott.

Amikor a javítás a rossz cél

Érdemes őszintének lenni abban, hogy a "javítás" mit tehet és mit nem:

Ha egyszerűen az volt a cél, hogy olyan játékkal játssz, amelynek letöltése 99%-nál elhalt, a legkisebb ellenállás szinte mindig a részfájl törlése, a lemezterület felszabadítása, és a letöltés egy megbízható kapcsolatról. A javítóeszközök ragyognak, ha az újraletöltés lehetetlen: régi archivált APK-k, hibás LAN-átvitelen keresztül kapott fájlok vagy olyan biztonsági másolatok, amelyeknek az eredeti forrása eltűnt.

Gyakran Ismételt Kérdések (GYIK)

Kibonthatom az ikonokat és a képernyőképeket egy törött APK-ból?

Általában igen. Az ikonfájlok res/mipmap-* alatt élnek, és a képernyőképadatok eleve ritkák az APK-kban. Még akkor is, ha a központi könyvtár sérült, az egyes fájlfejlécek elég gyakran érintetlenek ahhoz, hogy a 7-Zip „Kibontás figyelmen kívül hagyott hibákkal” opciója a legtöbb képet kihúzza.

A javított APK frissíti a telepített alkalmazást?

Csak akkor, ha a javítás megőrizte az eredeti aláírást, ami egy szerkezeti helyreállítás után általában lehetetlen. Kezelje a javított APK-t új telepítésként: először távolítsa el a régi verziót (ezzel elvesznek a helyi adatok), vagy telepítse olyan készülékre, amelyen még nincs fent az alkalmazás.

Van olyan online eszköz, amely mindezt megteszi?

A böngésző alapú eszközök képesek elolvasni az APK szerkezetét, és megmondani, hogy mi hibásodott meg (a mi APK információs eszköz-ünk pontosan ezt teszi), de valójában a ZIP átírásához és újra aláírásához vagy asztali eszközre vagy szerverre van szükség. Szándékosan nem hajtjuk végre az újra-aláírási lépést a szerveren, mert az a fájl feltöltését jelentené: ennek az oldalnak az adatvédelmi ígérete az, hogy semmi sem hagyja el a böngészőt.

Mi a helyzet az XAPK fájlokkal, amelyeket nem sikerült kibontani?

Az XAPK csak egy ZIP, így ugyanazok a technikák érvényesek. Futtassa rajta a zip -FF-t a belső APK és az OBB-fájlok helyreállításához, majd járjon el úgy, mintha sérült APK-ja és külön OBB-je lenne.

Ha a célja csupán a grafikák, hangfájlok vagy OBB-adatok kinyerése egy félbeszakadt letöltésből, használja a 7-Zip programot. A 7-Zip jóval toleránsabb a Windows Intéző beépített ZIP-kezelőjénél, és a hibák figyelmen kívül hagyásával gyakran a részlegesen letöltött archívumokból is képes kibontani az ép fájlokat.

Deep Scan az APK-ját

Töltse fel a fájlt az elemzőnkbe, hogy megbizonyosodjon arról, hogy a struktúra érvényes-e, vagy a jegyzék nem olvasható.

Fájl állapotának elemzése

Következtetés

Az "elemzési hiba" azt jelenti, hogy az operációs rendszer feladja. A fent említett eszközök használatával visszaveszi az irányítást. Noha nem mindig lehet „megjavítani” egy elromlott alkalmazást, hogy fusson, a visszaállítani az adatokat belül szinte mindig megteheti. A nagy fájlok kezelésével kapcsolatos további tippekért tekintse meg a Osztott APK-k egyesítése vagy OBB játékadatok kinyerése útmutatónkat.

Mst Shaefale tervezte és dokumentálta Vezető fejlesztő és Android Package Architect • Ellenőrizve Android 12–15

Az Mst Shaefale karbantartja az ügyféloldali XAPK/APKS egyesítést, bináris jegyzékelemzőt és APK v1+v2 aláíró eszközöket a xapktoapk.com-nél. Elavult parancsot vagy operációs rendszerváltozást észlel? Szerkesztői megjegyzés küldése.