Jak opravit poškozený soubor APK a extrahovat aktiva

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

Strávili jste hodiny stahováním 2GB herního balíčku, jen aby váš prohlížeč řekl „Stahování se nezdařilo“ na 99 %, nebo ještě hůř, aby Android křičel "Chyba analýzy: Při analýze balíčku došlo k problému." Poškozený soubor APK nemusí být nutně mrtvý soubor. Vzhledem k tomu, že soubory APK jsou postaveny na standardu komprese ZIP, lze je často opravit, alespoň natolik, aby bylo možné extrahovat vzácná aktiva uvnitř.

Níže se dostaneme k tomu, co se skutečně rozbije uvnitř souboru APK, nástroje pro opravu, po kterých stojí za to sáhnout, a jak vám naše XAPK konvertor může pomoci, když máte co do činění s rozbitým balíkem.

Rychlé shrnutí. Pětisekundové shrnutí: Většina poškozených souborů APK má poškození v centrálním adresáři ZIP nebo v něm classes.dex. Poškození na úrovni ZIP lze opravit pomocí zip -FF nebo 7-Zip. Poškození na úrovni DEX není; v takovém případě obnovte aktiva, která můžete, a znovu si stáhněte čistý soubor APK. zipalign chyby nejsou skutečnou korupcí a jsou opraveny jedním příkazem.

Anatomie korupce APK

APK je v podstatě archiv ZIP se specifickou strukturou. Ke korupci obvykle dochází na jednom ze tří míst:

  1. Záhlaví: Byty na samém začátku souboru chybí nebo jsou změněny.
  2. Manifest (XML): AndroidManifest.xml má nesprávný formát nebo používá nepodporované kódování.
  3. Kód DEX: Skutečný bytekód Java/Kotlin je zkrácen, takže aplikaci nelze spustit.

Metoda 1: Bezhlavá oprava ZIP (nejjednodušší)

Pokud je soubor „čitelný“, ale nelze jej otevřít, použijte nástroj jako Oprava ZIP DiskInternals (zdarma) nebo příkaz zip -FF z příkazového řádku v systému Linux/macOS. Tyto nástroje skenují soubor na "podpisy" souborů a znovu sestaví centrální adresář od začátku.

Kód pro uživatele terminálu: zip -FF corrupt_app.apk --out fixed_app.apk

Metoda 2: Fixace Zipalign/Alignment

Někdy je soubor APK „poškozený“ jednoduše proto, že není zarovnán na 4bajtových hranicích. Správa paměti Androidu to vyžaduje. Můžete to opravit pomocí nástroje zipalign ze sady Android SDK:

zipalign -v 4 input.apk output.apk

Varování před hnilobou

Pokud v samotném souboru DEX (classes.dex) chybí data, aplikace nebude fungovat ani po opravách ZIP. V tomto případě by vaším jediným cílem mělo být extrahovat Aktiva/zdroje a najít novou kopii aplikace.

Jak zjistit, co je ve skutečnosti špatně

Než si vyberete nástroj pro opravu, identifikujte poruchu. Chybová zpráva, kterou Android (nebo váš archivační nástroj) zobrazuje, je obvykle vodítkem:

Symptom, který vidíte Co to obvykle znamená Co zkusit jako první
"Analýza balíčku" se nezdařila (Android) Centrální adresář ZIP je nečitelný nebo se verze manifestu neshoduje Oprava záhlaví ZIP (metoda 1)
"Došlo k problému při analýze balíčku" + APK je o něco menší, než se očekávalo Zkrácené stahování: posledních pár KB nikdy nedorazilo Znovu stáhnout ze stejného zdroje; Oprava ZIP, pokud opětovné stažení není k dispozici
7-Zip / WinRAR jej otevře, ale u jednotlivých souborů hlásí chybu CRC Jednotlivý soubor uvnitř ZIP je poškozen Extrahujte vše kromě poškozeného člena a pak se podívejte, co chybí
"Aplikace není nainstalována" bez dalších podrobností Často nesoulad podpisů nebo problém se zarovnáním, nikoli skutečná korupce zipalign + opakovaná kontrola podpisu (Metoda 2)
Selhání okamžitě po instalaci pomocí java.lang.VerifyError Bytový kód classes.dex je poškozený nebo verze není kompatibilní Nelze obnovit opravou. Znovu získejte čistou kopii.

Betonová procházka

Představte si, že jste skončili s 320 MB APK, jehož stahování bylo přerušeno zhruba na 99 %. Váš telefon jej odmítne nainstalovat s hlášením „Analyzovat balíček se nezdařilo“. Zde je návod, jak na něj zaútočit na pracovní stanici Windows nebo macOS, v pořadí, ve kterém byste věci skutečně vyzkoušeli.

Krok 1. Potvrďte, že soubor je alespoň většinou tam

Zkontrolujte velikost souboru podle toho, co zdroj inzeruje. Pokud je soubor výrazně menší (řekněme 220 MB místo 320 MB), stahování bylo vážně zkráceno a nemá smysl opravovat obal: velké části classes.dex nebo aktiv jednoduše chybí. V takovém případě restartujte stahování.

Krok 2. Otestujte strukturu ZIP

