Jak naprawić uszkodzony plik APK i wyodrębnić zasoby

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

Spędziłeś wiele godzin na pobieraniu pakietu gier o rozmiarze 2 GB, a Twoja przeglądarka wyświetliła komunikat „Pobieranie nie powiodło się” w 99% lub gorzej, a Android krzyknął „Błąd analizy: Wystąpił problem podczas analizowania pakietu.” Uszkodzony plik APK niekoniecznie jest martwym plikiem. Ponieważ pliki APK są zbudowane w oparciu o standard kompresji ZIP, często można je naprawić, przynajmniej na tyle, aby wyodrębnić z nich cenne zasoby.

Poniżej opisujemy, co tak naprawdę psuje się w pliku APK, po jakie narzędzia naprawcze warto sięgnąć i w jaki sposób nasz Konwerter XAPK może pomóc, gdy masz do czynienia z uszkodzonym pakietem.

Krótkie podsumowanie. Podsumowanie w pięciu sekundach: Większość uszkodzonych plików APK ma uszkodzenia w centralnym katalogu ZIP lub w classes.dex. Uszkodzenia na poziomie ZIP można naprawić za pomocą zip -FF lub 7-Zip. Obrażenia na poziomie DEX nie są; w takim przypadku odzyskaj dostępne zasoby i ponownie pobierz czysty plik APK. zipalign błędy nie są prawdziwym uszkodzeniem i są naprawiane jednym poleceniem.

Anatomia korupcji APK

Plik APK to zasadniczo archiwum ZIP o określonej strukturze. Korupcja zazwyczaj ma miejsce w jednym z trzech miejsc:

  1. Nagłówek: Brakuje bajtów na samym początku pliku lub są one zmienione.
  2. Manifest (XML): AndroidManifest.xml jest zniekształcony lub używa nieobsługiwanego kodowania.
  3. Kod DEX: Rzeczywisty kod bajtowy Java/Kotlin jest obcięty, co uniemożliwia uruchomienie aplikacji.

Metoda 1: Bezgłowa naprawa ZIP (najłatwiejsza)

Jeśli plik jest „czytelny”, ale nie można go otworzyć, użyj narzędzia takiego jak Naprawa plików ZIP wewnętrznych dysków (bezpłatne) lub polecenia zip -FF wiersza poleceń w systemie Linux/macOS. Narzędzia te skanują plik w poszukiwaniu „podpisów” plików i odbudowują katalog centralny od podstaw.

Kod dla użytkowników terminala: zip -FF corrupt_app.apk --out fixed_app.apk

Metoda 2: Naprawianie Zipalign/Wyrównanie

Czasami plik APK jest „uszkodzony” po prostu dlatego, że nie jest wyrównany w granicach 4-bajtowych. Wymaga tego zarządzanie pamięcią Androida. Możesz to naprawić za pomocą narzędzia zipalign z pakietu Android SDK:

zipalign -v 4 input.apk output.apk

Ostrzeżenie przed rotacją bitów

Jeśli w samym pliku DEX (classes.dex) brakuje danych, żadna naprawa ZIP nie sprawi, że aplikacja będzie działać. W takim przypadku Twoim jedynym celem powinno być wyodrębnienie Aktywa/Zasoby i znalezienie nowej kopii aplikacji.

Jak stwierdzić, co jest właściwie nie tak

Zanim wybierzesz narzędzie do naprawy, zidentyfikuj awarię. Komunikat o błędzie wyświetlany przez Androida (lub narzędzie do archiwizacji) jest zazwyczaj wskazówką:

