Jak opravit poškozený soubor APK a extrahovat aktiva
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.
Anatomie korupce APK
APK je v podstatě archiv ZIP se specifickou strukturou. Ke korupci obvykle dochází na jednom ze tří míst:
- Záhlaví: Byty na samém začátku souboru chybí nebo jsou změněny.
- Manifest (XML): AndroidManifest.xml má nesprávný formát nebo používá nepodporované kódování.
- 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:
- Nemůžete obnovit bajty, které nikdy nepřišly. Pokud bylo stahování zkráceno, žádná oprava záhlaví nezrekonstruuje chybějící data. Znovu stáhnout.
- Bit-hniloba je trvalá. Pokud soubor seděl na úložišti, které překlopilo několik bitů uvnitř classes.dex, krok ověření bajtového kódu v době instalace jej odmítne a neexistuje způsob, jak zjistit, jaké měly být původní bajty.
- Opravené soubory mají nové podpisy. Dokonce i dokonale opravený soubor APK již není podepsán původním vydavatelem. To je funkce, nikoli chyba: brání útočníkovi vsunout škodlivý kód do oblíbené aplikace a znovu se podepsat, jako by byl původním vydavatelem.
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 souboruZá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.