Otevřete terminál ve složce obsahující soubor APK a spusťte v systému macOS nebo Linux:

unzip -t broken.apk

Nástroj ohlásí každý soubor v archivu a všechny chyby CRC. Pokud dojde k chybě pouze u několika položek a nejedná se o classes*.dex nebo resources.arsc, máte slušnou šanci na vytvoření funkční instalace.

Krok 3. Znovu vytvořte centrální adresář

Pokud si unzip -t stěžuje na samotný centrální adresář ("podpis konce centrálního adresáře nenalezen", "chybí 1 EOCD"), použijte režim "opravit":

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

Příznak -FF říká zip, aby naskenoval soubor na místní signatury záhlaví souboru a znovu sestavil položku adresáře po položkách. Výstup, fixed.apk, je to, co se ve skutečnosti pokoušíte nainstalovat.

Krok 4. V případě potřeby znovu zarovnejte a znovu podepište

Po jakékoli strukturální změně již podpis souboru APK není platný, protože úprava byť jednoho bajtu zneplatní bloky podpisu v2/v3. Pokud máte svůj vlastní podpisový klíč (to je v pořádku pro sestavení, která vlastníte), zarovnejte a znovu podepište:

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

Bez vlastního klíče je jediným způsobem instalace souboru prostřednictvím instalace existující se stejným podpisovým certifikátem, což znamená, že opravený soubor APK od třetí strany se nenainstaluje nad existující instalaci z Obchodu Play, protože se změnil podepisovací řetězec.

Když je oprava špatným cílem

Stojí za to být upřímný ohledně toho, co „oprava“ může a nemůže udělat:

Pokud bylo vaším cílem jednoduše hrát hru, jejíž stahování se zastavilo na 99 %, cestou nejmenšího odporu je téměř vždy vymazat částečný soubor, uvolnit místo na disku a znovu stáhnout ze spolehlivého připojení. Nástroje pro opravu zazáří, když opětovné stažení není možné: staré archivované soubory APK, soubory přijaté přes nespolehlivý LAN přenos nebo zálohy, jejichž původní zdroj je pryč.

Často Kladené Otázky (FAQ)

Mohu extrahovat ikony a snímky obrazovky z nefunkčního souboru APK?

Obvykle ano. Soubory ikon žijí pod res/mipmap-* a data snímků obrazovky jsou v APK pro začátek vzácná. I když je centrální adresář poškozen, hlavičky jednotlivých souborů jsou dostatečně často neporušené, takže možnost „Extrahovat s ignorovanými chybami“ v 7-Zip vytáhne většinu obrázků.

Bude opravený soubor APK aktualizovat nainstalovanou aplikaci?

Pouze v případě, že oprava zachovala původní podpis, což je po strukturální opravě obecně nemožné. Opravený soubor APK považujte za novou instalaci: nejprve odinstalujte starou verzi (přijdete o její data) nebo nainstalujte do zařízení, které aplikaci ještě nemá.

Existuje nějaký online nástroj, který tohle všechno umí?

Nástroje založené na prohlížeči dokážou přečíst strukturu souboru APK a říct vám, co je nefunkční (přesně to dělá náš Nástroj APK Info), ale ve skutečnosti přepsání ZIP a opětovné podepsání vyžaduje buď desktopový nástroj, nebo server. Záměrně neprovádíme krok opětovného podepsání na serveru, protože by to znamenalo nahrát váš soubor: příslib ochrany osobních údajů tohoto webu je, že nic neopustí váš prohlížeč.

Co se soubory XAPK, které se nepodařilo extrahovat?

XAPK je pouze ZIP, takže platí stejné techniky. Spusťte na něm zip -FF, abyste obnovili vnitřní APK plus všechny soubory OBB, pak postupujte, jako byste měli poškozený APK a samostatný OBB.

Pokud je vaším cílem pouze získat grafiku, zvuky nebo data OBB z neúspěšného stahování, použijte 7-Zip. 7-Zip je agresivnější než nástroj Windows Explorer ZIP a často vám umožní "Ignorovat chyby" extrahovat soubory, které jsou staženy pouze částečně.

Hluboké skenování vašeho APK

Nahrajte soubor do našeho analyzátoru, abyste zjistili, zda je struktura platná nebo zda je manifest nečitelný.

Analyzujte stav souboru

Závěr

"Chyba analýzy" znamená, že se OS vzdal. Použitím výše zmíněných nástrojů převezmete kontrolu zpět. I když ne vždy můžete "opravit" nefunkční aplikaci, aby fungovala, téměř vždy můžete obnovit data uvnitř. Další tipy pro správu velkých souborů najdete v našem průvodci na Sloučení rozdělených souborů APK nebo Extrahování herních dat OBB.

Navrhl a zdokumentoval Mst Shaefale Vedoucí vývojář a architekt balíčku Android • Ověřeno na Androidu 12–15

Mst Shaefale spravuje nástroje pro slučování XAPK/APKS na straně klienta, analyzátor binárních manifestů a nástroje pro podepisování APK v1+v2 na xapktoapk.com. Zaznamenali jste zastaralý příkaz nebo změnu operačního systému? Pošlete redakční poznámku.