Objaw, który widzisz Co to zwykle oznacza Czego spróbować najpierw
„Przeanalizowanie pakietu” nie powiodło się (Android) Nieczytelny katalog centralny ZIP lub niezgodność wersji manifestu Naprawa nagłówka ZIP (Metoda 1)
„Wystąpił problem podczas analizowania pakietu” + APK jest nieco mniejszy niż oczekiwano Skrócone pobieranie: ostatnie kilka KB nigdy nie dotarło Pobierz ponownie z tego samego źródła; Naprawa ZIP, jeśli ponowne pobranie jest niedostępne
7-Zip/WinRAR otwiera go, ale zgłasza „błąd CRC” w poszczególnych plikach Pojedynczy plik w ZIPie jest uszkodzony Wyodrębnij wszystko z wyjątkiem z uszkodzonego elementu, a następnie sprawdź, czego brakuje
„Aplikacja nie została zainstalowana” bez dalszych szczegółów Często problem z niedopasowaniem lub wyrównaniem podpisu, a nie rzeczywiste uszkodzenie zipalign + ponowne sprawdzenie podpisu (Metoda 2)
Awaria natychmiast po instalacji z java.lang.VerifyError Kod bajtowy classes.dex jest uszkodzony lub wersja jest niezgodna Nie do odzyskania w drodze naprawy. Uzyskaj ponownie czystą kopię.

Konkretny spacer

Wyobraź sobie, że masz plik APK o rozmiarze 320 MB, którego pobieranie zostało przerwane w około 99%. Twój telefon odmawia instalacji i wyświetla komunikat „Przeanalizowanie pakietu nie powiodło się”. Oto, jak zaatakować go na stacji roboczej z systemem Windows lub macOS, w kolejności, w jakiej faktycznie będziesz próbował.

Krok 1. Upewnij się, że plik jest tam przynajmniej w większości

Sprawdź rozmiar pliku względem tego, co reklamuje źródło. Jeśli plik jest znacznie mniejszy (powiedzmy 220 MB zamiast 320 MB), pobieranie zostało poważnie obcięte i naprawianie opakowania nie ma większego sensu: po prostu brakuje dużych części classes.dex lub zasobów. W takim przypadku uruchom ponownie pobieranie.

Krok 2. Przetestuj strukturę ZIP

Otwórz terminal w folderze zawierającym plik APK i uruchom w systemie macOS lub Linux:

unzip -t broken.apk

Narzędzie zgłosi każdy plik w archiwum i wszelkie błędy CRC. Jeśli tylko kilka wpisów zawiera błąd i nie są to classes*.dex ani resources.arsc, masz przyzwoitą szansę na stworzenie działającej instalacji.

Krok 3. Odbuduj katalog centralny

Jeśli unzip -t zgłasza problemy z samym katalogiem centralnym („nie znaleziono sygnatury końca katalogu centralnego”, „brak 1 EOCD”), użyj trybu „napraw”:

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

Flaga -FF mówi zip, aby przeskanował plik w poszukiwaniu lokalnych podpisów nagłówków plików i odbudował katalog wpis po wpisie. Wynik, fixed.apk, jest tym, co faktycznie próbujesz zainstalować.

Krok 4. Wyrównaj i podpisz ponownie, jeśli to konieczne

Po jakiejkolwiek zmianie strukturalnej podpis pliku APK traci ważność, ponieważ modyfikacja choćby jednego bajtu unieważnia bloki podpisu v2/v3. Jeśli masz własny klucz do podpisywania (jest to dobre w przypadku posiadanych kompilacji), wyrównaj i podpisz ponownie:

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

Bez własnego klucza jedynym sposobem zainstalowania pliku jest instalacja istniejący z tym samym certyfikatem podpisywania, co oznacza, że ​​naprawiony plik APK od strony trzeciej nie zostanie zainstalowany na istniejącej instalacji ze Sklepu Play, ponieważ łańcuch podpisywania uległ zmianie.

Kiedy naprawa jest złym celem

Warto szczerze powiedzieć, co „naprawa” może, a czego nie może:

Jeśli twoim celem było po prostu zagranie w grę, której pobieranie zakończyło się w 99%, ścieżką najmniejszego oporu jest prawie zawsze usunięcie częściowego pliku, zwolnienie miejsca na dysku i ponowne pobranie z niezawodnego połączenia. Narzędzia do naprawy sprawdzają się, gdy ponowne pobranie jest niemożliwe: stare zarchiwizowane pliki APK, pliki otrzymane przez niestabilny transfer w sieci LAN lub kopie zapasowe, których oryginalne źródło zniknęło.

Często Zadawane Pytania (FAQ)

Czy mogę wyodrębnić ikony i zrzuty ekranu z uszkodzonego pliku APK?

Zwykle tak. Pliki ikon znajdują się pod res/mipmap-*, a dane zrzutów ekranu są na początku rzadkością w plikach APK. Nawet jeśli katalog centralny jest uszkodzony, nagłówki poszczególnych plików pozostają nienaruszone na tyle często, że opcja „Wyodrębnij z ignorowanymi błędami” programu 7-Zip spowoduje wyciągnięcie większości obrazów.

Czy naprawiony plik APK zaktualizuje zainstalowaną aplikację?

Tylko jeśli w wyniku naprawy zachowano oryginalny podpis, co jest zazwyczaj niemożliwe w przypadku naprawy strukturalnej. Traktuj naprawiony plik APK jak nową instalację: najpierw odinstaluj starą wersję (stracisz jej dane) lub zainstaluj na urządzeniu, na którym nie ma jeszcze aplikacji.

Czy istnieje narzędzie online, które wykona to wszystko?

Narzędzia oparte na przeglądarce mogą odczytać strukturę pliku APK i powiedzieć, co jest uszkodzone (nasz Narzędzie informacyjne APK dokładnie to robi), ale w rzeczywistości przepisanie pliku ZIP i ponowne podpisanie wymaga albo narzędzia komputerowego, albo serwera. Celowo nie przeprowadzamy etapu ponownego podpisania na serwerze, ponieważ oznaczałoby to przesłanie pliku: ta witryna gwarantuje prywatność, że nic nie opuszcza przeglądarki.

A co z plikami XAPK, których nie można rozpakować?

XAPK to po prostu ZIP, więc obowiązują te same techniki. Uruchom na nim zip -FF, aby odzyskać wewnętrzny plik APK i wszelkie pliki OBB, a następnie postępuj tak, jakbyś miał uszkodzony plik APK i osobny OBB.

Jeśli Twoim celem jest jedynie uzyskanie grafiki, dźwięków lub danych OBB z nieudanego pobierania, użyj 7-Zip. 7-Zip jest bardziej agresywny niż narzędzie ZIP Eksploratora Windows i często pozwala „Ignorować błędy” w celu wyodrębnienia plików, które zostały pobrane tylko częściowo.

Głęboko zeskanuj swój plik APK

Prześlij plik do naszego analizatora, aby sprawdzić, czy struktura jest poprawna lub czy manifest jest nieczytelny.

Analizuj stan plików

Wniosek

„Błąd analizy” oznacza rezygnację z działania systemu operacyjnego. Korzystając z wyżej wymienionych narzędzi, odzyskujesz kontrolę. Chociaż nie zawsze możesz „naprawić” zepsutą aplikację, aby działała, prawie zawsze możesz w niej zainstalować odzyskać dane. Więcej wskazówek na temat zarządzania dużymi plikami znajdziesz w naszym przewodniku dotyczącym Łączenie podzielonych plików APK lub Wyodrębnianie danych gry OBB.

Zaprojektowane i udokumentowane przez Mst Shaefale Główny programista i architekt pakietów dla Androida • Zweryfikowano na Androidzie 12–15

Mst Shaefale obsługuje fuzję XAPK/APKS po stronie klienta, parser manifestu binarnego i narzędzia do podpisywania plików APK v1 + v2 w xapktoapk.com. Zauważyłeś nieaktualne polecenie lub zmianę systemu operacyjnego? Wyślij notatkę redakcyjną.