Як виправити пошкоджений файл APK і витягти ресурси

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

Ви витратили години на завантаження набору ігор на 2 ГБ, лише для того, щоб у вашому браузері на 99% вийшло повідомлення «Помилка завантаження» або, що ще гірше, Android вигукнув «Помилка аналізу: сталася проблема аналізу пакета».. Пошкоджений APK — це не обов’язково мертвий файл. Оскільки файли APK створено на основі стандарту стиснення ZIP, їх часто можна відремонтувати, принаймні достатньо, щоб витягти дорогоцінні ресурси всередині.

Нижче ми дізнаємося, що насправді ламається всередині APK, інструменти для відновлення, до яких варто звернутися, і як наш Конвертер XAPK може допомогти, коли ви маєте справу зі зламаним пакетом.

Короткий підсумок. П'ятисекундний підсумок: Більшість пошкоджених APK мають пошкодження в центральному каталозі ZIP або в classes.dex. Пошкодження на рівні ZIP можна виправити за допомогою zip -FF або 7-Zip. Пошкодження на рівні DEX не є; у такому випадку відновіть активи, які можете, і повторно завантажте чистий APK. zipalign помилки не є справжнім пошкодженням і виправляються однією командою.

Анатомія пошкодження APK

APK – це, по суті, ZIP-архів із певною структурою. Корупція зазвичай відбувається в одному з трьох місць:

  1. Заголовок: Байти на самому початку файлу відсутні або змінені.
  2. Маніфест (XML): AndroidManifest.xml має неправильний формат або використовує непідтримуване кодування.
  3. Код DEX: Фактичний байт-код Java/Kotlin скорочується, через що програма не працює.

Спосіб 1: безголовий ремонт ZIP (найпростіший)

Якщо файл «читається», але не відкривається, скористайтеся таким інструментом, як DiskInternals ZIP Repair (безкоштовно) або командою командного рядка zip -FF у Linux/macOS. Ці інструменти сканують файл на наявність «підписів» файлів і відновлюють центральний каталог з нуля.

Код для користувачів терміналу: zip -FF corrupt_app.apk --out fixed_app.apk

Спосіб 2: Виправлення Zipalign/Alignment

Іноді файл .apk є «пошкодженим» просто тому, що він не вирівняний за 4-байтними межами. Це потрібно для керування пам’яттю Android. Ви можете виправити це за допомогою інструменту zipalign з Android SDK:

zipalign -v 4 input.apk output.apk

Попередження Bit-Rot

Якщо в самому файлі DEX (classes.dex) відсутні дані, жодне відновлення ZIP не забезпечить роботу програми. У цьому випадку вашою єдиною метою має бути розпакувати Активи/ресурси і знайти нову копію програми.

Як зрозуміти, що насправді не так

Перш ніж вибрати інструмент для ремонту, визначте несправність. Повідомлення про помилку, яке показує Android (або ваш інструмент архівування), зазвичай є підказкою:

Симптом, який ви бачите Що це зазвичай означає Що спробувати в першу чергу
Помилка «розбору пакета» (Android) Центральний каталог ZIP не читається або версія маніфесту не збігається Ремонт заголовка ZIP (спосіб 1)
«Виникла проблема з аналізом пакета» + APK трохи менший, ніж очікувалося Урізане завантаження: останні кілька КБ так і не надійшли Повторне завантаження з того самого джерела; Відновлення ZIP, якщо повторне завантаження недоступне
7-Zip / WinRAR відкриває його, але повідомляє про помилку CRC для окремих файлів Окремий файл у ZIP пошкоджено Витягніть усе крім пошкодженого члена, а потім подивіться, чого не вистачає
"Програму не встановлено" без додаткових відомостей Часто проблема невідповідності підпису або вирівнювання, а не справжнє пошкодження zipalign + повторна перевірка підпису (спосіб 2)
Збій одразу після встановлення за допомогою java.lang.VerifyError Байт-код classes.dex пошкоджений або версія несумісна Не підлягає ремонту. Знову отримати чисту копію.

Конкретна прогулянка

Уявіть, що ви отримали файл APK розміром 320 МБ, завантаження якого було перервано приблизно на 99%. Ваш телефон відмовляється встановлювати його з повідомленням «Помилка аналізу пакета». Ось як атакувати його на робочій станції Windows або macOS у тому порядку, у якому ви б насправді спробували щось.

Крок 1. Переконайтеся, що файл є принаймні в основному

Перевірте розмір файлу відповідно до реклами джерела. Якщо файл значно менший (скажімо, 220 МБ замість 320 МБ), завантаження було сильно скорочено, і немає сенсу ремонтувати оболонку: великі частини classes.dex або активи просто відсутні. У такому випадку перезапустіть завантаження.

Крок 2. Перевірте структуру ZIP

Відкрийте термінал у папці, що містить APK, і запустіть у macOS або Linux:

unzip -t broken.apk

Інструмент повідомлятиме про кожен файл в архіві та будь-які помилки CRC. Якщо лише кілька записів виходять з помилками і вони не є classes*.dex або resources.arsc, у вас є пристойні шанси створити робочу інсталяцію.

Крок 3. Перебудуйте центральний каталог

Якщо unzip -t скаржиться на сам центральний каталог («підпис кінця центрального каталогу не знайдено», «відсутній 1 EOCD»), використовуйте режим «виправити»:

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

Прапор -FF повідомляє zip просканувати файл на наявність локальних підписів заголовків файлів і перебудувати каталог за записом. Вихід, fixed.apk, це те, що ви насправді намагаєтеся встановити.

Крок 4. Вирівняйте та підпишіть, якщо необхідно

Після будь-якої структурної зміни підпис APK більше не дійсний, оскільки зміна навіть одного байта робить недійсними блоки підпису v2/v3. Якщо у вас є власний ключ підпису (це добре для збірок, якими ви володієте), вирівняйте та повторно підпишіть:

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

Без вашого власного ключа єдиний спосіб інсталювати файл — установити існуючі із тим самим сертифікатом підпису, що означає, що відремонтований APK від третьої сторони не буде встановлено поверх існуючої інсталяції Play Store, оскільки ланцюжок підпису змінився.

Коли ремонт є неправильною метою

Варто бути чесним щодо того, що може, а що не може зробити «виправлення»:

Якщо вашою метою було просто зіграти в гру, завантаження якої припинилося на 99%, шлях найменшого опору майже завжди полягає в тому, щоб очистити частковий файл, звільнити місце на диску та завантажити знову через надійне з’єднання. Інструменти відновлення сяють, коли повторне завантаження неможливо: старі заархівовані файли APK, файли, отримані через нестабільну передачу по локальній мережі, або резервні копії, вихідне джерело яких зникло.

Часті запитання (FAQ)

Чи можу я витягнути значки та знімки екрана зі зламаного APK?

Зазвичай так. Файли значків знаходяться під res/mipmap-*, а дані знімків екрана рідко зустрічаються в APK. Навіть якщо центральний каталог пошкоджено, окремі заголовки файлів досить часто залишаються недоторканими, тому параметр «Видобути з ігноруванням помилок» 7-Zip видалить більшість зображень.

Чи оновить відремонтований APK встановлену програму?

Тільки якщо ремонт зберіг оригінальний підпис, що зазвичай неможливо після структурного виправлення. Розглядайте відремонтований APK як нову інсталяцію: спочатку видаліть стару версію (ви втратите її дані) або встановіть на пристрій, на якому ще немає програми.

Чи є онлайн-інструмент, який робить усе це?

Інструменти на основі веб-переглядача можуть прочитати структуру APK і повідомити вам, що зламано (наш Інструмент APK Info робить саме це), але фактично переписування ZIP-архіву та повторне підписання вимагає інструменту для робочого столу або сервера. Ми навмисно не запускаємо етап повторного підпису на сервері, оскільки це означало б завантаження вашого файлу: обіцянка конфіденційності цього сайту полягає в тому, що нічого не залишає ваш браузер.

Що щодо файлів XAPK, які не вдається розпакувати?

XAPK — це просто ZIP, тому застосовуються ті самі методи. Запустіть на ньому zip -FF, щоб відновити внутрішній файл APK і будь-які OBB-файли, а потім продовжуйте, як якщо б у вас був пошкоджений APK і окремий OBB.

Якщо ваша мета — лише отримати графіку, звуки чи дані OBB із невдалого завантаження, використовуйте 7-Zip. 7-Zip агресивніший, ніж ZIP-інструмент Провідника Windows, і часто дозволяє «Ігнорувати помилки» для вилучення файлів, які завантажено лише частково.

Глибоке сканування вашого APK

Завантажте файл у наш аналізатор, щоб перевірити, чи дійсна структура, чи маніфест нечитабельний.

Аналізуйте стан файлу

Висновок

«Помилка аналізу» означає, що ОС відмовилася. Використовуючи згадані вище інструменти, ви повертаєте контроль. Хоча ви не завжди можете «виправити» зламану програму, щоб запустити її, ви майже завжди можете відновити дані всередині. Щоб отримати додаткові поради щодо керування великими файлами, перегляньте наш посібник на Об’єднання розділених APK або Вилучення даних гри OBB.

Розроблено та задокументовано Mst Shaefale Провідний розробник і архітектор пакетів Android • Перевірено на Android 12–15

Mst Shaefale підтримує злиття XAPK/APKS на стороні клієнта, аналізатор бінарних маніфестів та інструменти підписання APK v1+v2 у xapktoapk.com. Помітили застарілу команду чи зміну ОС? Надіслати редакційну примітку.